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

GRAB.S (2366B)


      1 * grab
      2 org = $4400
      3  lst off
      4 *-------------------------------
      5 *
      6 *  Grab hi-res screen from side 2 of game disk, tracks 22-23
      7 *
      8 *-------------------------------
      9 *
     10 *  To use from BASIC:
     11 *
     12 *  BLOAD data into main mem
     13 *
     14 *  TrackNo   = track # (0-34)
     15 *  DriveNo   = drive # (1-2)
     16 *
     17 *  G = 17408 ($4400)
     18 *  poke G+3,TrackNo
     19 *  poke G+4,DriveNo
     20 *  call G
     21 *
     22 *-------------------------------
     23  org org
     24 
     25  jmp grab
     26 
     27 TrackNo ds 1
     28 DriveNo ds 1
     29 
     30 zerosave ds $10
     31 
     32 *-------------------------------
     33 rw18buf = $4800 ;length $800
     34 endrwbuf = $5000
     35 
     36 temp18buf = $4800 ;length $1200
     37 endtempbuf = $5a00
     38 
     39 rw18 = $d000
     40 
     41 floppyslot = 6
     42 
     43 BbundID = $ad
     44 
     45 slot = $fd
     46 ztrack = $fe
     47 
     48 *-------------------------------
     49  dum $f0
     50 
     51 obj_lo ds 1
     52 obj_hi ds 1
     53 dst_lo ds 1
     54 dst_hi ds 1
     55 len_lo ds 1
     56 len_hi ds 1
     57 flushflag ds 1
     58 
     59  dend
     60 
     61 *-------------------------------
     62 *
     63 *  G R A B
     64 *
     65 *-------------------------------
     66 grab
     67 
     68 * save zero page vars
     69 
     70  ldx #$f
     71 :loop lda $f0,x
     72  sta zerosave,x
     73  dex
     74  bpl :loop
     75 
     76 * move rw18 to l.c.
     77 
     78  sta $c083 ;read/write RAM
     79 
     80  lda #>rw18
     81  ldx #>rw18buf
     82  ldy #>endrwbuf
     83 
     84  jsr movemem
     85 
     86 * grab data
     87 
     88  jsr grab18
     89 
     90 * Done--restore zero page vars
     91 
     92  ldx #$f
     93 :loop2 lda zerosave,x
     94  sta $f0,x
     95  dex
     96  bpl :loop2
     97 
     98 ]rts rts
     99 
    100 *-------------------------------
    101 *
    102 *  G R A B  1 8
    103 *
    104 *  In: TrackNo, DriveNo
    105 *
    106 *-------------------------------
    107 grab18 lda $c083
    108  lda $c083 ;enable RAM
    109 
    110 * set BbundID
    111 
    112  ldx DriveNo
    113  cpx #1
    114  beq :1
    115  ldx #2 ;default to drive 2
    116 :1 stx drive
    117 
    118  jsr rw18
    119  db 7,BbundID
    120 
    121 * turn on drive and delay .5 seconds
    122 
    123  ldx #floppyslot*16
    124  stx slot
    125 
    126  jsr rw18
    127  db 0
    128 drive db 2,5
    129 
    130 * seek first track
    131 
    132  lda TrackNo
    133  sta track
    134 
    135  jsr rw18
    136  db 2,1
    137 track db 0
    138 
    139 * Load in 2 tracks at $2000
    140 
    141  jsr loadhr
    142 
    143 * turn off drive
    144 
    145 :done jsr rw18
    146  db 1
    147 
    148 * out of here!
    149 
    150  sta $c082
    151 
    152  rts
    153 
    154 *-------------------------------
    155 *
    156 * load hires scrn
    157 *
    158 *-------------------------------
    159 loadhr
    160  jsr rw18
    161  hex c3,20
    162 
    163  jsr rw18
    164  hex c4
    165  hex 32,33,34,35,36,37,38,39,3a
    166  hex 3b,3c,3d,3e,3f,00,00,00,00
    167 
    168  rts
    169 
    170 *-------------------------------
    171 *
    172 *  Move a block of memory
    173 *
    174 *-------------------------------
    175  dum $f0
    176 
    177 dest ds 2
    178 source ds 2
    179 endsourc ds 2
    180 
    181  dend
    182 
    183 movemem sta dest+1
    184  stx source+1
    185  sty endsourc+1
    186 
    187  ldy #0
    188  sty dest
    189  sty source
    190  sty endsourc
    191 
    192 :loop lda (source),y
    193  sta (dest),y
    194 
    195  iny
    196  bne :loop
    197 
    198  inc source+1
    199  inc dest+1
    200 
    201  lda source+1
    202  cmp endsourc+1
    203  bne :loop
    204 
    205  rts
    206 
    207 *-------------------------------
    208  sav grab