We are presenting the (to our knowledge) first full-featured open source library for 65c02 CPUs for accessing FAT32 formatted disks.
- The library supports filesystems from 32 MB to 2 TB, can read and write long filenames, subdirectories and time stamps, and can even create new filesystems.
- It decodes a Master Boot Record (MBR) partitioning table and can have multiple partitions mounted at the same time.
- It comes with a driver for the SD card protocol, so you can hook it to your own SD card solution; all you have to do is implement your own byte transmission code. If you want to use a VIA 65c22, you can hook up the 65c22 serial port code by the Steckschwein project.
- Converting character encodings and matching names is done using callbacks – you can use the X16 implementation for a template.
The API looks like this:
; allocate context for filesystem #0
; (first MBR partition, mount if necessary)
lda #0
jsr fat32_alloc_context
sta context
; open file
lda #<filename
sta fat32_ptr
lda #>filename
sta fat32_ptr + 1
jsr fat32_open
loop:
; read and print byte
jsr fat32_read_byte
bcc end
jsr print_character
jmp loop
end:
jsr fat32_close
lda context
jmp fat32_free_context
filename:
.byte '/path/to/file.txt', 0
The implementation uses the 65c02 extensions. With the help of 65c02.inc and some simple search-and-replace, it can be adapted for the 6502 though.
The library was written by Frank van den Hoef, with features (LFN, mkfs, …) added by Michael Steil.
It is the core of the DOS in the Commodore-like Commander X16 retro computer. The source is currently maintained as part of the X16 ROM:
https://github.com/commanderx16/x16-rom/tree/master/dos/fat32
Contributions welcome!
D’oh! The correct github link is https://github.com/commanderx16/x16-rom/tree/master/dos/fat32 now 🙂
Thanks, fixed!
Sadly, I can’t even compile the emulator anymore:
vera_spi.c: In function ‘vera_spi_step’:
vera_spi.c:31:8: error: ‘sdcard_attached’ undeclared (first use in this function); did you mean ‘sdcard_attach’?
31 | if (sdcard_attached) {
| ^~~~~~~~~~~~~~~
| sdcard_attach
vera_spi.c:31:8: note: each undeclared identifier is reported only once for each function it appears in
make: *** [Makefile:57: vera_spi.o] Error 1
Fixed in https://github.com/commanderx16/x16-emulator/commit/84d091a9bc084a0bb2c0504acf94efbefc58e02f
Someone needs to make this an CONFIGURE option for GEOS. Michael – the CONFIGURE source code has been reconstructed, and is available here:
https://github.com/xlar54/geos64_128-configure-master
It’s not that easy. GEOS relies heavily on the BAM family of filesystems. geoWrite for example asks the system for 1541/1581/CMD-style directory entries, extracts the track/sector pointer and reads the sector to get to a VLIR file’s index table. The FAT32 driver would have to emulate the looks of a BAM-style disk. That’s a lot of work.