1
0
mirror of https://github.com/UzixLS/pacemuzx.git synced 2025-07-19 07:11:20 +03:00

Removed colour save/restore

Saved many cycles by saving only the attribute address, then restoring the current attribute colour.
This commit is contained in:
Simon Owen
2011-12-06 21:32:49 +00:00
parent 7949c7c6b8
commit a31f551071

View File

@ -46,12 +46,12 @@ pac_header: equ &43c0 ; 64 bytes containing the score
; address of saved sprite block followed by the data itself ; address of saved sprite block followed by the data itself
spr_save_2: equ &5b00 spr_save_2: equ &5b00
spr_save_3: equ spr_save_2+2+(3*12)+2+(3*3) spr_save_3: equ spr_save_2+2+(3*12)+2
spr_save_4: equ spr_save_3+2+(3*12)+2+(3*3) spr_save_4: equ spr_save_3+2+(3*12)+2
spr_save_5: equ spr_save_4+2+(3*12)+2+(3*3) spr_save_5: equ spr_save_4+2+(3*12)+2
spr_save_6: equ spr_save_5+2+(3*12)+2+(3*3) spr_save_6: equ spr_save_5+2+(3*12)+2
spr_save_7: equ spr_save_6+2+(3*12)+2+(3*3) spr_save_7: equ spr_save_6+2+(3*12)+2
spr_save_end: equ spr_save_7+2+(3*12)+2+(3*3) spr_save_end: equ spr_save_7+2+(3*12)+2
; pre-shifted sprite graphics ; pre-shifted sprite graphics
spr_data_0: equ spr_save_end spr_data_0: equ spr_save_end
@ -1742,7 +1742,6 @@ spr_save: ld a,h
ld d,a ld d,a
call xy_to_addr ; convert to Speccy display address call xy_to_addr ; convert to Speccy display address
IF colour IF colour
push hl push hl
@ -1756,45 +1755,19 @@ IF colour
ld h,a ld h,a
ex de,hl ex de,hl
ld (hl),e ; save address low ld (hl),e ; attr low
inc hl inc l
ld (hl),d ; save address high ld (hl),d ; attr high
inc hl inc l
ex de,hl ex de,hl
ldi
ldi
ldi
ld a,l
add a,32-3
ld l,a
adc a,h
sub l
ld h,a
ldi
ldi
ldi
ld a,l
add a,32-3
ld l,a
adc a,h
sub l
ld h,a
ld a,h
and %01111111
cp &5b
jr nc,save_2
ldi
ldi
ldi
save_2:
pop hl pop hl
ENDIF ENDIF
ex de,hl ex de,hl
ld (hl),e ; save address low ld (hl),e ; data low
inc hl inc l
ld (hl),d ; save address high ld (hl),d ; data high
inc hl inc l
ex de,hl ; HL=screen, DE=save ex de,hl ; HL=screen, DE=save
ld bc,3*12 ; 3 bytes and 12 lines ld bc,3*12 ; 3 bytes and 12 lines
@ -1842,43 +1815,50 @@ spr_restore: ld a,h
ret z ; no data saved ret z ; no data saved
ld (hl),0 ; flag 'no restore data' ld (hl),0 ; flag 'no restore data'
ld e,a ; restore address low
inc hl
ld d,(hl) ; restore address high
inc hl
IF colour IF colour
ldi ld e,a ; attr low
ldi inc l
ldi ld d,(hl) ; attr high
ld a,e inc l
add a,32-3
ld e,a ex de,hl
adc a,d ld a,(attr_colour) ; current maze colour
sub e ld bc,32-2
ld d,a
ldi ld (hl),a ; 1st line
ldi inc l
ldi ld (hl),a
ld a,e inc l
add a,32-3 ld (hl),a
ld e,a add hl,bc
adc a,d ld (hl),a ; 2nd line
sub e inc l
ld d,a ld (hl),a
ld a,d inc l
ld (hl),a
add hl,bc
ex af,af'
ld a,h
and %01111111 and %01111111
cp &5b cp &5b ; beyond attributes?
jr nc,restore_2 jr nc,restore_2 ; if so, stop painting
ldi ex af,af'
ldi
ldi ld (hl),a ; 3rd line
restore_2: inc l
ld e,(hl) ld (hl),a
inc hl inc l
ld d,(hl) ld (hl),a
inc hl
restore_2: ex de,hl
ld a,(hl)
ENDIF ENDIF
ld e,a ; data low
inc l
ld d,(hl) ; data high
inc l
ld bc,3*12 ; 3 bytes of 12 lines ld bc,3*12 ; 3 bytes of 12 lines
restore_lp: ld a,e restore_lp: ld a,e