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