; renumber.828 - renumber BASIC program lines for C64, in 6502 Assembler ; author Neil Franklin, last modification unknown (estimated 1985) ; this disassembly/source reconstruction 2000.06.07 ; extracted from C64 with: ; load "renumber.828",8,1 ; 5 k = 828 ; 10 for i = k to k+240 step 16 ; 15 print i ; 20 for j = i to i+15 ; 30 print peek (j) ; 40 next j ; 50 input a$ ; 60 next i ; this only renumbers the line numbers, it does not renumber goto/gosub ; I only wrote this for renumbering Profiass assembler source ; decimal dump | hex listing | disassembly ; comments *= 033C ; 033C-03FB reserved by Commodore for tape buffer, I use disks, not tape ; renumber BASIC program, SYS828,ff,nn,ss (ff = from, nn = new, ss = step) 828: 32 253 174 | 033C: 20 FD AE | JSR $AEFD ; BASIC check for comma 32 138 173 | 20 8A AD | JSR $AD8A ; BASIC get numeric argument 32 247 183 | 20 F7 B7 | JSR $B7F7 ; BASIC convert to address 140 222 3 | 8C DE 03 | STY $03DE ; set "from" 141 223 3 | 8D DF 03 | STA $03DF 32 844: 253 174 | 20 FD AE | JSR $AEFD ; BASIC 32 138 173 | 20 8A AD | JSR $AD8A 32 247 183 | 20 F7 B7 | JSR $B7F7 140 224 3 | 8C E0 03 | STY $03E0 ; set "new" 141 225 3 | 8D E1 03 | STA $03E1 32 253 860: 174 | 20 FD AE | JSR $AEFD ; BASIC 32 138 173 | 20 8A AD | JSR $AD8A 32 247 183 | 20 F7 B7 | JSR $B7F7 140 226 3 | 8C E2 03 | STY $03E2 ; set "step" 141 227 3 | 8D E3 03 | STA $03E3 165 44 | A5 2C | LDA $2C ; begin BASIC program HI 133 876: 21 | 85 15 | STA $15 166 43 | A6 2B | LDX $2B ; begin BASIC program LO 202 | CA | DEX 134 20 | 86 14 | STX $14 ; CBM use for generic pointer 232 | E8 | INX 208 2 | D0 02 | BNE $0377 198 21 | C6 15 | DEC $15 ; set to begin BASIC - 1 160 0 | 0377: A0 00 | LDY #$00 ; chech for line begin 177 20 | B1 14 | LDA ($14,Y) 240 892: 14 | F0 0E | BEQ $038B ; 0 = end byte of prev line 24 | 18 | CLC 165 20 | A5 14 | LDA $14 105 1 | 65 01 | ADC $01 133 20 | 85 14 | STA $14 144 2 | 90 02 | BCC $0388 230 21 | E6 15 | INC $15 76 119 3 | 0388: 4C 77 03 | JMP $0377 ; test for next byte 200 | 038B: C8 | INY ; get "next line" pointer 908: 177 20 | B1 14 | LDA ($14,Y) 208 6 | D0 06 | BNE $0396 ; n l pointer = 0 0, is end 200 | C8 | INY 177 20 | B1 14 | LDA ($14,Y) 208 2 | D0 02 | BNE $0397 96 | 60 | RTS ; do the actual renumbering 200 | 0396: C8 | INY 200 | 0397: C8 | INY ; after ptr = line number 56 | 38 | SEC ; compare ($14,Y) with "from" 177 20 | B1 14 | LDA ($14,Y) 237 924: 222 3 | ED DE 03 | SBC $03DE 200 | C8 | INY 177 20 | B1 14 | LDA ($14,Y) 237 223 3 | ED DF 03 | SBC $03DF 144 31 | B0 1F | BCC $03C5 ; not yet at lines to renumb 173 225 3 | AD E1 03 | LDA $03E1 201 250 | C9 FA | CMP #$FA ; new >= $FA00 = 64000 176 940: 38 | B0 26 | BCS $03D3 ; too many lines, error abort 145 20 | 91 14 | STA ($14,Y) ; renumber HI 136 | 88 | DEY 173 224 3 | AD E0 03 | LDA $03E0 145 20 | 91 14 | STA ($14,Y) ; renumber LO 24 | 18 | CLC 109 226 3 | 6D E2 03 | ADC $03E2 ; add step to new 141 224 3 | 8D E0 03 | STA $03E0 956: 173 225 3 | AD E1 03 | LDA $03E1 109 227 3 | 6D E3 03 | ADC $03E3 141 225 3 | 8D E1 03 | STA $03E1 165 20 | 03C5: A5 14 | LDA $14 ; jump over line header 24 | 18 | CLC 105 6 | 69 06 | ADC #$06 133 20 | 85 14 | STA $14 972: 144 2 | 90 02 | BCC 03D0 230 21 | E6 15 | INC $15 76 119 3 | 03D0: 4C 77 03 | JMP 0377 ; look for next line ; print "too many lines" error message 169 228 | 03D3: A9 E4 | LDA #$E4 ;message 133 34 | 85 22 | STA $22 169 3 | A9 01 | LDA #$03 133 35 | 85 23 | STA $23 76 988: 71 164 | 4C 47 A4 | JMP $A447 ; print error msg at ($22) ; variables 0 0 | 03DE: 00 00 | *DW 0000 ; from 0 0 | 03E0: 00 00 | *DW 0000 ; new 0 0 | 03E2: 00 00 | *DW 0000 ; step ; constants 84 79 79 32 03E4: | *DB 54 4F 4F 20 ; "TOO " 77 65 78 89 | 4D 41 4E 59 ; "MANY" 1004: 32 76 73 78 | 20 4C 49 4E ; " LIN" 69 211 | 45 D3 ; "ES" | 03F2: |