Prince-of-Persia-Apple-II

A running-jumping-swordfighting game Jordan Mechner made on the Apple II from 1985-89
Log | Files | Refs | README | LICENSE

EDMASTER.S (13777B)


      1 * edmaster
      2 edfirst = 1
      3 org = $f900
      4  lst off
      5 *-------------------------------
      6 *
      7 *   M  A  S  T  E  R
      8 *
      9 *   (version for editor disk)
     10 *
     11 *-------------------------------
     12  org org
     13 
     14  jmp FIRSTBOOT
     15  jmp LOADLEVEL
     16  jmp RELOAD1
     17  jmp RELOAD2
     18  jmp RELOAD3 ;1st 5 entry points are same as in game version
     19 
     20  jmp REBOOT
     21  jmp GOBUILD
     22  jmp GOGAME
     23  jmp WRITEDIR
     24  jmp READDIR
     25 
     26  jmp SAVELEVEL
     27  jmp SAVELEVELG
     28  jmp SCREENDUMP
     29 
     30 *-------------------------------
     31  put eq
     32 
     33 development = 1
     34 
     35 *-------------------------------
     36 * File equates
     37 
     38 topctrl = $2000
     39 builder = $8400
     40 Mdebugs = $4c00 ;mainmem, destined for $fc00 aux
     41 
     42 coldgame = topctrl
     43 warmgame = coldgame+3
     44 
     45 coldbuild = builder
     46 warmbuild = coldbuild+3
     47 
     48  dum Mdebugs
     49 showpage ds 3
     50 debugkeys ds 3
     51 moveauxlc ds 3
     52  dend
     53 
     54 BbundID = BBundID
     55 
     56 POPside1 = $a9
     57 POPside2 = $ad ;game
     58 
     59 *-------------------------------
     60 break = $fa59
     61 
     62 realreset = $300
     63 
     64 *-------------------------------
     65 * RW18 zero page vars
     66 
     67 slot = $fd
     68 track = $fe
     69 lastrack = $ff
     70 
     71 *-------------------------------
     72 * local vars
     73 
     74 locals = $f0
     75 
     76  dum locals
     77 
     78 ]dest ds 2
     79 ]source ds 2
     80 ]endsourc ds 2
     81 
     82  dend
     83 
     84 params = $3f0
     85 
     86 *-------------------------------
     87 * Coordinates of default load-in level
     88 
     89 firstlevel db 33,0,30,0
     90 
     91 *-------------------------------
     92 *
     93 * Notes:
     94 *
     95 * Game & builder code sits in auxmem & aux l.c. and uses
     96 * aux z.p.
     97 *
     98 * Routines in main l.c. (including MASTER and HIRES)
     99 * are called via intermediary routines in GRAFIX (in auxmem).
    100 *
    101 * RW18 sits in bank 1 of main language card;
    102 * driveon switches it in, driveoff switches it out.
    103 *
    104 *-------------------------------
    105 *
    106 *  F I R S T B O O T
    107 *
    108 *-------------------------------
    109 FIRSTBOOT
    110  jsr setaux
    111  jsr setreset ;in auxmem
    112 
    113  jsr setmain
    114  jsr setreset ;in maimmem
    115 
    116 boot
    117  jsr setaux
    118 
    119  lda #$a9 ;side 1
    120  sta BbundID
    121 
    122  jsr loadcommon1 ;tracks 2-3 (2 tracks)
    123 
    124 * boot builder
    125 
    126  jsr bootbuilder
    127  jsr xtitle
    128  jmp coldbuild
    129 
    130 *-------------------------------
    131 * coldstart builder
    132 
    133 bootbuilder
    134  jsr loadbuild1 ;tracks 4-6 (3 tracks)
    135  jsr loadcommon2 ;tracks 11-12 (chtable3; 2 tracks)
    136  jsr loadbuild2 ;tracks 22-28 (7 tracks)
    137  jsr loadgame4
    138 
    139  jmp driveoff
    140 
    141 *-------------------------------
    142 *
    143 *  G O   B U I L D
    144 *
    145 *-------------------------------
    146 GOBUILD
    147  jsr driveon
    148 
    149  jsr copybgmain ;copy bgtable to mainmem
    150 
    151  jsr loadbuild2 ;tracks 22-28 (7 tracks)
    152 
    153  jsr driveoff
    154 
    155  jmp warmbuild
    156 
    157 *-------------------------------
    158 *
    159 *  G O   G A M E
    160 *
    161 *-------------------------------
    162 GOGAME
    163  jsr driveon
    164 
    165  jsr copybgaux ;copy bgtable to auxmem
    166 
    167  jsr loadgame1a
    168  jsr xfergame
    169  jsr loadgame3
    170  jsr loadgame4
    171 
    172  jsr driveoff
    173 
    174 ColdstartGame
    175  lda #1
    176  jmp coldgame
    177 
    178 *-------------------------------
    179 *
    180 *  R E B O O T
    181 *
    182 *-------------------------------
    183 REBOOT jsr driveon
    184 
    185  jsr bootbuilder
    186  jmp warmbuild
    187 
    188 *-------------------------------
    189 *
    190 *   Q U I C K   R E L O A D S
    191 *
    192 *   (for game development)
    193 *
    194 *-------------------------------
    195 *   Reload 1: reload images
    196 
    197 RELOAD1
    198  jsr driveon
    199 
    200  jsr loadgame2
    201 
    202  jmp driveoff
    203 
    204 *-------------------------------
    205 *   Reload 2: reload code
    206 
    207 RELOAD2
    208  jsr driveon
    209 
    210  jsr loadgame1
    211  jsr loadgame3
    212  jsr loadgame4
    213 
    214  jmp driveoff
    215 
    216 *-------------------------------
    217 *   Reload 3: reload everything but blueprint
    218 *   (& restart level)
    219 
    220 RELOAD3
    221  jsr driveon
    222 
    223  jsr loadgame1
    224  jsr loadgame2
    225  jsr loadgame3
    226  jsr loadgame4
    227 
    228  jsr driveoff
    229  jmp warmgame
    230 
    231 *-------------------------------
    232 *
    233 * L O A D   C O M M O N
    234 *
    235 *-------------------------------
    236 * load common 1: tracks 1-3 (code)
    237 
    238 loadcommon1
    239  jsr setmain
    240 
    241  lda #1
    242  sta track
    243 
    244  jsr rw18
    245  hex c3,ee
    246 
    247  jsr rw18
    248  hex c4
    249  hex e0,e1,e2,e3,e4,e5,e6,e7,e8
    250  hex e9,ea,eb,ec,ed,00,00,00,00
    251 
    252  jsr setaux
    253 
    254  jsr rw18
    255  hex c3,0e
    256 
    257  rts
    258 
    259 *-------------------------------
    260 * load common 2: tracks 11-12 (chtable3)
    261 
    262 loadcommon2
    263  lda #11
    264  sta track
    265 
    266  jsr setmain
    267 
    268  jsr rw18
    269  hex c3,08
    270 
    271  jsr rw18
    272  hex c4
    273  hex 1a,1b,1c,1d,1e,1f,00,00,00
    274  hex 00,00,00,00,00,00,00,00,00
    275 
    276  rts
    277 
    278 *-------------------------------
    279 *
    280 *  L O A D   G A M E
    281 *
    282 *-------------------------------
    283 * load game 1: tracks 3 & 4 (code)
    284 
    285 loadgame1
    286  lda #3
    287  sta track
    288 
    289  jsr setaux
    290 
    291  jsr rw18
    292  hex c3,0e
    293 
    294 *-------------------------------
    295 * load game 1a: track 4 (code)
    296 
    297 loadgame1a
    298  lda #4
    299  sta track
    300 
    301  jsr setaux
    302 
    303  jsr rw18
    304  hex c4
    305  hex 04,05,06,07,08,09,0a,0b,0c
    306  hex 0d,20,21,22,23,24,25,26,27
    307 
    308  rts
    309 
    310 *-------------------------------
    311 * load game 2: tracks 5-13 (all image tables)
    312 
    313 loadgame2
    314  lda #5
    315  sta track
    316 
    317  jsr setaux
    318 
    319  jsr rw18
    320  hex c3,60
    321 
    322  jsr rw18
    323  hex c3,72
    324  ;bgtable goes in aux
    325  jsr setmain
    326 
    327  jsr rw18
    328  hex c3,60
    329 
    330  jsr rw18
    331  hex c3,72
    332 
    333  jsr rw18
    334  hex c3,84
    335 
    336  jsr rw18
    337  hex c3,96
    338 
    339  jsr rw18
    340  hex c3,08
    341 
    342  jsr rw18
    343  hex c4
    344  hex 1a,1b,1c,1d,1e,1f,a8,a9,aa
    345  hex ab,ac,ad,ae,af,b0,b1,b2,b3
    346 
    347  jsr rw18
    348  hex c4
    349  hex b4,b5,b6,b7,b8,b9,ba,bb,bc
    350  hex bd,be,bf,00,00,00,00,00,00
    351 
    352  rts
    353 
    354 *-------------------------------
    355 * load game 3: tracks 13-18 (aux code, chtab4, bgtab2)
    356 
    357 loadgame3
    358  jsr setaux
    359 
    360  lda #13
    361  sta track
    362 
    363  jsr rw18
    364  hex c4
    365  hex 00,00,00,00,00,00,00,00,00
    366  hex 00,00,00,96,97,98,99,9a,9b
    367  jsr rw18
    368  hex c3,9c ;chtable4.gd
    369 
    370  jsr rw18
    371  hex c3,28
    372 
    373  jsr rw18
    374  hex c3,3a
    375 
    376  jsr rw18
    377   hex c3,4c
    378 
    379  jsr rw18
    380  hex c3,84 ;bgtable2
    381 
    382  rts
    383 
    384 *-------------------------------
    385 * load game 4: tracks 19-21 (aux l.c. bank 2)
    386 *
    387 * We can't reach aux l.c. from here, so load code
    388 * into mainmem hires area
    389 
    390 loadgame4
    391  jsr setmain
    392 
    393  lda #19
    394  sta track
    395 
    396  jsr rw18
    397  hex c4
    398  hex 00,00,20,21,22,23,24,25,26
    399  hex 27,28,29,2a,2b,2c,2d,2e,2f
    400 
    401  jsr rw18
    402  hex c4
    403  hex 00,00,00,00,30,31,32,33,34
    404  hex 35,36,37,38,39,3a,3b,3c,3d
    405 
    406  jsr rw18
    407  hex c3,3e
    408 
    409 * Now have it move itself to aux l.c.
    410 
    411  jmp moveauxlc ;still in mainmem
    412 
    413 *-------------------------------
    414 * xfer game:
    415 * load tracks 7-10 & 12-13 (chtables 1,2 & 5)
    416 
    417 xfergame
    418  lda #7
    419  sta track
    420 
    421  jsr setmain
    422 
    423  jsr rw18
    424  hex c3,60
    425 
    426  jsr rw18
    427  hex c3,72
    428 
    429  jsr rw18
    430  hex c3,84
    431 
    432  jsr rw18
    433  hex c3,96
    434 
    435  lda #12
    436  sta track
    437 
    438  jsr rw18
    439  hex c4
    440  hex 1a,1b,1c,1d,1e,1f,a8,a9,aa
    441  hex ab,ac,ad,ae,af,b0,b1,b2,b3
    442 
    443  jsr rw18
    444  hex c4
    445  hex b4,b5,b6,b7,b8,b9,ba,bb,bc
    446  hex bd,be,bf,00,00,00,00,00,00
    447 
    448  rts
    449 
    450 *-------------------------------
    451 *
    452 *  L O A D   B U I L D E R
    453 *
    454 *-------------------------------
    455 * load builder 1: tracks 4-6 (common code & bgtable)
    456 
    457 loadbuild1
    458  lda #4
    459  sta track
    460 
    461  jsr setaux
    462 
    463  jsr rw18
    464  hex c4
    465  hex 04,05,06,07,08,09,0a,0b,0c
    466  hex 0d,00,00,00,00,00,00,00,00
    467 
    468  jsr setmain
    469 
    470  jsr rw18
    471  hex c3,60
    472 
    473  jsr rw18
    474  hex c3,72
    475 ;bgtable goes in main, not aux
    476 
    477  lda #18
    478  sta track
    479 
    480  jsr rw18
    481  hex c3,84 ;bgtable2
    482 
    483  rts
    484 
    485 *-------------------------------
    486 * load builder 2: tracks 22-28
    487 
    488 loadbuild2
    489  lda #22
    490  sta track
    491 
    492  jsr setaux
    493 
    494  jsr rw18
    495  hex c3,60
    496 
    497  jsr rw18
    498  hex c3,72
    499 
    500  jsr rw18
    501  hex c3,84
    502 
    503  jsr rw18
    504  hex c3,96
    505 
    506  jsr setmain
    507 
    508  jsr rw18
    509  hex c3,ae
    510 
    511  jsr setaux
    512 
    513  jsr rw18
    514  hex c4
    515  hex 2e,2f,30,31,32,33,34,35,36
    516  hex 00,00,00,00,00,00,00,00,00
    517 
    518  jsr rw18
    519  hex c4
    520  hex 40,41,42,43,44,45,46,47,48
    521  hex 49,4a,4b,4c,4d,4e,4f,00,00
    522 
    523  rts
    524 
    525 *===============================
    526 *
    527 *  C O P Y   B G   T A B L E
    528 *
    529 *  BGTABLE is loaded into $6000-$9600
    530 *  Mainmem for builder, aux for game
    531 *
    532 *-------------------------------
    533 copybgmain
    534  sta $c003
    535  sta $c004 ;read aux, write main
    536 copybg
    537  lda #$60
    538  ldx #$60
    539  ldy #$96
    540  jmp MOVEMEM
    541 
    542 copybgaux
    543  sta $c002
    544  sta $c005 ;read main, write aux
    545 
    546  jmp copybg
    547 
    548 *-------------------------------
    549 setaux sta $c003
    550  sta $c005 ;rd/write aux
    551  rts
    552 
    553 setmain sta $c002
    554  sta $c004 ;rd/write main
    555  rts
    556 
    557 *-------------------------------
    558 *
    559 *  S E T   R E S E T   V E C T O R
    560 *
    561 *-------------------------------
    562 setreset
    563  ldx #0
    564 :loop lda resetroutine,x
    565  sta realreset,x
    566  inx
    567  bne :loop ;move reset routine
    568 
    569  lda #realreset
    570  sta $3f2
    571 
    572  lda #>realreset
    573  sta $3f3 ;reset vector
    574 ;(for development)
    575  eor #$a5
    576  sta $3f4 ;power-up byte
    577 
    578  lda #break
    579  sta $3f0
    580 
    581  lda #>break
    582  sta $3f1
    583 
    584  rts
    585 
    586 *-------------------------------
    587 resetroutine
    588  sta $c004 ;RAMWRT off
    589  sta $c002 ;RAMRD off
    590 
    591  lda #break
    592  sta $3f2
    593 
    594  lda #>break
    595  sta $3f3 ;$fa59: monitor break routine
    596 
    597  eor #$a5
    598  sta $3f4
    599 
    600  jmp $fa62 ;reset
    601 
    602 *-------------------------------
    603 *
    604 *  D R I V E   O N
    605 *
    606 *-------------------------------
    607 driveon
    608 
    609  jsr setaux
    610 
    611 * switch in bank 1 (RW18)
    612 
    613  bit $c08b
    614  bit $c08b ;1st 4k bank
    615 
    616 * set Bbund ID
    617 
    618  lda BbundID
    619  sta :idbyte
    620 
    621  jsr rw18
    622  hex 07
    623 :idbyte hex a9
    624 
    625 * turn on drive 1
    626 
    627  jsr rw18
    628  hex 00
    629 drive hex 01
    630 delay hex 00
    631  rts
    632 
    633 *-------------------------------
    634 *
    635 *  D R I V E   O F F
    636 *
    637 *-------------------------------
    638 driveoff jsr rw18
    639  hex 01
    640 
    641 * switch in bank 2
    642 
    643   bit $c083
    644  bit $c083 ;2nd 4k bank
    645 
    646  jmp setaux ;& set auxmem
    647 
    648 *-------------------------------
    649 *
    650 *  R E A D / W R I T E   D I R E C T O R Y
    651 *
    652 *-------------------------------
    653 READDIR lda #0
    654  sta delay
    655 
    656  jsr driveon
    657 
    658  lda #34
    659  sta track
    660 
    661  jsr rw18
    662  hex 84 ;readgroup
    663  hex 70,71,00,00,00,00,00,00,00
    664  hex 00,00,00,00,00,00,00,00,00
    665 
    666  jmp driveoff
    667 
    668 *-------------------------------
    669 WRITEDIR lda #10
    670  sta delay
    671 
    672  jsr driveon
    673 
    674  lda #34
    675  sta track
    676 
    677  jsr rw18
    678  hex 84 ;read unused regions into scratch buffer
    679  hex 00,00,20,21,22,23,24,25,26
    680  hex 27,28,29,2a,2b,2c,2d,2e,2f
    681 
    682  jsr rw18
    683  hex 86 ;then write it all out
    684  hex 70,71,20,21,22,23,24,25,26
    685  hex 27,28,29,2a,2b,2c,2d,2e,2f
    686 
    687  jmp driveoff
    688 
    689 *-------------------------------
    690 *
    691 *  S E T   1 s t   L E V E L
    692 *
    693 *-------------------------------
    694 set1stlevel
    695 
    696  ldx #3
    697 :loop lda firstlevel,x
    698  sta params,x
    699  dex
    700  bpl :loop
    701 
    702  rts
    703 
    704 *-------------------------------
    705 *
    706 * L O A D / S A V E   L E V E L
    707 *
    708 * 2 routines: loadlevel & savelevel
    709 *
    710 * These in turn call 4 routines:
    711 *   rdbluep & wrtbluep (load & save 9-sector blueprint)
    712 *   rdbinfo & wrtbinfo (load & save 6-sector binfo)
    713 *
    714 * In: bluepTRK, bluepREG, binfoTRK, binfoREG
    715 *
    716 *   TRK = track # (1-33)
    717 *   REG = region on track (0-1 for blueprint, 0-2 for binfo)
    718 *
    719 * Use $2000 auxmem as scratchpad
    720 *
    721 * Load level into "working blueprint" buffer in auxmem;
    722 * game code will make a "backup copy" into aux l.c.
    723 * (which we can't reach from here).
    724 *
    725 *-------------------------------
    726 LOADLEVEL
    727  lda #0
    728  sta delay
    729  jsr driveon
    730 
    731  jsr rdbluep
    732  jsr rdbinfo
    733 
    734  jmp driveoff
    735 
    736 ]sl lda #10
    737  sta delay
    738  jsr driveon
    739 
    740  jmp wrtbluep
    741 
    742 SAVELEVEL
    743  jsr ]sl
    744  jsr wrtbinfo
    745 
    746  jmp driveoff
    747 
    748 SAVELEVELG
    749  jsr ]sl
    750  jmp driveoff
    751 
    752 *-------------------------------
    753 * read blueprint
    754 *-------------------------------
    755 rdbluep
    756  jsr setbluep
    757  bne :reg1
    758 
    759 :reg0 jsr rw18
    760  hex 84
    761  hex b7,b8,b9,ba,bb,bc,bd,be,bf
    762  hex 00,00,00,00,00,00,00,00,00
    763  rts
    764 
    765 :reg1 jsr rw18
    766  hex 84
    767  hex 00,00,00,00,00,00,00,00,00
    768  hex b7,b8,b9,ba,bb,bc,bd,be,bf
    769  rts
    770 
    771 *-------------------------------
    772 * write blueprint
    773 *-------------------------------
    774 wrtbluep
    775  jsr setbluep
    776  bne :reg1
    777 
    778 :reg0 jsr rw18
    779  hex 84 ;read unused regions into scratch buffer
    780  hex 00,00,00,00,00,00,00,00,00
    781  hex 24,25,26,27,28,29,2a,2b,2c
    782 
    783  jsr rw18
    784  hex 86 ;then write it all out
    785  hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data
    786  hex 24,25,26,27,28,29,2a,2b,2c ;old data
    787  rts
    788 
    789 :reg1 jsr rw18
    790  hex 84
    791  hex 24,25,26,27,28,29,2a,2b,2c
    792  hex 00,00,00,00,00,00,00,00,00
    793 
    794  jsr rw18
    795  hex 86
    796  hex 24,25,26,27,28,29,2a,2b,2c ;old data
    797  hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data
    798  rts
    799 
    800 *-------------------------------
    801 setbluep
    802  lda bluepTRK
    803  sta :track
    804 
    805  jsr rw18 ;seek track
    806  db 2,1
    807 :track db 34
    808 
    809  lda bluepREG
    810  rts
    811 
    812 *-------------------------------
    813 * read binfo
    814 *-------------------------------
    815 rdbinfo
    816  lda binfoTRK
    817  sta track ;assume rdbluep has already sought it
    818 
    819  lda binfoREG
    820  beq :reg0
    821 
    822  cmp #1
    823  beq :reg1
    824 
    825 :reg2 jsr rw18
    826  hex 84
    827  hex 00,00,00,00,00,00
    828  hex 00,00,00,00,00,00
    829  hex a6,a7,a8,a9,aa,ab
    830  rts
    831 
    832 :reg1 jsr rw18
    833  hex 84
    834  hex 00,00,00,00,00,00
    835  hex a6,a7,a8,a9,aa,ab
    836  hex 00,00,00,00,00,00
    837  rts
    838 
    839 :reg0 jsr rw18
    840  hex 84
    841  hex a6,a7,a8,a9,aa,ab
    842  hex 00,00,00,00,00,00
    843  hex 00,00,00,00,00,00
    844  rts
    845 
    846 *-------------------------------
    847 * write binfo
    848 *-------------------------------
    849 wrtbinfo
    850  lda binfoTRK
    851  sta track ;assume rdbluep has already sought it
    852 
    853  lda binfoREG
    854  beq :reg0
    855 
    856  cmp #1
    857  beq :reg1
    858 
    859 :reg2 jsr rw18
    860  hex 84 ;first read into scratchpad...
    861  hex 24,25,26,27,28,29
    862  hex 2a,2b,2c,2d,2e,2f
    863  hex 00,00,00,00,00,00
    864 
    865  jsr rw18
    866  hex 86 ;...then write it all out
    867  hex 24,25,26,27,28,29
    868  hex 2a,2b,2c,2d,2e,2f
    869  hex a6,a7,a8,a9,aa,ab
    870  rts
    871 
    872 :reg1 jsr rw18
    873  hex 84 ;first read into scratchpad...
    874  hex 24,25,26,27,28,29
    875  hex 00,00,00,00,00,00
    876  hex 2a,2b,2c,2d,2e,2f
    877 
    878  jsr rw18
    879  hex 86 ;...then write it all out
    880  hex 24,25,26,27,28,29
    881  hex a6,a7,a8,a9,aa,ab
    882  hex 2a,2b,2c,2d,2e,2f
    883  rts
    884 
    885 :reg0 jsr rw18
    886  hex 84 ;first read into scratchpad...
    887  hex 00,00,00,00,00,00
    888  hex 24,25,26,27,28,29
    889  hex 2a,2b,2c,2d,2e,2f
    890 
    891  jsr rw18
    892  hex 86 ;...then write it all out
    893  hex a6,a7,a8,a9,aa,ab
    894  hex 24,25,26,27,28,29
    895  hex 2a,2b,2c,2d,2e,2f
    896  rts
    897 
    898 *-------------------------------
    899 *
    900 *  M O V E M E M
    901 *
    902 *-------------------------------
    903 MOVEMEM
    904  sta ]dest+1
    905  stx ]source+1
    906  sty ]endsourc+1
    907 
    908  ldy #0
    909  sty ]dest
    910  sty ]source
    911  sty ]endsourc
    912 
    913 :loop lda (]source),y
    914  sta (]dest),y
    915 
    916  iny
    917  bne :loop
    918 
    919  inc ]source+1
    920  inc ]dest+1
    921 
    922  lda ]source+1
    923  cmp ]endsourc+1
    924  bne :loop
    925 
    926  rts
    927 
    928 *-------------------------------
    929 *
    930 *  T O N E
    931 *
    932 *-------------------------------
    933  dum locals
    934 ]dur ds 1
    935  dend
    936 
    937 ]setdur = 10
    938 ]setpitch = 20
    939 
    940 TONE
    941  lda #]setdur
    942  sta ]dur
    943 :outloop lda $c030
    944  ldx #]setpitch
    945 :midloop ldy #64
    946 :inloop dey
    947  bne :inloop
    948  dex
    949  bne :midloop
    950  dec ]dur
    951  bne :outloop
    952  rts
    953 
    954 *-------------------------------
    955 * Hires screen dump
    956 *
    957 * Dump hires screen to tracks 22-23
    958 * In: A = page # (00/20)
    959 *-------------------------------
    960 SCREENDUMP
    961  clc
    962  adc #$20
    963  sta :sm1
    964  adc #$12
    965  sta :sm2
    966 
    967  lda BBundID
    968  pha
    969  lda #POPside2
    970  sta BBundID
    971 
    972  jsr driveon
    973  jsr setmain
    974 
    975  lda #22
    976  sta track
    977  jsr checkdisk
    978 
    979  jsr rw18
    980  hex c5
    981 :sm1 hex 20
    982  jsr rw18
    983  hex c5
    984 :sm2 hex 32
    985 
    986  jsr driveoff
    987  pla
    988  sta BBundID
    989  rts
    990 
    991 *-------------------------------
    992 * check track to make sure it's the right disk
    993 *-------------------------------
    994 checkdisk
    995  jsr rw18
    996  hex 84 ;don't advance
    997  hex 05,00,00,00,00,00,00,00,00
    998  hex 00,00,00,00,00,00,00,00,00
    999  rts
   1000 
   1001 *-------------------------------
   1002 
   1003  lst
   1004 eof ds 1
   1005  usr $a9,1,$b00,*-org
   1006  lst off