mirror of
https://github.com/jmechner/Prince-of-Persia-Apple-II.git
synced 2024-12-27 13:29:19 +00:00
292 lines
3.7 KiB
ArmAsm
Executable File
292 lines
3.7 KiB
ArmAsm
Executable File
* yellow.main
|
|
lst off
|
|
|
|
* The job of this routine is to
|
|
* set the high-bit of $7C in aux zpage.
|
|
* (It does it by rotating in a carry set)
|
|
|
|
slot = $fd
|
|
lastrack = $ff
|
|
|
|
*-------------------------------------------------
|
|
*
|
|
* HLS APPLE COPY PROTECTION
|
|
* COPYRIGHT (C) 1987 HLS DUPLICATION
|
|
*
|
|
* Modified by Roland Gustafsson 8/25/89
|
|
* for Prince of Persia copy protection.
|
|
*
|
|
*-------------------------------------------------
|
|
|
|
OBJSCT = $07 ;PHYSICAL SECTOR #
|
|
|
|
* ZERO PAGE
|
|
|
|
HDRC = $30
|
|
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 = 33 ;arbitrarily long (only needs 10)
|
|
|
|
*-------------------------------------------------
|
|
|
|
* Jordan says: use $A400-ABFF
|
|
* Roland says: OK
|
|
|
|
orgCHECK = $AAAA ;must be highbyte=lowbyte
|
|
|
|
org $2000
|
|
|
|
da lenCHECK
|
|
|
|
dum $A4A4
|
|
zpagebuf ds zpagelen
|
|
was27 ds 3 ;should be 1 !!!
|
|
was2A ds 5 ; ditto
|
|
was26 ds 7 ; ditto again
|
|
dend
|
|
|
|
org orgCHECK
|
|
|
|
*-------------------------------------------------
|
|
|
|
start sta $C008 ;switch to main zpage
|
|
|
|
ldx slot
|
|
lda $C089,x ;drive on
|
|
|
|
jsr swapzpage
|
|
|
|
* First seek track zero
|
|
|
|
lda #0
|
|
jsr SEEK
|
|
|
|
* Now check signature
|
|
|
|
lda #10
|
|
sta LSRETRY
|
|
ldx slot
|
|
lda $C08E,X
|
|
lda #>:NIBS
|
|
sta NPTRH
|
|
lda #:NIBS
|
|
sta NPTR
|
|
|
|
: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
|
|
sta $C009-zpagelen,x
|
|
ror $7C-zpagelen,x
|
|
clc
|
|
rts
|
|
|
|
* FAILED
|
|
|
|
:LSFAIL1 dec LSRETRY
|
|
beq :ERROR
|
|
jmp :AGAIN
|
|
|
|
:NIBS db $FC,$EE,$EE,$FC
|
|
db $E7,$EE,$FC,$E7
|
|
|
|
:ERROR jsr swapzpage
|
|
sta $C009-zpagelen,x
|
|
rts
|
|
|
|
*-------------------------------------------------
|
|
*
|
|
* Read address mark
|
|
*
|
|
|
|
RADR16 ldy #$FD
|
|
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
|
|
|
|
*-------------------------------------------------
|
|
*
|
|
* SEEK, a - track
|
|
*
|
|
|
|
SEEK4 lda #4
|
|
SEEK sta was2A
|
|
cmp lastrack
|
|
beq :RTS0
|
|
lda #0
|
|
sta was26
|
|
:MOVEHEAD lda lastrack
|
|
sta was27
|
|
sec
|
|
sbc was2A
|
|
beq :ISTHERE
|
|
bcs :T0
|
|
eor #$FF
|
|
inc lastrack
|
|
bcc :T1
|
|
:T0 adc #$FE
|
|
dec lastrack
|
|
:T1 cmp was26
|
|
bcc :T2
|
|
lda was26
|
|
:T2 cmp #$C
|
|
bcs :T3
|
|
tay
|
|
:T3 sec
|
|
jsr :CHKPOS
|
|
lda ONTBL,Y
|
|
jsr :MSWAIT
|
|
lda was27
|
|
clc
|
|
jsr :CHKPOS2
|
|
lda OFFTBL,Y
|
|
jsr :MSWAIT
|
|
inc was26
|
|
bne :MOVEHEAD
|
|
:ISTHERE jsr :MSWAIT
|
|
clc
|
|
:CHKPOS lda lastrack
|
|
:CHKPOS2 and #3
|
|
rol
|
|
ora slot
|
|
tax
|
|
lda $C080,X
|
|
ldx slot
|
|
:RTS0 rts
|
|
|
|
:MSWAIT ldx #$12
|
|
:T21 dex
|
|
bne :T21
|
|
sec
|
|
sbc #1
|
|
bne :MSWAIT
|
|
rts
|
|
|
|
*-------------------------------------------------
|
|
|
|
swapzpage ldx #0
|
|
:0 ldy zpagebuf,x
|
|
lda zpage,x
|
|
sty zpage,x
|
|
sta zpagebuf,x
|
|
inx
|
|
cpx #zpagelen
|
|
bne :0
|
|
rts
|
|
|
|
*-------------------------------------------------
|
|
|
|
ONTBL db $01,$30,$28,$24,$20,$1E,$1D,$1C,$1C,$1C,$1C,$1C
|
|
OFFTBL db $70,$2C,$26,$22,$1F,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$FF,$03
|
|
|
|
*-------------------------------------------------
|
|
lenCHECK = *-orgCHECK
|
|
|
|
org
|
|
|
|
*------------------------------------------------- EOF
|
|
|
|
sav yellow.main
|