Disk Fastloaders
Cutting load times on the Commodore 1541
The 1541 is slow because its bus protocol is bit-banged in software around the VIC-II's DMA; fastloaders replace both ends of it. Epyx claimed five times, Datel's Warp 25 two hundred blocks in six seconds, and JiffyDOS printed the stopwatch figures.
The Commodore 1541 loads a 202-block program in a little over two minutes — about 400 bytes a second by the stock figures Creative Micro Designs printed against their own product. The drive’s 6502 and 2 KB of RAM can do far better; the limit is the software-driven protocol on the serial bus between the C64 and the drive. Fastloaders replace that protocol at both ends.
For the wider picture across tape, disk and other machines, see Fast Loaders. This entry is about the C64 and the 1541.
Why the 1541 is slow
The serial bus has three signal lines:
| Line | Purpose |
|---|---|
DATA |
Carries each bit |
CLK |
The talker’s “data ready” signal; the listener’s per-byte acknowledge |
ATN |
“Attention” — the computer’s command line, which every device answers |
Jim Butterfield laid the protocol out in COMPUTE! in July 1983. A byte goes like this:
For each of 8 bits:
1. Talker sets DATA to the bit value
2. Talker releases CLK — "data ready" (about 70 µs per bit)
3. Talker holds both lines at least 20 µs — 60 µs if a C64 is listening
4. Talker pulls CLK back and prepares the next bit
Then:
5. Listener pulls DATA to acknowledge the byte, within 1 ms
The bits themselves go out “without handshake”; the acknowledge is per byte. The 60 µs hold is the part that matters for speed, and it exists for one reason: “the 64’s video chip may interrupt the processor for 42 microseconds at a time, and without the extra wait the 64 might completely miss a bit.” The stock KERNAL is slow because a bit-banged protocol has to survive the VIC-II’s badline DMA.
The protocol was bit-banged in the first place because of a chip bug. Pasi Ojala tells the story in C=Hacking: the VIC-20 and 1540 were meant to use the 6522 VIA’s synchronous serial port, shifting whole bytes with no processor involvement, until a hardware fault in that port was found. “Without a bug-free synchronous serial port the transfer had to be slowed down considerably so that the receiver has a chance to detect all changes in the serial bus lines. This became the dead slow software-driven Commodore serial protocol.” The C64 inherited it, and the 1541 with it.
How fastloaders break the bottleneck
A fastloader runs on both machines. The C64 side uploads a routine into the 1541’s RAM with the DOS M-W (memory write) command, starts it with M-E (memory execute), and the two processors then speak a protocol of their own. The Codebase64 fastloaders page describes the techniques the loaders still in use draw on.
Two bits per transfer
Use CLK and DATA as a pair of data lines and move two bits per step instead of one. The stock protocol’s clock line becomes a data line; the 2-bit ATN protocol described below supplies the timing instead.
Dealing with the VIC-II, not waiting for it
The stock protocol pads every bit for the VIC’s benefit. A loader that turns the screen off and disables interrupts has no badlines to survive and can run in lockstep, resynchronising now and then because the drive’s clock runs slightly fast. A loader that has to keep the screen on — every demo and most games — needs another answer. Early interrupt loaders tied each transfer to a safe $D012 raster position. The later 2-bit ATN protocol turns the arrangement round: the C64 toggles ATN for each bit pair and tells the drive when to put the next two bits on the bus, so the C64 can be interrupted mid-byte and the bits wait for it. The cost is that no other drive can be active on the bus, because every device answers ATN.
Whole sectors, decoded on the fly
The drive reads a 256-byte sector into its RAM and streams it across with one tight loop, so the per-byte overhead is gone. The fastest loaders go further and decode the GCR encoding as the sector passes under the head: the Booze Design loader and Spindle manage it completely, Krill’s loader and Bitfire decode most of it and tidy the rest afterwards, which leaves drive RAM free for other things.
Out-of-order loading
Stock DOS follows the sector chain link by link, waiting for each sector to come round. An out-of-order loader scans the track once to find which sectors belong to the file, then takes them in whatever order they arrive under the head and lets the C64 side reassemble them. With a fixed interleave the scan can be skipped and the two link bytes reclaimed for data, at the price of a disk format only that loader can read.
Parallel cable
A cable from the user port to the drive gives eight data lines instead of two. Dolphin DOS and Professional DOS were the hardware systems of this kind on the UK market in 1988–89; Commodore Disk User describes them as “complicated, expensive”, and JiffyDOS advertised against them on the grounds that it “DOES NOT require add-on cable or any hardware between computer and drive”.
Burst mode (1571 and 1581)
The 1570/71 and 1581 drives carry the synchronous serial protocol Commodore originally intended, using the bus’s spare SRQ line as a fast clock — “ten-fold” faster in Ojala’s account, and about 3.5× faster than KERNAL sequential access in Craig Bruce’s measurement of the burst Fastload command on a C128. A C64 can use it too: two wires from the CIA’s serial port to SRQ and DATA, and Ojala’s loader code.
Notable C64 disk fastloaders
Speeds below are the makers’ own claims, with the one independent measurement the library holds.
| Solution | Form | Claim | Source |
|---|---|---|---|
| Epyx FAST LOAD | Cartridge | “load, save and copy your disks five times faster than normal”; copy files and disks, send disk commands, list directories without losing the program in memory | Epyx advertisements, COMPUTE!, January 1985 and COMPUTE!’s Gazette, February 1985 |
| Fast Load, measured | — | Pitstop II 144 s stock, 41 s with Fast Load; On-Field Football 159 s to 63 s; Easy Finance 58 s to 13 s; Music Shop fell back to the stock load; Hitchhiker’s Guide failed | Magnum Load advertisement (a rival ROM by Jim Drew), COMPUTE!’s Gazette, November 1985 |
| The Final Cartridge (H & P Computers) | Cartridge | “6 times faster disk loading, 8 times faster saving”, “10 times faster” tape | Advertisement, Your Commodore, December 1985; the Final Cartridge III was being sold in the US as “THE #1 SELLING CARTRIDGE IN EUROPE” by January 1988 |
| Action Replay (Datel) | Cartridge | Warp 25: “LOADS 200 BLOCKS IN 6 SECONDS!” on its own disk format, with a normal disk turbo for everything else; MK VI: “Load 202 block program in under 6 seconds — world’s fastest disk serial loader” | Advertisements, Zzap!64, July 1988 and October 1990 |
| JiffyDOS (Creative Micro Designs) | KERNAL and drive ROMs with a switch back to stock | 202 blocks loaded in 8 s (stock 128 s), saved in 30 s (stock 150 s); 35 tracks formatted in 21 s (stock 90 s); “no additional hardware”, cartridge and user ports left free | Advertisement, COMPUTE!’s Gazette, November 1988 |
| Dolphin DOS, Professional DOS | ROMs plus parallel cable | The “hardware systems” the software and ROM loaders measured themselves against | Commodore Disk User, 1988–89 |
| Krill’s loader, Spindle, Bitfire, Bongo, Booze Design’s loader | Software only | The current demoscene loaders: Krill’s “support nearly any drive available in a native way”, the others built “with a focus on speed and size” for trackmos | Codebase64 fastloaders page |
How a cartridge fastloader works
A fastloader cartridge maps its own ROM into the C64 address space at boot. The cartridge ROM:
- Replaces the LOAD vector in the KERNAL jump table (
$0330typically) with its own routine. - On LOAD, sends the file name to the drive normally, but then uploads a custom drive-side fastloader routine via
M-Wcommands. - Starts the drive routine with
M-E(memory execute). - Streams data using the cartridge’s protocol over the IEC bus, decoding it on the C64 side.
- Falls back to stock loading if the drive doesn’t respond to the protocol upload (e.g. a 1571 in 1541 mode, or some clones).
Programs that bypass LOAD (using their own loader, common in games) coexist with the cartridge — they don’t see the cartridge’s hooks because they don’t use the KERNAL jump table.
Compatibility issues
Fastloaders are not universally compatible:
- Copy-protected disks with custom track formats (e.g. nibble-counted protections, fat-track schemes) confuse fastloaders that assume standard sector layouts. The user must disable the fastloader (cartridge has a switch) to load these. Magnum Load’s own comparison table shows Music Shop falling back to a stock load under every cartridge and Hitchhiker’s Guide failing under Fast Load.
- Multi-load games that use their own loader between levels may conflict with the cartridge’s hooks.
- Drive variants other than the 1541 — particularly third-party clones with slightly different timing — may fail with stricter fastloaders. Datel listed “1541/1571/Oceanic/1581” for the MK VI; CMD listed the FSD, MSD, Excelerator and Enhancer 2000 among the drives JiffyDOS had ROMs for.
- The 1571 in 1541 mode runs a different ROM that some fastloaders don’t recognise.
Modern equivalents
Fastloaders haven’t disappeared — they’ve evolved:
- SD2IEC / 1541U / Ultimate-II+ — modern flash-cart drive emulators implement fastloaders natively, often achieving full parallel-cable speeds without needing a hardware mod.
- Krill’s loader, Spindle, Bitfire — the software loaders new C64 demos and games use, with on-the-fly GCR decoding, out-of-order loading and decompression while the next sector is read.