MiSTer Computer Cores

July 23, 2026 · View on GitHub

This document cross-references every computer core listed on the MiSTer wiki (https://mister-devel.github.io/MkDocs_MiSTer/cores/computer/) against the filesystems Rusty Backup currently implements, and estimates the work to support the disk types (floppy / hard disk / CD-ROM) of the outstanding cores.

What Rusty Backup supports today

  • Filesystems: FAT12/16/32, exFAT, NTFS, HPFS (OS/2; read + edit + create + fsck), HFS, HFS+/HFSX, APFS (read-only browse + extract, incl. FileVault via password / recovery key; no snapshots), ext2/3/4, XFS, SquashFS v4.0 (read + edit — the read-only root filesystem of Buildroot and other appliance images, and of casper/filesystem.squashfs inside live-CD ISOs. Compressors read: gzip [fixture-tested] / XZ / LZMA / LZ4 / zstd; write: gzip / XZ / zstd. The format has no in-place write, so create / delete / mkdir / rename / symlink commit by rebuilding the whole image the way mksquashfs does — unchanged files keep their exact bytes, permissions, ownership, timestamps and xattrs. No fsck: SquashFS carries no checksums, so there is nothing to repair from), JFS, ReiserFS, UFS1/UFS2, btrfs, Minix V1/V2/V3 (read + edit + create + fsck), ProDOS (read + edit + create + fsck), Apple DOS 3.3 (read + edit + create + fsck), UCSD p-System (read + edit + create + fsck), MacPlus MFS (read + edit + create + fsck), Amiga OFS/FFS (AFFS) / PFS3 / SFS, IRIX EFS, CP/M (read + edit + create + fsck; multi-DPB: amstrad_data / amstrad_sys / amstrad_pcw / einstein / svi328_cpm / altair_8in / altair_cf / multicomp / zxplus3), Human68k, ADFS (read + edit [new-map + old-map D] + E-format create + new-map fsck), QDOS (QXL.WIN read + write + resize), QDOS Microdrive (detect-only scaffold), CBM DOS (1541 / 1571 / 1581 + PET 8050 / 8250 IEEE-488 read + write + fsck; add/delete bidirectionally cross-validated against the c1541 / Python d64 reference, fsck = VALIDATE with the BAM rewrite byte-verified against c1541 validate), Atari DOS 2 (2.0S / 2.5 read + write + create + fsck, .atr / .xfd), RS-DOS / CoCo Disk BASIC (read + write + fsck, raw 35- / 40-track .dsk / .jvc; cross-validated against an independent clean-room reader/writer derived from the toolshed libdecb semantics; fsck = granule-table reconciliation vs the directory chains, VALIDATE model), OS-9 / NitrOS-9 RBF (hierarchical Unix-like FS — read + write incl. subdirectories + create + fsck, raw .dsk / .vdk; cross-validated byte-exact against an independent clean-room RBF reader on real NitrOS-9 toolshed disks, fsck validated clean on the real fixture), DragonDOS (Dragon 32/64 read + write + fsck, single- / double-sided 40-track .dsk; cross-validated byte-exact against an independent clean-room reader/writer and against real third-party DragonDOS disks; fsck = sector-bitmap reconciliation, VALIDATE model), Acorn DFS (BBC Micro / BBC Master / Acorn Electron read + write + fsck, single-sided .ssd 40-/80-track and double-sided .dsd — the two track-interleaved sides de-interleave into two Acorn DFS partitions (@1 / @2), edits re-interleaving on save; flat catalogue in sectors 0–1, contiguous files in descending start-sector order, single-character directory namespaces; bidirectionally cross-validated byte-exact against an independent clean-room DFS reader/writer; fsck = contiguous-file consistency + canonical-order repair), TR-DOS (ZX Spectrum Beta Disk read + write + create + fsck, raw .trd 80-/40-track single-/double-sided; a flat 128-entry catalogue of contiguous files packed from a first-free high-water mark; every write cross-validated against an independent clean-room oracle, fsck = catalogue-packing + disk-info-counter reconciliation), TI-99/4A (read + write + create + fsck, flat V9T9 .dsk SSSD/DSSD/DSDD; a VIB allocation bitmap + a sorted FDIR of extent-based File Descriptor Records, big-endian; every write cross-validated against BOTH MAME's imgtool reader and an independent clean-room oracle, fsck = bitmap-vs-directory-walk reconciliation), Oric Jasmin (read + edit + create + fsck, flat 256-byte-sector .dsk SS 178 KB / DS 356 KB; free map + chained directory + sector-list inodes; modeled on MAME's fs_oric_jasmin and cross-validated against floptool), ANDOS (detect-only scaffold), and the optical-disc filesystems (ISO 9660
    • Joliet / Rock Ridge, High Sierra, UDF, HFS, HFS+, SGI EFS, UFS/FFS, VMS ODS-2, plus the video-game console filesystems Nintendo GameCube / Wii, Philips CD-i, and 3DO Opera — browse/extract, see Optical / CD-ROM below).
  • Partition tables: MBR, GPT, APM, Amiga RDB, Atari AHDI, Sharp X68000.
  • Containers: CHD, VHD (fixed + dynamic), QCOW2, VMDK, 2MG, WOZ, DC42, HFV, IMZ (encrypted ZIP), .zip (a RAW disk image inside a plain ZIP, inflated sparsely; --inside picks among multiple), GHO/GHS (Ghost SECTOR mode), MSA (Atari ST), EDSK/DSK (Amstrad CPC / PCW / Einstein / etc.), .d88 (Sharp X68000 / PC-88 / PC-98 / MSX / FM-7), Acorn .hdf (bare + Arculator-wrapped), Apple-II .do / .po / .dsk sector-order, gzip-wrapped Amiga .adz / .hdz.
  • Raw / superfloppy (partitionless) images are handled.
  • Optical / CD-ROM: rip a physical CD/DVD drive to ISO or BIN/CUE (optical rip), list drives (optical drives), convert ISO <-> BIN/CUE <-> CD-CHD (optical convert), and browse/extract ISO 9660 (+ Joliet / Rock Ridge), High Sierra, UDF, HFS, HFS+, SGI EFS, UFS/FFS, VMS ODS-2, and the video-game console discs — Nintendo GameCube / Wii (Wii decrypted internally, no key needed), Sega Dreamcast GD-ROM (.gdi + CHD), Philips CD-i, and 3DO — disc images, with console / serial / title / region identification. Built into both the desktop release and the MiSTer rb-cli-mini armv7 build (via opticaldiscs 0.8.0), for devices with an attached drive (e.g. the SuperStation One).
  • Remote optical ripping: the desktop app / CLI can drive a remote daemon's optical drive over the rb-daemon — the device (e.g. a MiSTer) only issues SCSI reads while the desktop does all the encoding (CHD compression never taxes the armv7 CPU). optical drives --remote host:port to discover; optical rip --device rb://host:port/dev/sr0, or the GUI Optical tab's "Add remote daemon..." button. See docs/remote_ripping.md.

Legend for the Support column:

  • Yes — filesystem + media path already work end to end.
  • Partial — one media path or one filesystem is covered, others are not.
  • No — outstanding; needs new filesystem (and sometimes container/partition) work.
  • N/A — tape / cartridge / ROM-only core; no disk filesystem to support.

Unified support table (all 64 cores)

CoreSystemMediaFilesystem(s)Rusty Backup support
ao486486DX33 PCFloppy, HDD, CDFAT12 / FAT16/32 (MBR) / HPFS (OS/2) / ISO9660Yes
PCXTIBM PC/XTFloppy, HDDFAT12 / FAT12-16 (MBR)Yes
MSXMSX/MSX2/TurboRFloppy, HDDFAT12 / FAT16 (Nextor VHD)Yes
MSX1Microsoft MSX1Floppy, HDDFAT12 / FAT12-16Yes
ZXNextZX Spectrum NextSD/HDD (VHD)FAT32/16/12Yes
TSConfZX-EvolutionSD/HDD (VHD)FAT32 (non-MBR)Yes
Minimig-AGACommodore AmigaFloppy, HDD, CDOFS/FFS, PFS3, SFS (RDB) / ISO9660Yes
MacPlusMacintosh PlusFloppy, HDDHFS / MFS (400K floppy)Yes — HFS + MFS both read/edit/create/fsck (400K / 800K MFS floppy)
AtariSTAtari ST/STeFloppy, HDDGEMDOS = FAT12 / FAT16Partial — FAT yes; needs Atari AHDI partition table for HDD
Apple-IIApple IIeFloppy, HDDDOS 3.3 / ProDOSYes — ProDOS (read + edit + create + fsck; rb-cli new volume prodos) + Apple DOS 3.3 (read + edit + create + fsck; rb-cli new floppy apple-dos, 140 KB .dsk/.do/.po). Sector-order auto-detect via containers::sector_order.
ZX-SpectrumSinclair ZX SpectrumFloppy, SD/HDDTR-DOS, G+DOS, +3DOS (CP/M-like), esxDOS FATPartial — TR-DOS (.trd, full quartet) + esxDOS FAT yes; +3DOS via CP/M (zxplus3 preset); G+DOS (MGT) no
X68000Sharp X68000Floppy, SASI/SCSI HDDHuman68k (FAT-derived dialect)Yes — floppy (Human68k read/browse/extract + add/delete/mkdir on .d88 / .xdf / .hdm / .dim; edits decode->mutate->re-encode back into the container, GUI and CLI) and SASI/SCSI HDD (.hda / .hdf / .hds) read/browse/extract/add/delete/mkdir + in-place FS grow/shrink (rb-cli resize) + defragmenting repack (rb-cli repack / Inspect-tab "Defragment…" — packs files contiguously, reclaiming holes left by deletions) + fsck (rb-cli fsck / Inspect-tab Check — FAT-chain reconciliation + FAT-mirror resync, lost-cluster reclaim), incl. real BlueSCSI X68SCSI1 1024-byte-sector images (sector size derived from the boot signature; Sharp/KG big-endian BPB + big-endian FAT). Verified byte-exact on the BlueSCSI HD10 SCSI fixture and the Populous/Lemmings/SSF2/Votoms 256-byte SASI game disks across grow→shrink round-trips (multi-cluster COMMAND.X + Japanese filenames survive). Backup/restore/reconstruct honor the true (non-512-aligned) partition byte offset via the persisted start_byte, so SASI backup→restore lands the partition region byte-identical. New 2026-06-10: rb-cli new hd x68k scaffolds self-bootable SASI/SCSI HDDs from scratch — emits the Sharp IPL signature, X68K partition table, IPL stub (halt or printed-banner via IOCS B_PRINT), and optionally clones an entire Human68k donor floppy (flat or .dim / .D88 / .xdf / .hdm) into the partition. MAME-verified on x68000 -sasi (SASI variant, 256-B sectors) and x68030 -hard (SCSI variant, 1024-B sectors). The donor's SWITCH.X /HD installs the partition boot sector on first FDD0 boot, after which the HDD self-boots to C:. Zero-manual-step mode also available: --boot-sector-donor hd0.hds --size 100M --variant scsi extracts the Sharp partition boot sector (Sharp IPL Copyright 1990 SHARP) from the well-known hd0.hds 100 MB Sharp/Keisoku Giken donor at build time and overlays it onto the output partition — no SWITCH.X step needed, self-boots straight to C:> on first power-on. Sharp's boot-sector bytes never live in the rusty-backup repo; same legal pattern as --system-disk (you provide the donor file, the bytes flow user→user).
ArchieAcorn ArchimedesFloppy, HDDADFS / FileCoreYes (new-map) — full quartet on the new-map layouts (E / F / HD): read + browse, edit (create / delete / rename via the FSM allocator), create blank E-format floppies (rb-cli new floppy adfs, 800 KB single-zone new-map FSM), and fsck (zone-checksum + cross-check verify + allocated-fragment-vs-directory-tree reconciliation; repair re-stamps the zone checksums, leaked-fragment reclaim withheld pending a full *CheckMap-style map rebuild). Disc Record scan spans the HD / E-format-floppy / legacy-floppy candidate offsets (0xFC0 / 0x404 / 0xDC0); byte-correct against marutan.net blank HD samples (blank256E.hdf, blank1024Eplus.hdf) and the 8bs.com arc-04.800.adf (E-format populated). Old-map D-format (no Disc Record; old free-space map + Hugo root at byte 1024) now reads and writes too — detect + read + create/delete/rename validated against real Repton 3 / Lemmings floppies (writes keep the old-map checksums valid so RISC OS still mounts the disc). .adf 800K floppy + bare and Arculator-wrapped .hdf HDD containers all handled. (Double-sided DFS .dsd is now supported via the fs::dfs path — see the BBCMicro row. Still open: double-sided ADFS L-format .adl.)
QLSinclair QLMicrodrive, HDDQDOS (QXL.WIN)Partial — QXL.WIN HDD read + write end-to-end (byte-correct against kilgus + smsqe MiSTer samples; write path validated against headless sQLux oracle — rb-cli put → SuperBASIC COPY → host file round-trips byte-exact, per-file 64-byte QDOS header convention honoured); .mdv microdrive detect + cart-name surfaced (full directory walk parked at OPEN-WORK §7 behind real-hardware oracle)
AmstradAmstrad CPC 6128FloppyAMSDOS, CP/M 2.2/PlusYesfs::cpm ships the amstrad_data + amstrad_sys DPBs covering both CPC data + system formats.
AmstradPCWAmstrad PCWFloppyCP/M PlusYesfs::cpm amstrad_pcw DPB.
TatungEinsteinTatung EinsteinFloppyXtal/DOS (CP/M-compatible)Yesfs::cpm einstein DPB.
SVI328Spectravideo SV-328FloppyCP/M (MSX-DOS/FAT12 possible)Partial — CP/M side covered by svi328_cpm DPB; the MSX-DOS / FAT12 floppy variant routes through the existing FAT driver but no SV-specific BPB quirks have been validated.
Altair8800MITS Altair 8800Floppy, IDE/CFCP/MYesfs::cpm ships both altair_8in (8-inch floppy) and altair_cf (CompactFlash HDD) DPBs.
MultiCompGrant Searle MultiCompFloppyCP/MYesfs::cpm multicomp DPB.
C64Commodore 64/128FloppyCBM DOS (flat track/sector)Yesfs::cbm reads + writes .d64 (1541) / .d71 (1571) / .d81 (1581); add/delete cross-validated against c1541 / Python d64.
C128Commodore 128FloppyCBM DOSYesfs::cbm .d64 / .d71 / .d81.
C16Commodore C16/Plus4FloppyCBM DOSYesfs::cbm .d64 (1541).
VIC20Commodore VIC-20FloppyCBM DOSYesfs::cbm .d64 (1541).
PET2001Commodore PETFloppy (IEEE-488)CBM DOS (D80/D82)Yesfs::cbm reads + writes the 8050 .d80 (533248 B, 77 trk) and 8250 .d82 (1066496 B, 154 trk) geometries: 29/27/25/23 zone map, BAM on track 38 (2–4 chained sectors, 5-byte/track entries), directory on track 39. Bidirectionally cross-validated against the Python d64 reference (read + write byte-exact). .d64 (1541/2031/4040) also works.
BBCMicroBBC Micro B/MasterFloppyAcorn DFS / ADFSYesfs::dfs reads + writes Acorn DFS single-sided .ssd (40-track 100K / 80-track 200K) and double-sided .dsd (the two track-interleaved sides de-interleave into two Acorn DFS partitions @1 / @2, edits re-interleaving on save): flat catalogue in sectors 0–1, up to 31 contiguous files in descending start-sector order, single-character directory namespaces, 18-bit load/exec/length, lock bits. Read/browse/extract + add/delete bidirectionally cross-validated byte-exact against an independent clean-room DFS reader/writer (locked files, non-$ dirs, real load/exec all round-trip); the .dsd de-interleave + @1/@2 split validated against real BBC PD music discs. ADFS floppies (.adf) are handled by fs::adfs (see the Archie row).
AcornElectronAcorn ElectronFloppyDFS / ADFSYes — same fs::dfs Acorn DFS read + write as BBCMicro (single-sided .ssd + double-sided .dsd, the latter presented as two partitions). ADFS floppies handled by fs::adfs.
AcornAtomAcorn AtomTape, FloppyAtom DOSNo
CoCo2Tandy CoCo 2FloppyRS-DOS / DragonDOS, OS-9 (RBF)Yesfs::rsdos reads + writes RS-DOS / Disk BASIC (granule allocation table on track 17, 72-file directory, granule-chain files; raw 35- / 40-track .dsk / .jvc), fs::os9 reads + writes OS-9 / NitrOS-9 RBF (hierarchical FS; .dsk / .vdk, byte-exact cross-validated against a clean-room RBF reader on real toolshed disks), and fs::dragondos reads + writes DragonDOS (see Dragon row).
DragonDragon 32/64FloppyDragonDOS, OS-9 (RBF)Yesfs::dragondos reads + writes DragonDOS (directory track 20 + backup track 16, one's-complement geometry signature, set-bit-free sector bitmap, 25-byte header/continuation directory entries; single- / double-sided 40-track .dsk). Byte-exact cross-validated against an independent clean-room reader/writer AND against real third-party DragonDOS disks (rolfmichelsen/dragontools' empty volume plus a populated 9-file AGD-suite disk, all files byte-identical across both readers). fs::os9 covers OS-9 / NitrOS-9 RBF.
CoCo3Tandy CoCo 3Floppy/virtualRS-DOS, OS-9 / NitrOS-9 (RBF)Yesfs::rsdos RS-DOS / Disk BASIC read + write (see CoCo2) and fs::os9 OS-9 / NitrOS-9 RBF read + write (add/delete incl. subdirectories), the two filesystems the CoCo3 core uses.
TRS-80Tandy TRS-80Floppy (JV1)TRSDOS / LDOS / NEWDOSNo
Atari800Atari 8-bitFloppy, ltd HDDAtari DOS (DOS 2.x)Yesfs::atari_dos reads + writes + creates + fscks Atari DOS 2.0S/2.5 (VTOC@360 bit-set-free bitmap, 64-file directory @361-368, linked-sector files). Single + enhanced density .atr / .xfd; rb-cli new floppy atari formats a blank SD disk, and fsck reconciles the VTOC bitmap + free-count against the directory chains. Read validated byte-exact against a real DOS 2.0S system disk + an independent clean-room reader; write validated the same way; fsck validated clean on the real fixture.
TI-99_4ATI-99/4AFloppyTI floppy FS (VIB/FDIR)Yes — full quartet on the V9T9 .dsk (read + edit + create + fsck)
OricTangerine OricFloppyJasmin (read+edit+create+fsck); Sedoric pendingPartial
SharpMZSharp MZFloppy, TapeSharp MZ FD formatNo
PC88NEC PC-8801 mkII SRFloppyN88-BASIC Disk BASICNo
SAM-CoupeSAM CoupeFloppySAM DOS / MasterDOSNo
ColecoAdamColeco AdamFloppy, DDP tapeEOS (read-only in core)No
BK0011MElektronika BKFloppy, HDD (VHD)ANDOS / CSIDOSPartialfs::andos ships a detect-only scaffold (boot-block signature probe surfaces "ANDOS" through fs_type()). Browse / extract returns Unsupported; CSIDOS not started. Sparse public docs limit the work to what real-disc fixtures can validate.
Vector-06CVector-06CFloppyMicroDOSNo
SpecialistSpecialistFloppySpecialist-MX FSNo
ZX81Sinclair ZX80/ZX81TapeN/A
Apple-IApple IROM/programN/A
AquariusMattel AquariusCart, TapeN/A
ApogeeApogee BK-01Tape/ROMN/A
AliceMC10Matra AliceTapeN/A
Casio_PV-2000Casio PV-2000CartridgeN/A
Chip8CHIP-8Program/ROMN/A
EDSACEDSACPaper tapeN/A
EG2000EACA Colour GenieTape, CartN/A
GalaksijaGalaksijaTapeN/A
HomelabCompukit HomelabTapeN/A
InteractInteractTapeN/A
JupiterJupiter AceTape, CartN/A
Laser310Vtech Laser 310TapeN/A
Lynx48Camputers LynxTapeN/A
OndraSPO186Tesla Ondra SPO-186TapeN/A
OraoPEL Varazdin OraoTapeN/A
PDP1DEC PDP-1Paper tapeN/A
PMD85Tesla PMD 85ROM, TapeN/A
RX-78Bandai RX-78CartridgeN/A
SordM5Sord M5Cart, TapeN/A
TomyTutorTomy TutorCart, TapeN/A
UK101Compukit UK101Tape/programN/A

Tally: 7 fully supported, 4 partial, 30 outstanding (No), 23 N/A (tape/cart/ROM-only).


Outstanding work, grouped by filesystem

Estimates assume one developer fluent in the codebase, and cover detect + browse/inspect + backup compaction. Edit / fsck / resize is an additional increment, only worthwhile on HDD-capable cores. Effort: S ~= days, M ~= 1-3 weeks, L ~= 3-6 weeks.

Rusty Backup's differentiators (resize, compaction, CHD/VHD/zstd compression) only matter for hard-disk-capable cores. Most outstanding cores are floppy-only with tiny fixed-geometry disks (140 KB-800 KB) where there is nothing to resize or compact — the work there is browse / inspect / verify / convert only.

Highest value — hard-disk-capable (resize/compaction pays off)

FilesystemCores unlockedEffortNotes / extra support needed
CP/M (parameterized)Amstrad, AmstradPCW, TatungEinstein, SVI328, Altair8800, MultiComp (+ ZX +3DOS)M-LOne implementation with a per-machine diskdef/DPB registry (like cpmtools) covers ~6 cores. Biggest core-count payoff. Needs EDSK container decoder.
Human68kX68000MFAT-derived — can reuse FAT scaffolding, but needs 18.3 names, Shift-JIS, case-sensitivity, X68k partition scheme. Needs .d88/.dim container decoder.
ADFS / FileCoreArchie (+ BBC/Electron ADFS)M-LAcorn-proprietary 256-byte-block FS with free-space map. Strip Arculator <=0.99 512-byte header.
QDOSQLMQXL.WIN hard-disk container; resize valuable. Microdrive .mdv is fixed-size.

Medium value — mostly floppy-only (browse/inspect/convert, no resize)

FilesystemCores unlockedEffortNotes / extra support needed
CBM DOSC64, C128, C16, VIC20, PET2001MFlat single-directory track/sector. Raw .d64/.d71/.d81/.d80/.d82 easy; needs GCR decoder for .g64/.g71 (+S-M). No resize concept.
Acorn DFSBBCMicro, AcornElectronSTrivial flat catalogue in track 0. (ADFS shares FileCore work above.)
RS-DOS/DragonDOS + OS-9 RBFCoCo2, CoCo3M eachRS-DOS granule table (a "FAT" in name only). OS-9 RBF is a separate Unix-like FS. Needs .jvc/.vdk handling.
Atari DOSAtari800S-MDOS 2.x family on .atr.
TI-99 FSTI-99_4AMVIB + FDIR sector scheme on .dsk.
TRS-80 DOSTRS-80MTRSDOS/LDOS/NEWDOS variants on JV1 sector dumps.
Sedoric (Oric DOS)OricS-MJasmin DONE (src/fs/oric.rs); Sedoric still pending.
N88-BASICPC88MNeeds .d88 container (shared with X68000).
Sharp MZ FDSharpMZS-MPer-machine floppy format.
EOSColecoAdamS-MBlock-based, read-only in the core -> read/browse only.
Atom DOSAcornAtomS-MNiche; mostly a tape machine.
SAM DOS / MasterDOSSAM-CoupeS-MMGT 800K layout (shares family with Spectrum G+DOS).

Low value — niche Soviet / hobby cores

FilesystemCoresEffortNotes
ANDOS / CSIDOSBK0011M (has .vhd HDD)MOnly outstanding Soviet core with HDD.
MicroDOSVector-06CMNeeds .fdd/.edd container.
Specialist-MX FSSpecialistMNeeds .odi container.

Near-complete touch-ups (small wins)

ItemCore(s)EffortNotes
Atari AHDI partition tableAtariSTSAtari's MBR-like scheme; makes ST hard-disk images first-class (FAT already supported).
Apple DOS 3.3Apple-IIS-MComplements existing ProDOS; covers sector-order .dsk/.do.

CD-ROM summary

CD-ROM support is effectively done. Only ao486 (ISO9660) and Amiga CD32 (data CDFS = ISO9660; audio not implemented in the core) use CD media. No other computer core uses CD-ROM, so no new optical work is required.

(The optical browser reads far more than the cores need — UDF, High Sierra, HFS / HFS+, SGI EFS, UFS/FFS, VMS ODS-2, and the video-game console filesystems GameCube / Wii, CD-i, and 3DO Opera in addition to ISO 9660 — so no CD-using core is filesystem-blocked.)


  1. CP/M (parameterized + EDSK decoder) — unlocks ~6 cores including two HDD-relevant ones. Biggest payoff.
  2. CBM DOS (+ GCR) — unlocks 5 Commodore cores.
  3. Near-complete touch-ups — AtariST AHDI partition table, Apple DOS 3.3.
  4. Human68k, ADFS/FileCore, QDOS — the three outstanding HDD filesystems where resize/compaction actually pays off.
  5. Everything else is floppy-only long-tail: implement on demand; browse/inspect-only is usually enough.

A recurring sub-task: several formats are container formats (.d88, EDSK, .g64/.g71, .msa, .dim, .vdk/.jvc, .fdd/.edd, .odi, .nib) that wrap sectors with per-track geometry. Build a shared "decode container -> flat LBA sectors" layer feeding the superfloppy path, reused across cores — budget that as one M infrastructure piece rather than re-solving it per filesystem.


Prior art: TotalImage and existing Rust crates

Survey done 2026-05-31 to answer "can we reuse existing code instead of writing every outstanding filesystem from scratch?"

TotalImage (../TotalImage)

  • What it is: an MIT-licensed disk-image editor written in C# / .NET 10 / WinForms. MIT is compatible with our AGPL-3.0 (port with attribution), but it is a different language — nothing links or imports; every reused line must be manually ported to Rust.
  • Filesystem overlap: it implements FAT12/16/32, exFAT, NTFS, ISO9660, UDF, and IMGFS (Windows CE). We already have everything except UDF and IMGFS, neither of which is in MiSTer scope. It contains none of the outstanding MiSTer filesystems (no CP/M, CBM DOS, ADFS, Human68k, QDOS, OS-9, etc.) — it is a PC/DOS/Windows-centric tool.
  • The one genuinely portable gem: FileSystems/FAT/FatFactory.cs does robust BPB-less FAT detection — infers geometry from image size + media descriptor + dual-FAT validation (4 disambiguation rounds), tries the BPB at alternate offsets (0x04 Zenith Z-100, 0x50 Apricot), and special-cases Acorn-DOS-800K and Victor 9000. Paired with the geometry table in DiskGeometries/FloppyGeometry.cs. Our src/fs/fat.rs::open currently requires a BPB at the standard offset with no fallback, so this is a real robustness gap-filler — but it only helps cores we already support (raw Atari ST .st, MSX .dsk, odd PC floppies). It does nothing for the outstanding non-FAT cores.
  • IMZ note: Containers/ImzContainer.cs confirms an unencrypted WinImage IMZ is just a ZIP with a single entry + zip comment. It does not touch the encrypted IMZ (MD5 + Rijndael) tracked in imz_encryption.md.
  • Verdict: not a "use most of their code" opportunity. Treat as a narrow reference: port the BPB-less FAT detection + geometry table (with MIT attribution) if/when we harden raw-floppy FAT handling. Everything else either overlaps what we have or is out of scope.

Pure-Rust crates (the bigger lever)

All three are MIT / MIT-OR-Apache, so they can be vendored as dependencies or ported with attribution under our AGPL.

CrateLicenseCoversMiSTer cores unlockedMaturity
a2kit (dfgordon/a2kit)MITCP/M 1/2/3, Apple DOS 3.3, ProDOS, Pascal FS, FAT; containers 2MG/DSK/DO/PO/IMD/IMG/NIB/TD0/WOZApple-II DOS 3.3 (our gap) + CP/M family: Amstrad, AmstradPCW, TatungEinstein, SVI328, Altair8800, MultiComp, ZX +3DOSActive, v4.4.2
cbm (simmons/cbm)MIT/ApacheD64/D71/D81 read/write/format/renameC64, C128, C16, VIC20 (not PET D80/D82)Complete but dormant
fluxfox (dbalsom/fluxfox)MITContainer/track layer: TD0, IMD, HFE, 86F, IPF, SCP, raw IMG/DSK/ADF/ST + Amiga/Mac/Atari ST/Apple GCRThe shared container-decode infra layer feeding the superfloppy pathActive, ~150 stars

Caveats to verify before depending on them:

  • a2kit CP/M may be Apple-CP/M-centric — confirm it ingests arbitrary per-machine disk parameter blocks (Amstrad/PCW/Einstein geometries) before counting it for the CP/M cores.
  • fluxfox .d88 support is ambiguous (crate docs omit it; a secondary source claimed it) — matters for PC88 / X68000 floppies.

Per-filesystem crate availability matrix

Outstanding filesystemCoresRust crate?Best path
CP/MAmstrad, PCW, Einstein, SVI328, Altair, MultiComp, ZX+3a2kit (verify DPBs)Vendor/port a2kit
CBM DOSC64, C128, C16, VIC20cbmVendor cbm
CBM DOS (D80/D82)PET2001NoExtend cbm or ground-up
Apple DOS 3.3Apple-IIa2kitVendor/port a2kit
Container decode (TD0/IMD/ADF/ST/MSA)manyfluxfoxVendor fluxfox
Container .d88PC88, X68000fluxfox (uncertain)Verify, else custom
Atari DOS (.atr)Atari800No (atrfs is Go/Python)Ground-up; reference atrfs spec
Human68kX68000No (dis68k/fathuman are C/Go)FAT-derived; our FAT + custom dir layer
ADFS / FileCoreArchie, BBC/Electron ADFSNoGround-up; ref OpenAcornExplorer, Linux adfs
QDOSQLNoGround-up
OS-9 RBF / RS-DOS / DragonDOSCoCo2, CoCo3NoGround-up
TRS-80 (TRSDOS/LDOS)TRS-80NoGround-up
Oric JasminOricYesDone (src/fs/oric.rs)
Sedoric (Oric DOS)OricNoGround-up
N88-BASICPC88NoGround-up
Sharp MZ FDSharpMZNoGround-up
EOSColecoAdamNoGround-up (read-only)
TI-99 FSTI-99_4ANoGround-up
ANDOS/CSIDOS, MicroDOS, Specialist-MXBK0011M, Vector-06C, SpecialistNoGround-up (niche)

Revised takeaway

The crates change the build-vs-reuse math for the highest-payoff targets: a2kit can cover the entire CP/M family plus our Apple DOS 3.3 gap, cbm covers four Commodore cores outright, and fluxfox supplies the container-decode infrastructure piece budgeted above. The long tail (ADFS, Human68k, QDOS, OS-9, TRS-80, and the niche/Soviet filesystems) still has no Rust prior art and remains ground-up work. TotalImage is a minor reference for hardening FAT floppy detection, not a reuse source for the outstanding cores.