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

EDDEBUGS.S (9699B)


      1 * eddebugs
      2 org = $ea00
      3  lst off
      4 *-------------------------------
      5 *
      6 *  " D E B U G S "
      7 *
      8 *  Special version to sit at end of hrtables (for builder)
      9 *  Replaces UNPACK
     10 *
     11 *-------------------------------
     12  org org
     13 
     14  jmp _SHOWPAGE
     15  jmp DEBUGKEYS
     16 
     17  clc
     18  bcc MOVEAUXLC ;must be relocatable
     19 
     20  jmp _TITLESCREEN
     21 
     22 *-------------------------------
     23 *
     24 *  M O V E A U X L C
     25 *  (Move to auxiliary language card)
     26 *
     27 *  This code is loaded into mainmem, where MASTER calls it
     28 *  to move itself & all other aux l.c. stuff to aux l.c.
     29 *
     30 *  WARNING--once in aux l.c. this code is useless!
     31 *
     32 *-------------------------------
     33  dum $00
     34 
     35 ]dest ds 2
     36 ]source ds 2
     37 ]endsourc ds 2
     38 
     39  dend
     40 
     41 MOVEAUXLC
     42  sta $c009 ;ALTZP on (aux l.c.)
     43 
     44  lda $c083
     45  lda $c083 ;bank 2
     46 
     47  lda #$d0
     48  ldx #$20
     49  ldy #$50
     50 
     51 * "MOVEMEM"
     52 
     53  sta ]dest+1
     54  stx ]source+1
     55  sty ]endsourc+1
     56 
     57  ldy #0
     58  sty ]dest
     59  sty ]source
     60  sty ]endsourc
     61 
     62 :loop lda (]source),y
     63  sta (]dest),y
     64 
     65  iny
     66  bne :loop
     67 
     68  inc ]source+1
     69  inc ]dest+1
     70 
     71  lda ]source+1
     72  cmp ]endsourc+1
     73  bne :loop
     74 
     75 * Switch back to bank 1 before returning to MASTER
     76 
     77  lda $c08b
     78  lda $c08b ;bank 1
     79 
     80  sta $c008 ;ALTZP off (main l.c.)
     81 
     82  rts
     83 
     84 *-------------------------------
     85 lastpage ds 1
     86 
     87 _SHOWPAGE jsr pre
     88  jsr SHOWPAGE
     89  jmp post
     90 
     91 _TITLESCREEN jsr pre
     92  jsr TITLESCREEN
     93  jmp post
     94 
     95 *-------------------------------
     96 pre
     97  pha
     98 
     99  jsr saveregs
    100  jsr mainmem
    101  jsr savezero
    102 
    103  pla
    104 ]rts rts
    105 
    106 post
    107  jsr loadzero
    108  jsr auxmem
    109  jmp loadregs
    110 
    111 *-------------------------------
    112 mainmem
    113  sta $c004
    114  sta $c002
    115  rts
    116 
    117 *-------------------------------
    118 auxmem
    119  sta $c005
    120  sta $c003
    121 ]rts rts
    122 
    123 *-------------------------------
    124 regs ds 3
    125 *-------------------------------
    126  dum $00
    127 
    128 base ds 2
    129 tab ds 1
    130 line ds 1
    131 inverse ds 1
    132 bytenum ds 1
    133 mempage ds 1
    134 oldpage ds 1
    135 strptr ds 2
    136 xsave ds 1
    137 ysave ds 1
    138 nextbytenum ds 1
    139 direcptr ds 1
    140 ztemp ds 1
    141 old80col ds 1
    142 
    143  dend
    144 
    145 zerodump = $1f00 ;mainmem
    146 pagedump = $1e00 ;mainmem
    147 
    148 eol = $8d ;string delimiter
    149 
    150 *-------------------------------
    151 * Keys within routines
    152 
    153 kesc = $9b
    154 kpageup = $8b
    155 kpagedown = $8a
    156 k4kup = $95
    157 k4kdown = $88
    158 khires = "H"
    159 
    160 *-------------------------------
    161 *
    162 *  D E B U G   K E Y S
    163 *
    164 *  In:  A = kbd value
    165 *
    166 *-------------------------------
    167 kshowzero = "=
    168 kshowpage3 = "\
    169 kshowlastpage = "-
    170 
    171 DEBUGKEYS
    172  cmp #kshowzero
    173  bne :1
    174 
    175  lda #0
    176  jmp _SHOWPAGE
    177 
    178 :1 cmp #kshowpage3
    179  bne :4
    180 
    181  lda #3
    182  jmp _SHOWPAGE
    183 :4
    184  cmp #kshowlastpage
    185  bne ]rts
    186 
    187  lda lastpage
    188  jmp _SHOWPAGE
    189 
    190 *-------------------------------
    191 *
    192 *  S H O W P A G E
    193 *
    194 *  Show page on text page 1; any key to exit
    195 *  Keys 0-9 to change page #
    196 *
    197 *  In: A = initial page #
    198 *
    199 *-------------------------------
    200 SHOWPAGE
    201  pha
    202  jsr pretext
    203  pla
    204 
    205 newdump  ;A = page #
    206  jsr  PageDump ;dump a page of memory
    207  jsr RegsDump ;dump registers
    208 
    209 :loop jsr waitloop
    210 
    211  cmp #"0
    212  bcc :1
    213  cmp #":
    214  bcs :1
    215 
    216  sec
    217  sbc #"0
    218  jmp newdump ;dump new page
    219 
    220 :1 cmp #kpageup
    221  bne :2
    222  lda #-1
    223  jmp chgpg ;change page
    224 
    225 :2 cmp #kpagedown
    226  bne :3
    227  lda #1
    228  jmp chgpg
    229 
    230 :3 cmp #k4kup
    231  bne :4
    232  lda #$10
    233  jmp chgpg
    234 
    235 :4 cmp #k4kdown
    236  bne :5
    237  lda #$f0
    238  jmp chgpg
    239 
    240 :5 cmp #khires
    241  bne :6
    242 
    243  jsr showhires
    244  jsr waitloop
    245  jsr showtext
    246  jmp :loop
    247 
    248 :6
    249 :exit
    250  jmp posttext
    251 
    252 *-------------------------------
    253 * Change page
    254 *
    255 * In: A = increment
    256 *
    257 * Lock out pages C0-CF
    258 *-------------------------------
    259 chgpg
    260  sta ztemp
    261 
    262  lda mempage
    263 :loop clc
    264  adc ztemp
    265 
    266  cmp #$c0
    267  bcc :ok
    268  cmp #$d0
    269  bcc :loop
    270 
    271 :ok sta mempage
    272 
    273  jmp newdump
    274 
    275 *-------------------------------
    276 *
    277 *  P R E T E X T / P O S T T E X T
    278 *
    279 *-------------------------------
    280 pretext
    281  lda $c01f ;read 80COL
    282  sta old80col
    283 
    284  lda $c01c ;read PAGE2
    285  sta oldpage
    286 
    287  jsr textcls
    288 
    289 showtext
    290  lda $c054 ;page 1
    291  lda $c051 ;text
    292  sta $c00c ;40-column
    293 
    294  rts
    295 
    296 *-------------------------------
    297 posttext
    298  lda mempage
    299  sta lastpage ;for next time
    300 
    301  jsr showhires
    302 
    303  lda #$00 ;black
    304  jmp cls40
    305 
    306 *-------------------------------
    307 * Show orig. hires page
    308 
    309 showhires
    310  lda oldpage ;original page
    311  bpl :1 ;page 1
    312  lda $c055 ;page 2
    313 :1
    314  lda old80col
    315  bpl :2
    316  sta $c00d ;80-col on
    317 :2
    318  lda $c050 ;graphics
    319  rts
    320 
    321 *-------------------------------
    322 *
    323 *  P A G E D U M P
    324 *
    325 *  In: A = page # (auxmem)
    326 *
    327 *  Locks out $c0-cf
    328 *
    329 *-------------------------------
    330 PageDump
    331  sta mempage
    332 
    333  cmp #$c0
    334  bcc :ok
    335  cmp #$d0
    336  bcs :ok
    337  rts  ;lock out $c0-cf
    338 :ok
    339  jsr copypage ;to mainmem
    340 
    341  jsr home
    342  jsr normal
    343 
    344  lda #STRpage
    345  ldx #>STRpage
    346  jsr prline ;"Page "
    347 
    348  lda mempage
    349  jsr prhexbyte
    350 
    351  jsr inv
    352 
    353  lda #0
    354  sta bytenum
    355 
    356  lda #8
    357  sta tab
    358 
    359 :rulerloop
    360  lda #" "
    361  jsr prchar
    362 
    363  lda bytenum
    364  jsr prhexdig
    365 
    366  jsr toggle
    367 
    368  inc bytenum
    369 
    370  lda bytenum
    371  cmp #$10
    372  bne :rulerloop
    373 
    374  jsr cr
    375  jsr cr
    376 
    377  lda #0
    378  sta bytenum
    379 :nextline
    380  jsr normal
    381  lda #"$"
    382  jsr prchar
    383 
    384  lda mempage
    385  jsr prhexbyte
    386 
    387  lda bytenum
    388  jsr prhexbyte
    389 
    390  lda #":"
    391  jsr prchar
    392 
    393  lda #8
    394  sta tab
    395 
    396 * Print next 16 byte values
    397 
    398  lda bytenum
    399  tax
    400  clc
    401  adc #$10
    402  sta nextbytenum
    403 
    404 :loop stx xsave
    405 
    406  jsr toggle
    407 
    408  lda pagedump,x
    409  jsr prhexbyte
    410 
    411  ldx xsave
    412  inx
    413  cpx nextbytenum
    414  bne :loop
    415 
    416 * Next line
    417 
    418  cpx #0
    419  beq :rts
    420  stx bytenum
    421 
    422  jsr cr
    423 
    424  jmp :nextline
    425 
    426 :rts rts
    427 
    428 *-------------------------------
    429 *
    430 *  R E G S D U M P
    431 *
    432 *-------------------------------
    433 RegsDump
    434  jsr normal
    435 
    436  ldx #19
    437  jsr setline
    438 
    439  ldx #0
    440  lda #"A"
    441  jsr printreg
    442 
    443  ldx #1
    444  lda #"X"
    445  jsr printreg
    446 
    447  ldx #2
    448  lda #"Y"
    449  jsr printreg
    450 
    451  rts
    452 
    453 *-------------------------------
    454 printreg
    455  stx xsave
    456 
    457  jsr prchar
    458  inc tab
    459 
    460  lda #"="
    461  jsr prchar
    462  inc tab
    463 
    464  ldx xsave
    465  lda regs,x
    466  jsr prhexbyte
    467 
    468  lda tab
    469  clc
    470  adc #5
    471  sta tab
    472  rts
    473 
    474 *-------------------------------
    475 *
    476 *  W A I T L O O P
    477 *
    478 *  Wait for keypress (return in A, hibit set)
    479 *
    480 *-------------------------------
    481 waitloop
    482  sta $c010
    483 
    484 :loop lda $c000
    485  bpl :loop
    486 
    487  rts
    488 
    489 *-------------------------------
    490 *  C R
    491 *-------------------------------
    492 cr
    493  lda #0
    494  sta tab
    495 
    496  inc line
    497  ldx line
    498  jmp bascalc
    499 
    500 *-------------------------------
    501 *
    502 *  P R L I N E
    503 *
    504 *  Print a line of normal text
    505 *
    506 *  In: A-X = string ptr
    507 *
    508 *-------------------------------
    509 prline
    510  sta strptr
    511  stx strptr+1
    512 :loop
    513  ldy #0
    514  lda (strptr),y
    515  cmp #eol
    516  beq :rts
    517 
    518  jsr prcharn
    519 
    520  inc strptr
    521  bne :loop
    522  inc strptr+1
    523  bne :loop
    524 
    525 :rts rts
    526 
    527 *-------------------------------
    528 *
    529 *  P R H E X B Y T E
    530 *
    531 *  Print a hex byte (in A)
    532 *
    533 *-------------------------------
    534 prhexbyte
    535  pha
    536  lsr
    537  lsr
    538  lsr
    539  lsr
    540  jsr prhexdig
    541 
    542  pla
    543  and #$0f
    544  jmp prhexdig
    545 
    546 *-------------------------------
    547 *
    548 *  P R H E X D I G
    549 *
    550 *  Print a hex digit (in A)
    551 *  Trashes X
    552 *
    553 *-------------------------------
    554 prhexdig
    555  tax
    556  lda hextoasc,x
    557  jmp prchar
    558 
    559 *-------------------------------
    560 *
    561 *  P R C H A R
    562 *
    563 *  Print an ASCII character (in A)
    564 *
    565 *-------------------------------
    566 prchar
    567  ldy tab
    568  and #%00111111
    569  ora inverse
    570  sta (base),y
    571 
    572  inc tab
    573 
    574  rts
    575 
    576 prcharn ;normal
    577  ldy tab
    578  sta (base),y
    579 
    580  inc tab
    581 
    582  rts
    583 
    584 *-------------------------------
    585 *
    586 *  H O M E
    587 *
    588 *-------------------------------
    589 home
    590  lda #0
    591  sta tab
    592 
    593  ldx #0
    594  stx line
    595 
    596  jmp bascalc
    597 
    598 *-------------------------------
    599 *
    600 *  I N V E R S E / N O R M A L
    601 *
    602 *-------------------------------
    603 normal
    604  lda #$80
    605  sta inverse
    606  rts
    607 
    608 inv
    609  lda #0
    610  sta inverse
    611  rts
    612 
    613 toggle
    614  lda inverse
    615  eor #$80
    616  sta inverse
    617  rts
    618 
    619 *-------------------------------
    620 *
    621 *  S E T L I N E
    622 *
    623 *  In: X = line #
    624 *
    625 *-------------------------------
    626 setline
    627  lda #0
    628  sta tab
    629 
    630  stx line
    631 
    632 *-------------------------------
    633 *
    634 *  B A S C A L C
    635 *
    636 *  In: X = line # (0-24)
    637 *
    638 *-------------------------------
    639 bascalc
    640  cpx #24
    641  bcs :rts
    642 
    643  lda textl,x
    644  sta base
    645 
    646  lda texth,x
    647  sta base+1
    648 
    649 :rts rts
    650 
    651 *-------------------------------
    652 *
    653 *  T E X T C L S
    654 *
    655 *  Clear text page 1 to black
    656 *
    657 *-------------------------------
    658 textcls lda #$a0 ;space
    659 
    660 cls40 ldy #$f7
    661 :2 sta $400,y
    662  sta $500,y
    663  sta $600,y
    664  sta $700,y
    665 
    666  dey
    667  cpy #$7f
    668  bne :3
    669 
    670  ldy #$77
    671 :3 cpy #$ff
    672  bne :2
    673 
    674  rts
    675 
    676 *-------------------------------
    677 *  S A V E / L O A D  R E G S
    678 *-------------------------------
    679 saveregs sta regs
    680  stx regs+1
    681  sty regs+2
    682  rts
    683 
    684 loadregs lda regs
    685  ldx regs+1
    686  ldy regs+2
    687  rts
    688 
    689 *-------------------------------
    690 *  S A V E Z E R O
    691 *-------------------------------
    692 savezero
    693  ldx #0
    694 
    695 :loop lda $00,x
    696  sta zerodump,x
    697 
    698  inx
    699  bne :loop
    700  rts
    701 
    702 *-------------------------------
    703 *  L O A D Z E R O
    704 *-------------------------------
    705 loadzero
    706  ldx #0
    707 
    708 :loop lda zerodump,x
    709  sta $00,x
    710 
    711  inx
    712  bne :loop
    713  rts
    714 
    715 *-------------------------------
    716 *  C O P Y P A G E
    717 *
    718 *  Copy desired auxmem page to "pagedump" in mainmem
    719 *
    720 *  In: A = page #
    721 *-------------------------------
    722 copypage
    723  tax
    724  beq :pagezero
    725 
    726  sta :loop+2 ;self-mod
    727 
    728  sta $c003 ;read auxmem
    729 
    730  ldx #0
    731 
    732 :loop lda $300,x
    733  sta pagedump,x
    734 
    735  inx
    736  bne :loop
    737 
    738  sta $c002 ;read mainmem
    739 
    740  rts
    741 
    742 * Read original page 0 from pagedump, not the current page 0
    743 
    744 :pagezero
    745  ldx #0
    746 :loop0 lda zerodump,x
    747  sta pagedump,x
    748  inx
    749  bne :loop0
    750  rts
    751 
    752 *-------------------------------
    753 * 40-column text base addresses
    754 *-------------------------------
    755 
    756 textl hex 00,80,00,80,00,80,00,80
    757  hex 28,a8,28,a8,28,a8,28,a8
    758  hex 50,d0,50,d0,50,d0,50,d0
    759 
    760 texth hex 04,04,05,05,06,06,07,07
    761  hex 04,04,05,05,06,06,07,07
    762  hex 04,04,05,05,06,06,07,07
    763 
    764 *-------------------------------
    765 * Hex to ASCII
    766 *-------------------------------
    767 
    768 hextoasc asc "0123456789ABCDEF"
    769 
    770 *-------------------------------
    771 *
    772 *  S T R I N G   D A T A
    773 *
    774 *-------------------------------
    775 STRpage asc "Page "
    776  db #eol
    777 
    778 title asc "PRINCE OF PERSIA Dungeon Builder"
    779  db #eol
    780 date asc "7/8/89  Master Copy"
    781  db #eol
    782 please asc "PLEASE DO NOT COPY!!"
    783  db #eol
    784 copyr asc "Copyright 1989 Jordan Mechner"
    785  db #eol
    786 
    787 *-------------------------------
    788 TITLESCREEN
    789  jsr pretext
    790  jsr textcls
    791 
    792  jsr home
    793  jsr normal
    794 
    795  lda #title
    796  ldx #>title
    797  jsr prline
    798 
    799  ldx #3
    800  jsr setline
    801  lda #date
    802  ldx #>date
    803  jsr prline
    804 
    805  ldx #11
    806  jsr setline
    807  lda #please
    808  ldx #>please
    809  jsr prline
    810 
    811  ldx #23
    812  jsr setline
    813  lda #copyr
    814  ldx #>copyr
    815  jsr prline
    816 
    817  jsr waitloop
    818  sta $c010
    819  rts
    820 
    821 *-------------------------------
    822  lst
    823 eof ds 1
    824  usr $a9,2,$a00,*-org
    825  lst off