10
20
30
40 FOR pass%=0 TO 2 STEP 2
50 P%=&7000
60 [OPT pass%
70 .file EQUS "PROG"
80 EQUB 13
90 .blok EQUW file
100 .oldload EQUD &1900
110 .execadd EQUD &1000
120 .size EQUD &1234
130 .attr EQUD 0
140 .newload EQUD &F00
150 .blokad EQUW blok
160 .move
170 LDX blokad \ load PROG
180 LDY blokad+1 \ at old
190 LDA #&FF \ load
200 JSR &FFDD \ address
210 CLC \ for add
220 PHP \ save carry
230 LDX #0 \ loop count
240 .init
250 LDA newload,X \ save newload
260 STA &80,X \ in &80-&83
270 LDA oldload,X \ save oldload
280 STA &70,X \ in &70-&73
290 PLP \ get carry
300 ADC size,X \ save end addr
310 STA &7C,X \ in &7C-&7F
320 PHP \ save carry
330 INX \ bump count
340 CPX #4 \ init done?
350 BCC init \ no, loop back
360 PLP \ balance stack
370 LDY #0 \ zero offset from &70/&80
380 .loop
390 LDA (&70),Y \ copy old
400 STA (&80),Y \ to new
410 INC &70 \ bump old
420 BNE bumpnew \ if overflow
430 INC &71 \ bump next
440 BNC bumpnew \ if overflow
450 INC &72 \ bump next
460 BNE bumpnew \ if overflow
470 INC &73 \ bump next
480 .bumpnew
490 INC &80 \ bump new
500 BNE test \ if overflow
510 INC &81 \ bump next
520 BNE test \ if overflow
530 INC &82 \ bump next
540 BNE test \ if overflow
550 INC &83 \ bump next
560 .test
570 LDX #3 \ count
580 .tloop
590 LDA &70,X \ test
600 CMP &7C,X \ all done?
610 BNE loop \ no, loop back
620 DEX \ next count
630 BPL tloop \ try again
640 LDX #&FF \ clear
650 TSX \ the stack
660 JMP (execadd) \ start the PROG
670 ]
680 NEXT pass%
690 CALL move
700 END