C64 Disk Protection Reference · Preservation

Emulation, Archiving & Disk Images


SECTION 01

Emulation, Archiving, and Disk Images

Preserving and emulating copy-protected C64 software is a problem that started in the 1990s and hasn't been fully solved even now. The challenge: most emulators and disk image formats were designed for data, not for the physical magnetic geometry on which copy protection depends.

The D64 Format — Useful but Incomplete

The D64 disk image format stores 35 tracks × up to 21 sectors × 256 bytes = at most 174,848 bytes. It represents the logical content of a disk — the data after CBM DOS has decoded it. D64 simply can't represent tracks 36–40, half-track data, non-standard bit rates, weak bits, custom GCR, long tracks, or sync mark signatures. A D64 image of a copy-protected game either contains the cracked (protection-stripped) version, or the image simply fails to load because the protection check can't find what it's looking for. The ZipCode distribution format (four files named 1!name through 4!name) is a compression layer on top of D64-equivalent logical data — same limitations, compressed for BBS transfer.

The NIB Format — First Raw GCR Standard

Before the G64 format was established, the standard output format of MNIB (Markus Brenner's parallel-cable nibbler) was the .NIB file. A NIB file stores each track as a fixed-length block of raw GCR bytes — typically 8192 bytes per track position, padded with sync data if the track is shorter. Unlike D64, NIB preserves the raw bit stream including sync marks, bad sectors, non-standard formats, and most signature tracks. NIB does not store density information per-track, which is a limitation compared to G64: NIB assumes each track was read at its standard zone density, which means non-standard-density tracks may be stored at the wrong rate. For most protections this is acceptable; for density-varying protections it is not.

NIB has been superseded by G64 for new captures, but it still matters — the bulk of the community's non-D64 archive was grabbed as NIB files during 2000–2010. The nibconv utility (part of NIBTools) converts NIB ↔ G64 ↔ D64 with protection-type awareness.

The G64 Format — Raw GCR Tracks

G64 stores raw GCR data on a per-track basis, including half-track data, up to 84 track positions, and variable track lengths. This handles most physical protection techniques — bad sectors, extra tracks, bit-rate variations, signature tracks, and long tracks are all representable. What G64 still can't encode: the absolute angular starting position of each track (needed for track skew checks), and true weak bits (which by definition must read differently every time).

Converting V-MAX! v3+ games to G64 was problematic precisely because the drive's 2 KB buffer wasn't sufficient to read the protected tracks without the extra RAM expansion. As Forrest noted in 1999, a modified "sixpacker" using the full 8 KB drive RAM was the theoretical solution — but no such public utility existed at the time.

Markus Brenner's Emulation Compatibility Analysis

At VCF East 3, Markus Brenner presented a comprehensive analysis of which protection types were handled by D64 vs G64 emulation versus not at all:

Protection Type D64 G64 Notes
Read Errors Supported since early emulators. Easy to fake.
Tracks 36–40 D64 has no room for extra tracks.
Half Tracks G64 supports half-track positions.
Wide / Fat Tracks ~ Partially: G64 can store multi-position data but can't reproduce true wide-head physics.
Long Tracks / Custom GCR G64 allows variable-length tracks. Custom format can be stored raw.
Slowed Motor (V-MAX!) No image format captures motor speed variation.
Sync Counting G64 preserves sync mark positions and lengths.
Non-Standard Bit Rates G64 tracks include density information per track.
Bit Rate Change Within Track Not representable in any current image format.
Sector Synchronization / Track Skew Requires absolute angular position data. No current format supports this.
Weak Bits ~ Can be approximated in some extended G64 variants; not truly random.
All-Zero / Unformatted Tracks G64 can represent empty track data.

Hardware Devices for Physical Archiving

The modern C64 preservation community uses several hardware solutions to capture physical disks. The Catweasel ISA/PCI card (mentioned in the original 1999 comp.sys.cbm thread as an early emerging tool) was the first widely available device capable of reading raw magnetic flux from 5.25" disks. Modern equivalents are the Kryoflux and the GreaseWeazle.

What "flux-level" capture means. A conventional nibbler — even a hardware one like Burst Nibbler with a parallel cable — still reads decoded bits: the 1541's own data separator hardware decides whether each magnetic transition represents a 1 or a 0, and that's what gets transferred to the PC. Flux-level devices bypass the data separator entirely. They measure the exact time in microseconds between every magnetic transition on the disk surface. The result is not a stream of bits but a stream of transition timing values. From this timing data, every possible interpretation of the disk — GCR, MFM, FM, even completely custom formats — can be reconstructed in software, after the fact, without ever going back to the original disk.

This means flux captures handle everything that byte-level tools cannot: true weak bits appear as a probabilistic spread of transition timings (no two reads are the same); slowed-motor tracks show their characteristic compressed timing signature; absolute angular position is preserved because the capture starts from a known reference point (the index hole). Flux images are the only format from which a perfect physical duplicate can theoretically be written back to a blank disk — assuming a drive and write hardware that can reproduce arbitrary flux timings. These have become the gold standard for long-term preservation.

1541-II warning for preservation work. Do not use a 1541-II to capture weak-bit protected disks for NIB or G64 images. The 1541-II's digital data separator stabilises the output on illegal GCR sequences instead of floating — producing a consistent byte where the original disk produces a random one. Weak-bit images captured on a 1541-II will contain a fixed value and will behave differently from the original when played back on a 1541. Use a 1541 (original) or 1541-C for all weak-bit capture work. For Kryoflux/GreaseWeazle flux capture, drive model matters less because you are capturing raw transition timings rather than decoded bits.

The 1999-era community workflow (pre-Kryoflux): Burst Nibbler v1.4–v1.9 with a parallel cable was the preferred tool for making physical 1541-to-1541 copies of most protected disks. Burst Nibbler v1.9 required PAL hardware and did not run on NTSC machines, limiting its availability for American users. MNIB with an XP1541 parallel cable was the preferred tool for creating NIB/G64 image files. For V-MAX! v3+, only a RAMBoard-equipped 1541 running compatible software could make a true physical duplicate — standard 2 KB drive RAM was insufficient to buffer the long tracks.


SECTION 02

Complete Protection Summary Table

Protection Era Core Mechanism Difficulty Notable Titles
Bad Sectors 1982–85 Intentional read errors; check specific error codes LOW Activision early, Ocean, most British budget
Fat / Wide Tracks 1983–88 Extra-wide write head covers multiple positions; read from all three MED EA (Pirate Slayer), Activision, Lucasfilm
Half Tracks 1984–89 Data written at N.5 track positions; copiers skip these MED Various European, Broderbund
Extra Tracks (36–40) 1984–92 Key data beyond the standard 35-track limit LOW–MED Firebird, RapidLok (track 36), Para-Protect (track 40)
Non-Standard Bit Rates 1985–91 Wrong density zone for a track; or mid-track rate switch MED RapidLok, V-MAX!, Vorpal
Long Tracks 1986–91 More data than one revolution; overflows standard buffer HARD V-MAX! (primary), Datasoft
Sync Counting 1984–90 Count/measure sync mark byte length; differs on copies MED Microprose, V-MAX!, early Vorpal
Killer Track (All-Sync) 1984–91 Entire track = $FF; nibblers hang or skip LOW–MED EA Pirate Slayer, Activision Keydos
Gap Protection 1984–89 Key data in inter-sector tail gaps; missed by all standard copiers MED–HARD Epyx (early Vorpal), some EA titles
Weak Bits 1985–93 Unformatted zone reads random; fixed bytes = copy detected MED CYAN Engineering, Datasoft, Rainbow Arts
Vorpal 1984–90 No-sync tracks + raw bit timing + optional gap encryption HARD Epyx full catalog
TIMEX 1988–93 VIC-II raster IRQ decrypts game code in RAM at runtime; track offset disk component HARD Flimbo's Quest, No Mercy, Rubicon, Tiebreak, Magic Disk 64 / Game On / Golden Disk
RapidLok 1986–92 Custom GCR + track 36 key + drive-speed timing + bit-rate tricks HARD Accolade full catalog
V-MAX! (v1–2) 1985–87 EOR-stream GCR decoding; non-standard bit rates on high tracks MED Star Rank Boxing, Defender of the Crown
V-MAX! (v3+) 1988–93 Custom encoding; requires extra 8K drive RAM to copy; slowed motor EXTREME Arkanoid 2, Three Stooges, Thunderblade, Rastan
Track Skew / Angular Timing 1986–92 Index-hole mastering creates fixed inter-track timing; random on copies HARD RapidLok, V-MAX! late versions
Para-Protect 1988–93 Standard CBM DOS data + single key track beyond track 35 MED Last Ninja 3 (System 3), GMA titles
DSI Protection 1988–95 Non-standard track/sector geometry; prevents use on CMD devices EXTREME Pocket Writer 64/128, Pocket Planner 64/128
XEMAG 2.0 1984–87 Fat tracks at 35/36 (some at 6/7), angular offset ~1/8 revolution from index hole; requires SPLICE mode to archive HARD Activision, early Epyx (via Dysan/XEMAG duplication house)
Vorpal — Early 1984–86 Sync-mark counting: specific number of sync marks per track used as key; count disrupted by drive speed variance during write HARD Epyx (early titles: Impossible Mission, Summer Games)
Vorpal — Later 1986–89 Slowed motor + no-sync tracks + index-hole mastering; inter-track angular relationships verified; near-impossible to write back to real disk EXTREME Epyx (later titles), some Broderbund
Rainbow Arts / RADWAR 1987–91 Index-hole mastered + calibrated motor timing; two variants (V1/V2); emulation timing still problematic in some VICE versions HARD Rainbow Arts (Katakis, X-Out, Z-Out), Magic Bytes
PirateSlayer / PirateBusters 1988–92 No-sync tracks + signature tracks + inconsistent index-hole mastering; some disks indexed, some not (e.g. Skate or Die!); p-code obfuscation on some titles EXTREME Electronic Arts (later catalog)
Half-Track (Bounty Bob) 1984–86 Protection data on half-tracks between normal tracks; track 12 also has byte-count protection sensitive to drive speed variance MED Big Five Software (Bounty Bob Strikes Back), System 3
BASIC Memory POKEs 1982–85 POKE to location 1, keyboard buffer, or OS vectors; disable LIST/STOP/SAVE; move BASIC pointer; self-deleting lines EASY Independent/hobbyist BASIC programs, early commercial BASIC titles
BAM Write-Protect ('E' byte) 1983–86 Track 18, Sector 0, Byte 2 changed from 'A' ($41) to 'E' ($45); drive refuses to write to disk; verified in software as protection check EASY Small/independent publishers; hobbyist software (CSM Software, others)
Tape Turbo / Novaload (stack hijack) 1984–91 First data block loaded into CPU stack ($0100–$01FF), overwriting return address so RTS jumps into loader; additional code hidden in tape header fields MED US Gold (Blue Max, Zaxxon), LucasFilm Games, Commando, Monty on the Run; most British tape-era software
Lenslok (physical) 1985–86 Prism device held to screen unscrambles vertical-band-shuffled 2-letter code; screen-size calibration required MED (in theory) Elite (Firebird, C64), OCP Art Studio (Rainbird, C64); 11 titles total across platforms
Code Wheel (physical) 1986–93 Rotating cardboard discs with lookup data; dark printing and multi-layer construction resist photocopying LOW–MED Pirates! (Microprose), Rocket Ranger (Cinemaware), Bard's Tale III, Monkey Island, SSI Gold Box series
Dongle (hardware) 1983–91 Passive hardware device in tape or joystick port; checked via CIA registers for specific pin state LOW 10th Frame, Leaderboard, Paper Clip, Neutral Zone, Insta-Calc
The arms race in context. Most publishers combined protection methods rather than relying on a single technique. EA's Pirate Slayer used signature tracks, fat tracks, and p-code obfuscation simultaneously. Rubicon (Datasoft/Snacky) combined TIMEX v3 IRQ-based runtime decryption with over 20 interlocked in-game verification routines and a custom turbo tape loader. The most protected software also used encryption, self-modifying code, timer-based checks, checksums that verified the checksums, and CBM80 cartridge autostart traps. The cracking community ultimately prevailed on every commercial title — though some took years — and the scene maintained that cracking was fundamentally an intellectual challenge, not a commercial operation. As multiple veterans noted in the 1999 thread: the enjoyment was in the reverse engineering itself, not the resulting copy.
Comments
Leave a Comment