Three disks, two versions, one shared boot stub

5 min read
apple-ii6502cpmsoftcardretrocomputinghands-oncpm-videx-series

Detail for Part 1 — Why Microsoft CP/M Didn’t Recognize an 80-Column Card.

Setting out to find what changed in Microsoft’s SoftCard CP/M between 2.20 (which fails to boot when an Apple ][ has a Videx Videoterm 80-column card installed) and 2.23 (which works). First step: confirm what the disks actually are.

CPMV233.DSK looks like 2.33 from the filename, but the boot sector at offset $0060 carries the low-ASCII string (C) 1982 MICROSOFT - CP.... That’s the 1982 release marker; the disk is actually CP/M 2.23. The older high-ASCII string (C) 1980 MICROSOFT - NK is also present at $003D-$005F — both versions carry it, only 2.23 also embeds the newer 1982 stamp.

CPM220Disk1.po and CPM220Disk2.po are the two-disk 2.20 distribution. Disk 1 and Disk 2 share an identical system area (tracks 0-2 differ by only 4 bytes in track 0 sector 5). User files account for the difference between disks.

The two formats matter: .dsk is DOS 3.3 sector order, .po is ProDOS sector order. Both store physical track 0 sector 0 at file offset 0 (no interleave for sector 0), so boot sectors compare directly. Bytes $00-$2F of all three boot sectors are byte-identical — same 6502 boot stub. The CP/M sector skew table at $082D-$083C (00 02 04 06 08 0A 0C 0E 01 03 05 07 09 0B 0D 0F) is the same. The Videx-relevant change is therefore not in the very first sector loaded by the Disk II P6 ROM.

Reconstructed both images into physical-sector order using the appropriate interleave for each. Track 0 physical sector E (loaded by the boot stub to $1000) starts with AD 81 C0 AD 81 C0 in both versions — LDA $C081 twice, the Apple II language card switch sequence. Both confirm the interleave assignments are correct.

A byte-level diff of physical sectors across tracks 0-2 shows nearly every sector differs. Not a small build delta on the disk; the system area is laid out substantially differently between versions. That points away from a “patch a few bytes” change and toward something larger.

Status: disk identification confirmed (2.20 vs 2.23, not 2.33). 6502 boot stub eliminated as the change point. Differences live in what the boot stub loads — the stage-2 6502 loader and/or the Z-80 BIOS image. Next: try the BIOS.