From a85175c43642bbdf5e1a854fe4c43d75338490b9 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 12 Sep 2018 13:30:20 -0400 Subject: [PATCH] fireworks: add initial text support --- fireworks/Makefile | 2 +- fireworks/TODO | 2 + fireworks/fireworks.s | 19 ++++++ fireworks/move_letters.s | 137 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 fireworks/move_letters.s diff --git a/fireworks/Makefile b/fireworks/Makefile index d237d509..99cd9beb 100644 --- a/fireworks/Makefile +++ b/fireworks/Makefile @@ -17,7 +17,7 @@ FIREWORKS: fireworks.o ld65 -o FIREWORKS fireworks.o -C ../linker_scripts/apple2_1000.inc fireworks.o: fireworks.s gr_copy.s random16.s fw.s hgr.s \ - vapor_lock.s gr_hline.s state_machine.s \ + vapor_lock.s gr_hline.s state_machine.s move_letters.s \ background_final.inc ca65 -o fireworks.o fireworks.s -l fireworks.lst diff --git a/fireworks/TODO b/fireworks/TODO index b9004346..f7f50667 100644 --- a/fireworks/TODO +++ b/fireworks/TODO @@ -11,4 +11,6 @@ remove dead code adjust speed adjust colors of gradient? +BUGS: + sometimes far left firework will wrap? diff --git a/fireworks/fireworks.s b/fireworks/fireworks.s index 72d1b15d..ec0ad641 100644 --- a/fireworks/fireworks.s +++ b/fireworks/fireworks.s @@ -15,6 +15,12 @@ GBASH = $27 BASL = $28 BASH = $29 FRAME = $60 +LETTERL = $63 +LETTERH = $64 +LETTERX = $65 +LETTERY = $66 +LETTERD = $67 +LETTER = $68 BLARGH = $69 HGR_COLOR = $E4 STATE = $ED @@ -72,6 +78,18 @@ setup_background: lda #0 sta DRAW_PAGE sta STATE +init_letters: + lda #letters + sta LETTERH + lda #39 + sta LETTERX + lda #24 + sta LETTERY + lda #30 + sta LETTERD + ;============================= ; Load graphic page0 @@ -391,6 +409,7 @@ jump_table: .include "fw.s" .include "hgr.s" .include "vapor_lock.s" +.include "move_letters.s" background: diff --git a/fireworks/move_letters.s b/fireworks/move_letters.s new file mode 100644 index 00000000..0146f92a --- /dev/null +++ b/fireworks/move_letters.s @@ -0,0 +1,137 @@ + ;=============================================== + ; Move Letters + ;=============================================== + ; Normal =10+25+38+9 = 82 need 28 (28) + ; End of line =10+25+38+37 = 110 + ; Next line =10+5+12+34 = 61 need 49 (28+21) + ; done entirely =10+5+9 = 24 need 86 (28+21+37) + + ; all forced to be 109 + +move_letters: + ldy #0 ; 2 + lda (LETTERL),Y ; 5 + sta LETTER ; 3 + ;========== + ; 10 + bmi letter_special + ; 2 + lda LETTERY ; 3 + asl ; 2 + tay ; 2 + lda gr_offsets,Y ; lookup low-res memory address ; 4 + sta BASL ; store out low byte of addy ; 3 + lda gr_offsets+1,Y ; look up high byte ; 4 + sta BASH ; 3 + lda #0 ; cycle-killer ; 2 + ;========== + ; 25 + + ldy #0 ; erase old char with space ; 2 + lda #' '|$80 ; 2 + ldy LETTERX ; 3 + sta (BASL),Y ; 6 + + dey ; draw new char ; 2 + sty LETTERX ; 3 + lda LETTER ; 3 + ora #$80 ; 2 + ldy LETTERX ; 3 + sta (BASL),Y ; 6 + + lda LETTERX ; 3 + cmp LETTERD ; 3 + ;=========== + ; 38 + beq letter_next + ; 2 + lda #0 ; 2 + lda #0 ; 2 + jmp waste_28 ; 3 + ;========== + ; 9 +letter_next: + ; 3 + clc ; 2 + lda LETTERL ; 3 + adc #1 ; 2 + sta LETTERL ; 3 + lda LETTERH ; 3 + adc #0 ; 2 + sta LETTERH ; 3 + inc LETTERD ; 5 + lda #39 ; 2 + sta LETTERX ; 3 + rts ; 6 + ;=========== + ; 37 + +letter_special: + ; 3 + cmp #$ff ; 2 + ;========== + ; 5 + + beq letter_done + ; 2 + ldy #1 ; 2 + lda (LETTERL),Y ; 5 + sta LETTERY ; 3 + ;=========== + ; 12 + + iny ; 2 + lda (LETTERL),Y ; 5 + sta LETTERD ; 3 + + clc ; 2 + lda LETTERL ; 3 + adc #3 ; 2 + sta LETTERL ; 3 + lda LETTERH ; 3 + adc #0 ; 2 + sta LETTERH ; 3 + lda LETTERH ; waste ; 3 + jmp waste_21 ; 3 + + ;=========== + ; 34 +letter_done: + ; 3 + lda LETTERH ; 3 + lda LETTERH ; 3 + +waste_37: + ldx #0 ; 2 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 +waste_21: + ldx #0 ; 2 + ldx #0 ; 2 + ldx #0 ; 2 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + +waste_28: + ldx #0 ; 2 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + inc BLARGH ; 5 + rts ; 6 + +letters: + ;.byte 22,30, + .byte "CODE BY",128 + .byte 23,30,"DEATER",128 + .byte 22,30,"FIREWORKS",128 + .byte 23,30,"FOZZTEXX",128 + .byte 22,30,"A VMW",128 + .byte 23,30,"PRODUCTION",128 + .byte 255