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

PURPLE.MAIN.S (2764B)


      1 * purple.main
      2 
      3  lst off
      4 
      5 * The job of this routine is to set $DA to $01
      6 *                                ( in aux-zpage!!! )
      7 
      8 slot = $FD
      9 
     10 *-------------------------------------------------
     11 *
     12 * HLS APPLE COPY PROTECTION
     13 * COPYRIGHT (C) 1987 HLS DUPLICATION
     14 *
     15 * HLS 408-773-1500
     16 *
     17 * Modified by Roland Gustafsson 8/25/89
     18 * for Prince of Persia copy protection.
     19 *
     20 *-------------------------------------------------
     21 
     22 * ZERO PAGE
     23 
     24 OBJSCT = $07 ;PHYSICAL SECTOR #
     25 
     26 HDRC = $40
     27 HDRS = HDRC+1
     28 HDRT = HDRC+2
     29 HDRV = HDRC+3 HEADER SECTOR
     30 LSRETRY = HDRC+4 ;NIB READ RETRIES
     31 PRETRY = HDRC+5 ;OBJSCT RETRIES
     32 NPTR = HDRC+6
     33 NPTRH = HDRC+7
     34 MEM1 = HDRC+8
     35 MEM2 = HDRC+9
     36 
     37 zpage = HDRC
     38 zpagelen = 13
     39 
     40 *-------------------------------------------------
     41 *
     42 * Here is the code that ends up at $6321.
     43 * Assemble it and run "make.purple.hex" which
     44 * reverses the code and puts it in a text file.
     45 *
     46 *-------------------------------------------------
     47 
     48  org $2000
     49 
     50  da len6321
     51 
     52  dum $6254
     53 zpagebuf ds zpagelen
     54  dend
     55 
     56  org $6321
     57 
     58 strt6321 jsr swapzpage
     59  lda #10
     60  sta LSRETRY
     61  ldx slot
     62  lda $C089,X
     63  lda $C08E,X
     64  lda #:NIBS ; !!!!! LOW BYTE
     65  sta NPTR
     66  lda #>:NIBS ; !!!!! HIGH BYTE
     67  sta NPTRH
     68 :AGAIN lda #$80
     69  sta PRETRY
     70 :M1 dec PRETRY
     71  beq :LSFAIL
     72  jsr RADR16
     73  bcs :LSFAIL
     74  lda HDRS
     75  cmp #OBJSCT
     76  bne :M1
     77 
     78  ldy #0
     79 :M2 lda $C08C,X
     80  bpl :M2
     81  dey
     82  beq :LSFAIL
     83  cmp #$D5
     84  bne :M2
     85  ldy #0
     86 
     87 :M3 lda $C08C,X
     88  bpl :M3
     89  dey
     90  beq :LSFAIL
     91  cmp #$E7
     92  bne :M3
     93 
     94 :M4 lda $C08C,X
     95  bpl :M4
     96  cmp #$E7
     97  bne :LSFAIL
     98 
     99 :M5 lda $C08C,X
    100  bpl :M5
    101  cmp #$E7
    102  bne :LSFAIL
    103 
    104  lda $C08D,X
    105  ldy #$10
    106  bit $6 ;3 US. ( FOR //C)
    107 :M6 lda $C08C,X
    108  bpl :M6
    109  dey
    110  beq :LSFAIL
    111  cmp #$EE
    112  bne :M6
    113 
    114 * NOW AT 1/2 NIBBLES
    115 
    116  ldy #7
    117 :M7 lda $C08C,X * READ DISK DATA
    118  bpl :M7
    119  cmp (NPTR),Y * COMPARE AGAINST TABLE
    120  bne :LSFAIL
    121  dey
    122  bpl :M7
    123  bmi :GOOD
    124 :LSFAIL jmp :LSFAIL1
    125 
    126 * A O K
    127 
    128 :GOOD jsr swapzpage
    129  lda #0
    130  sta $C009-zpagelen,x
    131  rol
    132  sta $DA-zpagelen,x
    133  sta $C008-zpagelen,x
    134  clc
    135  rts
    136 
    137 * FAILED
    138 
    139 :LSFAIL1 dec LSRETRY
    140  beq :ERROR
    141  jmp :AGAIN
    142 
    143 :NIBS db $FC,$EE,$EE,$FC
    144  db $E7,$EE,$FC,$E7
    145 
    146 * Note that drive motor is still on
    147 
    148 :ERROR
    149 swapzpage ldx #0
    150 :0 ldy zpagebuf,x
    151  lda zpage,x
    152  sty zpage,x
    153  sta zpagebuf,x
    154  inx
    155  cpx #zpagelen
    156  bne :0
    157  rts
    158 
    159 *-------------------------------------------------
    160 *
    161 * Read address mark
    162 *
    163 
    164 RADR16 ldy #$FD ;READ ADR HDR
    165  sty MEM1
    166 :RA1 iny
    167  bne :RA2
    168  inc MEM1
    169  beq :RAEXIT
    170 :RA2 lda $C08C,X
    171  bpl :RA2
    172 :RA3 cmp #$D5
    173  bne :RA1
    174  nop
    175 :RA4 lda $C08C,X
    176  bpl :RA4
    177  cmp #$AA
    178  bne :RA3
    179  ldy #3
    180 :RA5 lda $C08C,X
    181  bpl :RA5
    182  cmp #$96
    183  bne :RA3
    184  lda #0
    185 :RA6 sta MEM2
    186 :RA7 lda $C08C,X
    187  bpl :RA7
    188  rol
    189  sta MEM1
    190 :RA8 lda $C08C,X
    191  bpl :RA8
    192  and MEM1
    193  sta HDRC,Y
    194  eor MEM2
    195  dey
    196  bpl :RA6
    197  tay
    198  nop
    199  clc
    200  rts
    201 
    202 :RAEXIT sec
    203  rts
    204 
    205 len6321 = *-strt6321
    206 
    207  org
    208 
    209 *------------------------------------------------- EOF
    210 
    211  sav purple.main