* purple.main lst off * The job of this routine is to set $DA to $01 * ( in aux-zpage!!! ) slot = $FD *------------------------------------------------- * * HLS APPLE COPY PROTECTION * COPYRIGHT (C) 1987 HLS DUPLICATION * * HLS 408-773-1500 * * Modified by Roland Gustafsson 8/25/89 * for Prince of Persia copy protection. * *------------------------------------------------- * ZERO PAGE OBJSCT = $07 ;PHYSICAL SECTOR # HDRC = $40 HDRS = HDRC+1 HDRT = HDRC+2 HDRV = HDRC+3 HEADER SECTOR LSRETRY = HDRC+4 ;NIB READ RETRIES PRETRY = HDRC+5 ;OBJSCT RETRIES NPTR = HDRC+6 NPTRH = HDRC+7 MEM1 = HDRC+8 MEM2 = HDRC+9 zpage = HDRC zpagelen = 13 *------------------------------------------------- * * Here is the code that ends up at $6321. * Assemble it and run "make.purple.hex" which * reverses the code and puts it in a text file. * *------------------------------------------------- org $2000 da len6321 dum $6254 zpagebuf ds zpagelen dend org $6321 strt6321 jsr swapzpage lda #10 sta LSRETRY ldx slot lda $C089,X lda $C08E,X lda #:NIBS ; !!!!! LOW BYTE sta NPTR lda #>:NIBS ; !!!!! HIGH BYTE sta NPTRH :AGAIN lda #$80 sta PRETRY :M1 dec PRETRY beq :LSFAIL jsr RADR16 bcs :LSFAIL lda HDRS cmp #OBJSCT bne :M1 ldy #0 :M2 lda $C08C,X bpl :M2 dey beq :LSFAIL cmp #$D5 bne :M2 ldy #0 :M3 lda $C08C,X bpl :M3 dey beq :LSFAIL cmp #$E7 bne :M3 :M4 lda $C08C,X bpl :M4 cmp #$E7 bne :LSFAIL :M5 lda $C08C,X bpl :M5 cmp #$E7 bne :LSFAIL lda $C08D,X ldy #$10 bit $6 ;3 US. ( FOR //C) :M6 lda $C08C,X bpl :M6 dey beq :LSFAIL cmp #$EE bne :M6 * NOW AT 1/2 NIBBLES ldy #7 :M7 lda $C08C,X * READ DISK DATA bpl :M7 cmp (NPTR),Y * COMPARE AGAINST TABLE bne :LSFAIL dey bpl :M7 bmi :GOOD :LSFAIL jmp :LSFAIL1 * A O K :GOOD jsr swapzpage lda #0 sta $C009-zpagelen,x rol sta $DA-zpagelen,x sta $C008-zpagelen,x clc rts * FAILED :LSFAIL1 dec LSRETRY beq :ERROR jmp :AGAIN :NIBS db $FC,$EE,$EE,$FC db $E7,$EE,$FC,$E7 * Note that drive motor is still on :ERROR swapzpage ldx #0 :0 ldy zpagebuf,x lda zpage,x sty zpage,x sta zpagebuf,x inx cpx #zpagelen bne :0 rts *------------------------------------------------- * * Read address mark * RADR16 ldy #$FD ;READ ADR HDR sty MEM1 :RA1 iny bne :RA2 inc MEM1 beq :RAEXIT :RA2 lda $C08C,X bpl :RA2 :RA3 cmp #$D5 bne :RA1 nop :RA4 lda $C08C,X bpl :RA4 cmp #$AA bne :RA3 ldy #3 :RA5 lda $C08C,X bpl :RA5 cmp #$96 bne :RA3 lda #0 :RA6 sta MEM2 :RA7 lda $C08C,X bpl :RA7 rol sta MEM1 :RA8 lda $C08C,X bpl :RA8 and MEM1 sta HDRC,Y eor MEM2 dey bpl :RA6 tay nop clc rts :RAEXIT sec rts len6321 = *-strt6321 org *------------------------------------------------- EOF sav purple.main