-----------Decimal Discovery----------- A 4am crack 2014-05-15 --------------------------------------- Decimal Discovery is a 1986 educational game created by Bill Maxwell and Jerry Chaffin, and distributed by DLM, Inc. COPYA fails immediately with a disk read error. EDD 4 bit copy appears to work, but the copy does not boot. From listening to the boot, it sounds like it's loading DOS from tracks 2, 1, and 0, then the drive head swings out. But the BASIC prompt never appears, and the disk hangs with the drive motor on. Turning to my trusty Copy ][+ sector editor, I find the "DOS 3.3 PATCHED" option (press "P" to go to the Sector Editor Patcher) allows me to read every sector on every track. Track 0 feels like a DOS 3.3 RWTS, and I see a VTOC on track $11. Based on my experience with other disks, this evidence suggests that this disk has - Standard prologue bytes before the address and data fields [otherwise Copy ][+ sector editor would give read errors, even with the "DOS 3.3 PATCHED" option] - Non-standard epilogue bytes after the address and data fields [otherwise COPYA would work] - Some secondary protection [otherwise the bit copy created with EDD 4 would work] The easiest way to convert the disk to standard epilogue bytes is to use COPYA with a patched RWTS that accepts any epilogue bytes on read but includes standard epilogue bytes on write. [S6D1=DOS 3.3 master disk] ]PR#6 ... ]CALL -151 *B942:18 *3D0G ]RUN COPYA [S6D1=original disk] [S6D2=blank disk] ...read read read... ...grind grind grind... ...write write write... OK, now I have a copy in standard disk format that can be read by any tools. i.e. I can copy the disk that's in drive 2 with COPYA without patching the RWTS beforehand. I can sector edit the disk without messing with the Sector Editor Patcher. There are two problems with this copy: 1. Depending on how the original disk was written, this copy may or may not be able to read itself. I may need to patch the disk's RWTS to deal with the fact that the disk is now in a standard format. 2. Even if it can read itself, it won't get very far, because it still has some sort of secondary protection checking if the disk is original. (Hint: it's not.) Just by booting the copy, I can rule out problem #1. The disk seems to read itself just fine. It makes it exactly as far as my unsuccessful bit copy -- it tries to load DOS, then swings the drive head out, then hangs. To find out why it's hanging, I will need to do a little boot tracing. [S6D1=original disk] [S5D1=my work disk] (You *do* have a floppy disk controller in slot 5, don't you? It's 2014. They are not that expensive. I think eBay sellers give them away for free in Crackerjack boxes or something. Or get a modern marvel like a CFFA 3000 card that creates virtual floppy drives and loads disk images from a USB stick. They make 64GB USB drives that are small enough to swallow. That's enough storage space to hold all the Apple II programs ever made, and you could swallow it.) (CAUTION: DO NOT ACTUALLY SWALLOW A USB DRIVE, WHETHER OR NOT IT CONTAINS EVERY APPLE II PROGRAM EVER MADE.) ]PR#5 ... CAPTURING BOOT0 ...reboots slot 6... ...reboots slot 5... SAVING BOOT0 CAPTURING BOOT1 ...reboots slot 6... ...reboots slot 5... SAVING BOOT1 SAVING RWTS It looks like my AUTOTRACE program captured as much as it knows how to capture (boot0 code from T00,S00, boot1 code from T00,S01-09, and the disk's RWTS from T00,S02-09). I don't actually need the RWTS since I've already converted the disk to a standard format, but it's useful to know that it's in the standard place. That tells me I should start looking at the beginning of the boot1 code to see where things go awry. ]BLOAD BOOT1,A$2600 ]CALL -151 *B600<2600.2EFFM *B700L ; normal RWTS initialization B700- 8E E9 B7 STX $B7E9 B703- 8E F7 B7 STX $B7F7 B706- A9 01 LDA #$01 B708- 8D F8 B7 STA $B7F8 B70B- 8D EA B7 STA $B7EA B70E- AD E0 B7 LDA $B7E0 B711- 8D E1 B7 STA $B7E1 ; preparing to load DOS backwards from ; track 2, sector 4 (totally normal) B714- A9 02 LDA #$02 B716- 8D EC B7 STA $B7EC B719- A9 04 LDA #$04 B71B- 8D ED B7 STA $B7ED B71E- AC E7 B7 LDY $B7E7 B721- 88 DEY B722- 8C F1 B7 STY $B7F1 B725- A9 01 LDA #$01 B727- 8D F4 B7 STA $B7F4 B72A- 8A TXA B72B- 4A LSR B72C- 4A LSR B72D- 4A LSR B72E- 4A LSR B72F- AA TAX B730- A9 00 LDA #$00 B732- 9D F8 04 STA $04F8,X B735- 9D 78 04 STA $0478,X ; read DOS from disk (normal) B738- 20 93 B7 JSR $B793 B73B- A2 FF LDX #$FF B73D- 9A TXS B73E- 8E EB B7 STX $B7EB ; still completely normal (I double- ; checked, it just does the usual ; language card initialization and ; jumps back to $B744) B741- 4C C8 BF JMP $BFC8 B744- 20 89 FE JSR $FE89 ; not the slightest bit normal B747- 4C 00 B4 JMP $B400 The boot1 stage usually ends at $B747, but not by jumping to $B400. DOS 3.3 jumps to $9D84 here to initialize the rest of DOS and read the disk catalog and run the HELLO program and whatnot. So this is where I need to interrupt the boot process, to see what evil lurks at $B400. *9600