sprites: fire erases, but at what cost

(lots of cycles)
This commit is contained in:
Vince Weaver 2019-06-13 10:30:37 -04:00
parent 1d5b990e81
commit 0a619ddef0

View File

@ -223,15 +223,15 @@ display_loop:
; 4550 -- VBLANK ; 4550 -- VBLANK
;-1821 -- draw ship (130*14)+1 ;-1821 -- draw ship (130*14)+1
; -829 -- erase ship (100*8)+(14*2)+1 ; -829 -- erase ship (100*8)+(14*2)+1
; -278 -- erase fire ; -167 -- erase fire
; -31 -- move ship ; -31 -- move ship
; -17 -- move fire ; -17 -- move fire
; -306 -- draw fire (61*5)+1 ; -428 -- draw fire (61*7)+1
; -61 -- keypress ; -61 -- keypress
; -28 -- handle fire press ; -28 -- handle fire press
; -8 -- loop ; -8 -- loop
;======= ;=======
; 1171 ; 1160
;================ ;================
; erase old ship ; erase old ship
@ -277,13 +277,21 @@ display_loop:
;========================== ;==========================
ldy FIRE_Y ; 3 ldy FIRE_Y ; 3
jsr erase_fire ; 6+49 iny ; 2
jsr erase_fire ; 6+49 jsr erase_fire ; 6+71
jsr erase_fire ; 6+49 iny ; 2
jsr erase_fire ; 6+49 iny ; 2
jsr erase_fire ; 6+49 iny ; 2
iny ; 2
jsr erase_fire ; 6+71
;========
; 167
; jsr erase_fire ; 6+71
; jsr erase_fire ; 6+71
; jsr erase_fire ; 6+71
;==== ;====
; 278 ; 388
@ -498,6 +506,20 @@ done_move:
;==== ;====
; 61 ; 61
; line 5
iny ; 2
ldx #5 ; 2
jsr fire_line ; 6+51
;====
; 61
; line 6
iny ; 2
ldx #5 ; zero again ; 2
jsr fire_line ; 6+51
;====
; 61
pad_time: pad_time:
@ -520,12 +542,12 @@ pad_time:
wait_loop: wait_loop:
; Try X=11 Y=19 cycles=1160
; nop
; nop
; Try X=4 Y=45 cycles=1171 ldy #19 ; 2
loop1: ldx #11 ; 2
ldy #45 ; 2
loop1: ldx #4 ; 2
loop2: dex ; 2 loop2: dex ; 2
bne loop2 ; 2nt/3 bne loop2 ; 2nt/3
dey ; 2 dey ; 2
@ -850,28 +872,37 @@ fire_line:
; Erase a line of a fire ; Erase a line of a fire
;======================== ;========================
; Y = y value ; Y = y value
; 27+11+11 = 49 ; 31+29+11 = 71
erase_fire: erase_fire:
sty TEMPY ; 3 sty TEMPY ; 3
clc ; 2
tya ; 2 tya ; 2
lsr ; 2 lsr ; 2
lsr ; 2 lsr ; 2
and #$fe ; 2
clc ; 2
adc #$8 ; 2 adc #$8 ; 2
tay ; 2
lda gr_offsets,Y ; 4 lda gr_offsets,Y ; 4
sta OUTL ; 3 sta OUTL ; 3
lda gr_offsets+1,Y ; 4 lda gr_offsets+1,Y ; 4
sta OUTH ; 3 sta OUTH ; 3
;======= ;=======
; 27 ; 31
ldy FIRE_X ; 3 ldy FIRE_X ; 3
lda #0 ; 2 lda #0 ; 2
sta (OUTL),Y ; 6
lda #$4 ; 2
clc ; 2
adc OUTH ; 3
sta OUTH ; 3
lda #0 ; 2
sta (OUTL),Y ; 6 sta (OUTL),Y ; 6
;====== ;======
; 11 ; 29
; ldx in smc should already be ; ldx in smc should already be
; set to value from last draw? ; set to value from last draw?