mirror of
https://github.com/jmechner/Prince-of-Persia-Apple-II.git
synced 2025-01-14 10:30:39 +00:00
212 lines
2.7 KiB
ArmAsm
Executable File
212 lines
2.7 KiB
ArmAsm
Executable File
* 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
|