Prince-of-Persia-Apple-II/03 Disk Protection/UPDATE.LS.S

140 lines
1.6 KiB
ArmAsm
Executable File

lst off
org $300
*
* loresshow:0C00.0FFF ($400)
* framedata:1000.6BFF ($5C00)
*
* buffer18 :6C00.7DFF ($1200 one track)
* rw18.d000:7E00.82FF ($500 moved to aux ramcard)
*
BbundID = $AD
loresshow = $c00
buffer18 = $6c00
rw18 = $d000
rw18temp = $7e00
slot = $FD
track = $FE
lastrack = $FF
startrack = 12 ;last 6 sectors here
* 13,14,15,16,17 (5 full tracks here)
errcode = 0
start jsr $e74c ;get slot#
txa
asl
asl
asl
asl
sta $C009 ;aux zpage, ramcard
sta slot
bit $C083
bit $C083
* Move rw18 to its home
ldx #>rw18temp
ldy #>rw18
lda #5
jsr movedata
* Now we can use rw18
jsr rw18
db 7,BbundID
jsr rw18
db 0,5,1 ;drive on
jsr rw18 ;seek to startrack
db 2,1,startrack
* handle special track with
jsr rw18
db 3 ;read in original data
db >buffer18
lda #1
bcs :error
* update last 6 sectors
ldx #>loresshow
ldy #>buffer18+$C00
lda #6
jsr movedata
* write it back out
jsr rw18
db 5 ;writesequ
db >buffer18
lda #2
bcs :error
* write out rest of data...
lda #>loresshow+$600
:wloop sta :buf
inc track
jsr rw18
db 5 ;writesequ
:buf db $11
lda #2
bcs :error
lda :buf
adc #$12
cmp #>loresshow+$600+{5*$1200}
bne :wloop
lda #0
:error pha
jsr rw18
db 1 ;drive off
pla
sta $C008
bit $C081
sta errcode
rts
*------------------------------------------------- movedata
*
* Move data: x:source, y:dest, a:length
*
movedata stx :src+2
sty :dst+2
tax
ldy #0
:loop
:src lda $1100,y
:dst sta $1100,y
iny
bne :loop
inc :src+2
inc :dst+2
dex
bne :loop
rts
*------------------------------------------------- EOF