10 REM ----------------------------------------------
   20 REM DLOAD : program downloader
   30 REM ----------------------------------------------
   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