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

YELLOW.MAIN.S (3811B)


      1 * yellow.main
      2  lst off
      3 
      4 * The job of this routine is to
      5 * set the high-bit of $7C in aux zpage.
      6 * (It does it by rotating in a carry set)
      7 
      8 slot = $fd
      9 lastrack = $ff
     10 
     11 *-------------------------------------------------
     12 *
     13 * HLS APPLE COPY PROTECTION
     14 * COPYRIGHT (C) 1987 HLS DUPLICATION
     15 *
     16 * Modified by Roland Gustafsson 8/25/89
     17 * for Prince of Persia copy protection.
     18 *
     19 *-------------------------------------------------
     20 
     21 OBJSCT = $07 ;PHYSICAL SECTOR #
     22 
     23 * ZERO PAGE
     24 
     25 HDRC = $30
     26 HDRS = HDRC+1
     27 HDRT = HDRC+2
     28 HDRV = HDRC+3 HEADER SECTOR
     29 LSRETRY = HDRC+4 ;NIB READ RETRIES
     30 PRETRY = HDRC+5 ;OBJSCT RETRIES
     31 NPTR = HDRC+6
     32 NPTRH = HDRC+7
     33 MEM1 = HDRC+8
     34 MEM2 = HDRC+9
     35 
     36 zpage = HDRC
     37 zpagelen = 33 ;arbitrarily long (only needs 10)
     38 
     39 *-------------------------------------------------
     40 
     41 * Jordan says: use $A400-ABFF
     42 * Roland says: OK
     43 
     44 orgCHECK = $AAAA ;must be highbyte=lowbyte
     45 
     46  org $2000
     47 
     48  da lenCHECK
     49 
     50  dum $A4A4
     51 zpagebuf ds zpagelen
     52 was27 ds 3 ;should be 1 !!!
     53 was2A ds 5 ; ditto
     54 was26 ds 7 ; ditto again
     55  dend
     56 
     57  org orgCHECK
     58 
     59 *-------------------------------------------------
     60 
     61 start sta $C008 ;switch to main zpage
     62 
     63  ldx slot
     64  lda $C089,x ;drive on
     65 
     66  jsr swapzpage
     67 
     68 * First seek track zero
     69 
     70  lda #0
     71  jsr SEEK
     72 
     73 * Now check signature
     74 
     75  lda #10
     76  sta LSRETRY
     77  ldx slot
     78  lda $C08E,X
     79  lda #>:NIBS
     80  sta NPTRH
     81  lda #:NIBS
     82  sta NPTR
     83 
     84 :AGAIN lda #$80
     85  sta PRETRY
     86 :M1 dec PRETRY
     87  beq :LSFAIL
     88  jsr RADR16
     89  bcs :LSFAIL
     90  lda HDRS
     91  cmp #OBJSCT
     92  bne :M1
     93 
     94  ldy #0
     95 :M2 lda $C08C,X
     96  bpl :M2
     97  dey
     98  beq :LSFAIL
     99  cmp #$D5
    100  bne :M2
    101  ldy #0
    102 
    103 :M3 lda $C08C,X
    104  bpl :M3
    105  dey
    106  beq :LSFAIL
    107  cmp #$E7
    108  bne :M3
    109 
    110 :M4 lda $C08C,X
    111  bpl :M4
    112  cmp #$E7
    113  bne :LSFAIL
    114 
    115 :M5 lda $C08C,X
    116  bpl :M5
    117  cmp #$E7
    118  bne :LSFAIL
    119 
    120  lda $C08D,X
    121  ldy #$10
    122  bit $6 ;3 US. ( FOR //C)
    123 :M6 lda $C08C,X
    124  bpl :M6
    125  dey
    126  beq :LSFAIL
    127  cmp #$EE
    128  bne :M6
    129 
    130 * NOW AT 1/2 NIBBLES
    131 
    132  ldy #7
    133 :M7 lda $C08C,X * READ DISK DATA
    134  bpl :M7
    135  cmp (NPTR),Y * COMPARE AGAINST TABLE
    136  bne :LSFAIL
    137  dey
    138  bpl :M7
    139  bmi :GOOD
    140 :LSFAIL jmp :LSFAIL1
    141 
    142 * A O K
    143 
    144 :GOOD jsr swapzpage
    145  sta $C009-zpagelen,x
    146  ror $7C-zpagelen,x
    147  clc
    148  rts
    149 
    150 * FAILED
    151 
    152 :LSFAIL1 dec LSRETRY
    153  beq :ERROR
    154  jmp :AGAIN
    155 
    156 :NIBS db $FC,$EE,$EE,$FC
    157  db $E7,$EE,$FC,$E7
    158 
    159 :ERROR jsr swapzpage
    160  sta $C009-zpagelen,x
    161  rts
    162 
    163 *-------------------------------------------------
    164 *
    165 * Read address mark
    166 *
    167 
    168 RADR16 ldy #$FD
    169  sty MEM1
    170 :RA1 iny
    171  bne :RA2
    172  inc MEM1
    173  beq :RAEXIT
    174 :RA2 lda $C08C,X
    175  bpl :RA2
    176 :RA3 cmp #$D5
    177  bne :RA1
    178  nop
    179 :RA4 lda $C08C,X
    180  bpl :RA4
    181  cmp #$AA
    182  bne :RA3
    183  ldy #3
    184 :RA5 lda $C08C,X
    185  bpl :RA5
    186  cmp #$96
    187  bne :RA3
    188  lda #0
    189 :RA6 sta MEM2
    190 :RA7 lda $C08C,X
    191  bpl :RA7
    192  rol
    193  sta MEM1
    194 :RA8 lda $C08C,X
    195  bpl :RA8
    196  and MEM1
    197  sta HDRC,Y
    198  eor MEM2
    199  dey
    200  bpl :RA6
    201  tay
    202  nop
    203  clc
    204  rts
    205 
    206 :RAEXIT sec
    207  rts
    208 
    209 *-------------------------------------------------
    210 *
    211 * SEEK, a - track
    212 *
    213 
    214 SEEK4 lda #4
    215 SEEK sta was2A
    216  cmp lastrack
    217  beq :RTS0
    218  lda #0
    219  sta was26
    220 :MOVEHEAD lda lastrack
    221  sta was27
    222  sec
    223  sbc was2A
    224  beq :ISTHERE
    225  bcs :T0
    226  eor #$FF
    227  inc lastrack
    228  bcc :T1
    229 :T0 adc #$FE
    230  dec lastrack
    231 :T1 cmp was26
    232  bcc :T2
    233  lda was26
    234 :T2 cmp #$C
    235  bcs :T3
    236  tay
    237 :T3 sec
    238  jsr :CHKPOS
    239  lda ONTBL,Y
    240  jsr :MSWAIT
    241  lda was27
    242  clc
    243  jsr :CHKPOS2
    244  lda OFFTBL,Y
    245  jsr :MSWAIT
    246  inc was26
    247  bne :MOVEHEAD
    248 :ISTHERE jsr :MSWAIT
    249  clc
    250 :CHKPOS lda lastrack
    251 :CHKPOS2 and #3
    252  rol
    253  ora slot
    254  tax
    255  lda $C080,X
    256  ldx slot
    257 :RTS0 rts
    258 
    259 :MSWAIT ldx #$12
    260 :T21 dex
    261  bne :T21
    262  sec
    263  sbc #1
    264  bne :MSWAIT
    265  rts
    266 
    267 *-------------------------------------------------
    268 
    269 swapzpage ldx #0
    270 :0 ldy zpagebuf,x
    271  lda zpage,x
    272  sty zpage,x
    273  sta zpagebuf,x
    274  inx
    275  cpx #zpagelen
    276  bne :0
    277  rts
    278 
    279 *-------------------------------------------------
    280 
    281 ONTBL db $01,$30,$28,$24,$20,$1E,$1D,$1C,$1C,$1C,$1C,$1C
    282 OFFTBL db $70,$2C,$26,$22,$1F,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$FF,$03
    283 
    284 *-------------------------------------------------
    285 lenCHECK = *-orgCHECK
    286 
    287  org
    288 
    289 *------------------------------------------------- EOF
    290 
    291  sav yellow.main