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