All disk drives connected to the Serial Bus of a Commodore 64 speak the Commodore DOS protocol, from the popular 1541 5.25″ drive to the modern sd2iec SD card interfaces. CMDR-DOS is a new and open source implementation of the Commodore DOS protocol, using SD cards with the FAT32 filesystem and supporting advances features like partitions, subdirectories and timestamps – and running on a 65c02!
Commander X16
It is the built-in DOS of the Commander X16, and runs on the main CPU, so the KERNAL API (talk, tksa, untlk, listn, secnd, unlsn, acptr, ciout) calls directly into the DOS implementation. This allows LOAD speeds of about 140 KB/sec on an 8 MHz system.
Demo:

Transcript:
DOS"$=P":REM THERE ARE TWO PARTITIONS ON THIS SD-CARD
255 "CMDR-DOS SD CARD" MBR
1 "PART1" FAT32
2 "PART2" FAT32
READY.
DOS"N1:SYSTEM,1616,FAT32":REM FORMAT PARTITION 1
READY.
DOS"N2:DATA,1617,FAT32":REM FORMAT PARTITION 2
READY.
DOS"$=P":REM THE NEW NAMES OF THE TWO PARTITIONS
255 "CMDR-DOS SD CARD" MBR
1 "SYSTEM" FAT32
2 "DATA" FAT32
READY.
DOS"CP1":REM SWITCH TO PARTITION 1
READY.
DOS"$":REM SHOW DIRECTORY
0 "SYSTEM " FAT32
99 MB FREE.
READY.
OPEN1,8,2,"HELLO,P,W":PRINT#1,"HELLO WORLD!":CLOSE1:REM CREATE FILE
READY.
DOS"$"
0 "SYSTEM " FAT32
1 "HELLO" PRG
99 MB FREE.
READY.
DOS"C:WORLD=HELLO":REM DUPLICATE FILE
READY.
DOS"$"
0 "SYSTEM " FAT32
1 "HELLO" PRG
1 "WORLD" PRG
99 MB FREE.
READY.
DOS"C:HELLO WORLD=HELLO,WORLD":REM CONCATENATE FILES
READY.
DOS"$"
0 "SYSTEM " FAT32
1 "HELLO" PRG
1 "WORLD" PRG
1 "HELLO WORLD" PRG
99 MB FREE.
READY.
DOS"MD:SECRET":REM CREATE SUBDIRECTORY
READY.
DOS"$"
0 "SYSTEM " FAT32
1 "HELLO" PRG
1 "WORLD" PRG
1 "HELLO WORLD" PRG
0 "SECRET" DIR
99 MB FREE.
READY.
DOS"$//SECRET/:":REM SHOW SUBDIR CONTENTS
0 "SYSTEM " FAT32
0 "." DIR
0 ".." DIR
99 MB FREE.
READY.
DOS"CD:SECRET":REM CHANGE TO SUBDIR
READY.
DOS"$"
0 "SYSTEM " FAT32
0 "." DIR
0 ".." DIR
99 MB FREE.
READY.
DOS"C:SECRET HELLO=//:HELLO":REM COPY FILE FROM ROOT TO HERE
READY.
DOS"CD:_":REM CHANGE BACK UP
READY.
DOS"CP2":REM CHANGE TO PARTITION 2
READY.
DOS"$
0 "DATA " FAT32
98 MB FREE.
READY.
DOS"C:DATA FILE=1//SECRET/:SECRET HELLO":REM COPY FILE FROM PARTITION 1
READY.
DOS"$
0 "DATA " FAT32
1 "DATA FILE" PRG
98 MB FREE.
READY.
DOS"$1:":REM SHOW DIRECTORY OF PARTITION 1
1 "SYSTEM " FAT32
1 "HELLO" PRG
1 "WORLD" PRG
1 "HELLO WORLD" PRG
0 "SECRET" DIR
99 MB FREE.
READY.
DOS"S1:H*":REM DELETE ALL FILES THERE STARTING WITH H
READY.
DOS:REM THIS WILL SAY THAT "02" FILES WERE DELETED
01, FILES SCRATCHED,02,00
READY.
DOS"CP1":REM CHANGE BACK TO PARTITION 1
READY.
DOS"$
0 "SYSTEM " FAT32
1 "WORLD" PRG
0 "SECRET" DIR
99 MB FREE.
READY.
DOS"S:*":REM DELETE ALL REMAINING FILES
READY.
DOS:REM THIS WILL SAY THAT "01" FILE WAS DELETED
01, FILES SCRATCHED,01,00
READY.
DOS"$":REM THE DIRECTORY IS STILL THERE
0 "SYSTEM " FAT32
0 "SECRET" DIR
99 MB FREE.
READY.
DOS"RD:SECRET":REM DELETE IT
READY.
DOS:REM "00" FILES DELETED, BECAUSE DIR WAS NOT EMPTY
01, FILES SCRATCHED,00,00
READY.
DOS"S//SECRET/:*":REM DELETE ALL FILES INSIDE
READY.
DOS:REM "01" FILE DELETED
01, FILES SCRATCHED,01,00
READY.
DOS"RD:SECRET":REM NOW TRY DELING THE DIR AGAIN
READY.
DOS:REM "01" FILES DELETED, IT WORKED THIS TIME
01, FILES SCRATCHED,01,00
READY.
DOS"$
0 "SYSTEM " FAT32
99 MB FREE.
READY.
REM THAT'S IT. :)
READY.
Source
The implementation is part of the Commander X16 ROM and available here:
https://github.com/commanderx16/x16-rom/tree/master/dos
Future
The codebase is very versatile and could be reused for other kinds of projects:
Other New Retro Machines
CMDR-DOS could be easily ported to other Commodore-like 65c02+ systems like the MEGA65 and the C256 Foenix, providing a DOS interface to FAT32 on those platforms.
sd2iec-like Device
Functionality-wise, the CMDR-DOS codebase is also very similar to what sd2iec does – minus the Commodore Serial part. It could be ported a device like the 1581replica, with an SD card attached instead of a disk drive, and one would have a 65c02-based sdi2ec-like device.
Hallo Michael.
Nice job 🙂 But something’s bothering me. Why not have a real dictionary of methods ? a-la MSDOS, unix shell or other ?
You mean a command reference? It’s there in the README of the GitHub repo: https://github.com/commanderx16/x16-rom/tree/master/dos
Very cool – I just came to check (and bookmark your site when I saw this site (and some new software for certain systems on a “8-Bit Show And Tell” channel on YouTube in video named “TRS-80 (1983-1987) Collection and Easter Eggs #SepTandy” (yes, the “hashtag” is part of the title).
Just wanted to give shout out and respect!