dos33fsprogs/games/lemm/hgr_partial_restore.s

50 lines
811 B
ArmAsm

;=======================
; HGR Partial Restore
;=======================
; loads from $40 (page2)
; save to $20 (page1)
; restores from X = A<=to<=X
; Y = SAVED_Y1 to SAVED_Y2
hgr_partial_restore:
sta partial_restore_x1_smc+1
stx partial_restore_x2_smc+1
ldx SAVED_Y2 ; handle wrap around
cpx #192
bcc partial_restore_yloop ; assume > 192 off screen negative
ldx #0 ; X is end y-co-ord?
partial_restore_yloop:
lda hposn_low,X
sta prx_smc2+1
sta prx_smc1+1
lda hposn_high,X
sta prx_smc2+2
clc
adc #$20
sta prx_smc1+2
partial_restore_x2_smc:
ldy #$27
partial_restore_xloop:
prx_smc1:
lda $d000,Y
prx_smc2:
sta $d000,Y
dey
partial_restore_x1_smc:
cpy #$00
bpl partial_restore_xloop
dex
cpx SAVED_Y1
bpl partial_restore_yloop ; urgh bcs gets stuck
rts