--------------Numeration 1------------- A 4am crack 2014-04-25 --------------------------------------- Numeration 1: Under The Big Top is a 1985 educational program authored by Thomas Hartsig and distributed by Scott, Foresman and Company. COPYA copies the original disk with no read errors, but when the copy boots, it loads a few tracks and stalls. EDD 4 bit copy fares no better. It's time for boot tracing with AUTOTRACE. [S5D1=my work disk] [S6D1=original disk] ]PR [S5D1=my work disk] [S6D1=original disk] ]PR#5 ... CAPTURING BOOT0 ...reboots slot 6... ...reboots slot 5... SAVING BOOT0 CAPTURING BOOT1 ...reboots slot 6... ...reboots slot 5... SAVING BOOT1 SAVING RWTS Well that all went flawlessly. ]BLOAD BOOT1,A$2600 ]CALL -151 *B600<2600.2EFEM *B700L ; OK 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 B714- A9 03 LDA #$03 B716- 8D EC B7 STA $B7EC B719- A9 08 LDA #$08 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 ; still OK B730- A9 00 LDA #$00 B732- 9D F8 04 STA $04F8,X B735- 9D 78 04 STA $0478,X ; probably reading stuff from disk here B738- 20 93 B7 JSR $B793 It looks like this is using the standard multi-read routine at $B793 to load a bunch of stuff into memory starting at T03,S08 and working backwards. (This is how regular DOS 3.3 loads, except that starts at T02,S04.) I'll run just a little bit of this and look at the RWTS parameter table. *B738:60 *B700G *B7E0.B7FF B7E0- 2F 2F 0A 2F E8 B7 00 B6 ^^ ++-- number of sectors to read B7E8- 01 D2 01 00 03 08 FB B7 ^^ ^^ first track --++ ++-- first sector B7F0- 00 B5 00 01 01 03 FE D2 ^^^^^ +++++-- starting address ($B500) B7F8- 01 00 00 00 01 EF D8 00 The way the multi-sector read routine works, it reads one sector, then decrements the sector number ($B7ED) until it's past $00, then resets it to $0F and decrements the track number ($B7EC). Along the way, it decrements the memory address ($B7F0/$B7F1) after each sector read, and decrements the counter at $B7E1 until it's past $00. So, given this RWTS parameter table, we're going to read a total of $2F sectors into $8700..$B5FF, backwards. T03,S08 --> $B500..$B5FF T03,S07 --> $B400..$B4FF ... T03,S00 --> $AD00..$ADFF T02,S0F --> $AC00..$ACFF ... T01,S0F --> $9C00..$9CFF ... T00,S0F --> $8C00..$8CFF ... T00,S0A --> $8700..$87FF That all happens inside $B793. Then execution continues at $B73B: ; reset the stack pointer B73B- A2 FF LDX #$FF B73D- 9A TXS B73E- 8E EB B7 STX $B7EB ; this looks like the end, but it's ; really a standard "patch" that does ; some language card initialization and ; jumps back to $B744 B741- 4C C8 BF JMP $BFC8 ; OK B744- 20 89 FE JSR $FE89 ; boot continues at $8800, apparently B747- 4C 00 88 JMP $8800 So that's where I need to stop the boot and take a look at what's going on. *9600