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

UPDATE.LS.S (1589B)


      1  lst off
      2 
      3  org $300
      4 
      5 *
      6 * loresshow:0C00.0FFF ($400)
      7 * framedata:1000.6BFF ($5C00)
      8 *
      9 * buffer18 :6C00.7DFF ($1200 one track)
     10 * rw18.d000:7E00.82FF ($500 moved to aux ramcard)
     11 *
     12 
     13 BbundID = $AD
     14 
     15 loresshow = $c00
     16 buffer18 = $6c00
     17 
     18 rw18 = $d000
     19 rw18temp = $7e00
     20 
     21 slot = $FD
     22 track = $FE
     23 lastrack = $FF
     24 
     25 startrack = 12 ;last 6 sectors here
     26 
     27 * 13,14,15,16,17 (5 full tracks here)
     28 
     29 errcode = 0
     30 
     31 start jsr $e74c ;get slot#
     32  txa
     33  asl
     34  asl
     35  asl
     36  asl
     37 
     38  sta $C009 ;aux zpage, ramcard
     39  sta slot
     40 
     41  bit $C083
     42  bit $C083
     43 
     44 * Move rw18 to its home
     45 
     46  ldx #>rw18temp
     47  ldy #>rw18
     48  lda #5
     49  jsr movedata
     50 
     51 * Now we can use rw18
     52 
     53  jsr rw18
     54  db 7,BbundID
     55 
     56  jsr rw18
     57  db 0,5,1 ;drive on
     58 
     59  jsr rw18 ;seek to startrack
     60  db 2,1,startrack
     61 
     62 * handle special track with
     63 
     64  jsr rw18
     65  db 3 ;read in original data
     66  db >buffer18
     67  lda #1
     68  bcs :error
     69 
     70 * update last 6 sectors
     71 
     72  ldx #>loresshow
     73  ldy #>buffer18+$C00
     74  lda #6
     75  jsr movedata
     76 
     77 * write it back out
     78 
     79  jsr rw18
     80  db 5 ;writesequ
     81  db >buffer18
     82  lda #2
     83  bcs :error
     84 
     85 * write out rest of data...
     86 
     87  lda #>loresshow+$600
     88 :wloop sta :buf
     89 
     90  inc track
     91 
     92  jsr rw18
     93  db 5 ;writesequ
     94 :buf db $11
     95  lda #2
     96  bcs :error
     97 
     98  lda :buf
     99  adc #$12
    100  cmp #>loresshow+$600+{5*$1200}
    101  bne :wloop
    102 
    103  lda #0
    104 
    105 :error pha
    106  jsr rw18
    107  db 1 ;drive off
    108  pla
    109 
    110  sta $C008
    111  bit $C081
    112  sta errcode
    113  rts
    114 
    115 *------------------------------------------------- movedata
    116 *
    117 * Move data: x:source, y:dest, a:length
    118 *
    119 
    120 movedata stx :src+2
    121  sty :dst+2
    122  tax
    123 
    124  ldy #0
    125 :loop
    126 :src lda $1100,y
    127 :dst sta $1100,y
    128  iny
    129  bne :loop
    130 
    131  inc :src+2
    132  inc :dst+2
    133 
    134  dex
    135  bne :loop
    136 
    137  rts
    138 
    139 *------------------------------------------------- EOF