From b060b0c5d98e69bee00fdf5bd1ae22c164004fb5 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 22 Dec 2023 01:29:41 -0500 Subject: [PATCH] xmas_2023: work on fireplace --- demos/xmas_2023/fireplace.s | 80 ++++++++++++++++++++--------- demos/xmas_2023/graphics/merry.png | Bin 15014 -> 15236 bytes demos/xmas_2023/zp.inc | 7 +-- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/demos/xmas_2023/fireplace.s b/demos/xmas_2023/fireplace.s index cddaa5c1..245ba90f 100644 --- a/demos/xmas_2023/fireplace.s +++ b/demos/xmas_2023/fireplace.s @@ -17,6 +17,9 @@ fireplace: lda #160 sta HGR_COPY_Y2 + lda #$DD + sta FIRE_COLOR + bit SET_GR bit LORES bit FULLGR @@ -52,25 +55,23 @@ fireplace: ; write text to page2 ; this is inefficient at best - lda #merry_text - sta INH - ldy #39 text_loop: - lda (INL),Y + lda merry_text+6,Y ora #$80 sta $A50,Y - cpy #38 - bcs early_out - sta $AD0+2,Y - cpy #36 - bcs early_out - sta $B50+4,Y - cpy #34 - bcs early_out - sta $BD0+6,Y + + lda merry_text+4,Y + ora #$80 + sta $AD0,Y + + lda merry_text+2,Y + ora #$80 + sta $B50,Y + + lda merry_text,Y + ora #$80 + sta $BD0,Y early_out: dey bpl text_loop @@ -252,13 +253,21 @@ copy_hgr_line_loop: do_flicker: ; 8 - ; 718-11 = 707 - ; Try X=2 Y=44 cycles=705 - nop + lda FIRE_COLOR ; 3 + eor #$00 ; 2 + sta FIRE_COLOR ; 3 + sta $9A8+34 ; 4 + sta $9A8+35 ; 4 +; 24 - ldy #44 ; 2 -loop5: ldx #2 ; 2 + + + ; 718-27 = 691 + ; Try X=8 Y=15 cycles=691 + + ldy #15 ; 2 +loop5: ldx #8 ; 2 loop6: dex ; 2 bne loop6 ; 2nt/3 dey ; 2 @@ -334,10 +343,33 @@ done_cycle_count: cli ; enable sound no_music: - ; TODO: flicker fire a bit - ; start scrolling text - jsr wait_until_keypress +new_loop: + ; bring in wait_until_interrupt + + inc FRAMEL ; 5 + lda FRAMEL ; 3 + and #$3f ; 2 + sta FRAMEL ; 3 + bne frame_noflo2 ; 2/3 + inc FRAMEH ; 5 +frame_noflo2: + + lda #255 + jsr wait + + lda FIRE_COLOR ; 3 + eor #$0D ; 2 + sta FIRE_COLOR ; 3 + sta $9A8+34 ; 4 + sta $9A8+35 ; 4 + + lda KEYPRESS + bmi totally_done_fireplace + jmp new_loop + +totally_done_fireplace: + bit KEYRESET rts @@ -1042,7 +1074,7 @@ gr_offsets_h: ;0123456789012345678901234567890123456789 merry_text: - .byte "MERRY CHRISTMAS!!! MERRY CHRISTMAS!!! ME" + .byte " MERRY CHRISTMAS!!! MERRY CHRISTMAS!!! ME" diff --git a/demos/xmas_2023/graphics/merry.png b/demos/xmas_2023/graphics/merry.png index aa063e75cc24dc69ced040cca1f7950c2f4dcb3d..f46188c5a9c9a10e8a973d8e8450f41854bd8a6d 100644 GIT binary patch delta 11000 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 Q;r^47oI0dI#xm^x0ItYEK>z>% delta 10962 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