mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-20 17:29:28 +00:00
xmas2019: try adding letter moving
This commit is contained in:
parent
325499f6aa
commit
6e30f85a1f
|
@ -42,7 +42,7 @@ XMAS2019: xmas2019.o
|
|||
ld65 -o XMAS2019 xmas2019.o -C ../linker_scripts/apple2_4000.inc
|
||||
|
||||
xmas2019.o: xmas2019.s \
|
||||
delay_a.s vapor_lock.s message.inc gr_unrle.s
|
||||
delay_a.s vapor_lock.s message.inc gr_unrle.s move_letters.s letters.s
|
||||
ca65 -o xmas2019.o xmas2019.s -l xmas2019.lst
|
||||
|
||||
|
||||
|
|
30
xmas_2019/letters.s
Normal file
30
xmas_2019/letters.s
Normal file
|
@ -0,0 +1,30 @@
|
|||
; The various strings printed by the sliding letters code
|
||||
; Kept in one place to try to allow for better alignment opportunities
|
||||
|
||||
.align $100
|
||||
|
||||
letters_bm:
|
||||
;.byte 1,12
|
||||
.byte "CYCLE",128
|
||||
.byte 1+128,12,"CYCLE",128
|
||||
.byte 2,16,"COUNTING",128
|
||||
.byte 2+128,16,"COUNTING",128
|
||||
; .byte 3,12,"M E G A D E M O",150
|
||||
.byte 3,16,"MEGADEMO",150
|
||||
.byte 1,16," ",128
|
||||
.byte 2,16," ",128
|
||||
.byte 3,16," ",128
|
||||
.byte 1,19,"BY",128
|
||||
.byte 3,17,"DEATER",150
|
||||
.byte 1,19," ",128
|
||||
.byte 3,17," ",128
|
||||
.byte 1,17,"MUSIC",128
|
||||
.byte 3,17,"DASCON",150
|
||||
.byte 1,17," ",128
|
||||
.byte 3,17," ",128
|
||||
.byte 1,16,"LZ4+DISK",128
|
||||
.byte 3,17,"QKUMBA",150
|
||||
.byte 1,16," ",128
|
||||
.byte 3,17," "
|
||||
.byte 255
|
||||
|
196
xmas_2019/move_letters.s
Normal file
196
xmas_2019/move_letters.s
Normal file
|
@ -0,0 +1,196 @@
|
|||
;===============================================
|
||||
; Move Letters
|
||||
;===============================================
|
||||
; Normal P0 =6+13+2+22+46+37 = 126
|
||||
; Normal P1 =6+13+2+22+46+37 = 126
|
||||
; End of line =6+13+2+22+46+9+(28) = 126
|
||||
; Next line =6+13+5+14+34+(26+28) = 126
|
||||
; done entirely =6+13+5+(6+42+26+28) = 126
|
||||
; Waiting =6+7+(11+6+42+26+28) = 126
|
||||
|
||||
; all forced to be 126
|
||||
|
||||
.assert >move_letters = >move_letters_after, error, "move_letters crosses page"
|
||||
|
||||
move_letters:
|
||||
ldy WAITING ; 3
|
||||
beq not_waiting ; 3
|
||||
;============
|
||||
; 6
|
||||
|
||||
;-1
|
||||
dec WAITING ; 5
|
||||
jmp wait_it_out ; 3
|
||||
;===========
|
||||
; 7
|
||||
|
||||
not_waiting:
|
||||
; load letter from pointer, save into LETTER
|
||||
|
||||
ldy #0 ; 2
|
||||
lda (LETTERL),Y ; 5
|
||||
sta LETTER ; 3
|
||||
|
||||
; if high bit set, is special case
|
||||
bmi letter_special ; 3
|
||||
;==========
|
||||
; 13
|
||||
|
||||
; just regular letter
|
||||
|
||||
;-1
|
||||
lda LETTERY ; get letter Y ; 3
|
||||
bmi letter_page1
|
||||
;==========
|
||||
; 2
|
||||
|
||||
letter_page0: ; -1
|
||||
nop
|
||||
; asl ; map to memory address ; 2
|
||||
tay ; 2
|
||||
lda gr_offsets_l,Y ; lookup low-res memory address ; 4
|
||||
sta BASL ; store out low byte of addy ; 3
|
||||
lda gr_offsets_h,Y ; look up high byte ; 4
|
||||
sta BASH ; 3
|
||||
lda #0 ; cycle-killer ; 2
|
||||
jmp letter_erase ; 3
|
||||
;==========
|
||||
; 22
|
||||
|
||||
letter_page1:
|
||||
; asl ; map to memory address ; 2
|
||||
nop
|
||||
tay ; 2
|
||||
lda gr_offsets_l,Y ; lookup low-res memory address ; 4
|
||||
sta BASL ; store out low byte of addy ; 3
|
||||
lda gr_offsets_h,Y ; look up high byte ; 4
|
||||
clc ; 2
|
||||
adc #$4 ; adjust to page1 ; 2
|
||||
sta BASH ; 3
|
||||
;==========
|
||||
; 22
|
||||
|
||||
;============================
|
||||
letter_erase:
|
||||
ldy LETTERX ; nop ; 3
|
||||
nop ; nop ; 5
|
||||
|
||||
ldy #0 ; erase old char with space ; 2
|
||||
ml_patch_space:
|
||||
lda #' '|$80 ; 2
|
||||
; lda #' '|$00 ; 2
|
||||
ldy LETTERX ; 3
|
||||
sta (BASL),Y ; 6
|
||||
|
||||
dey ; draw new char ; 2
|
||||
sty LETTERX ; 3
|
||||
lda LETTER ; 3
|
||||
ml_patch_or:
|
||||
ora #$80 ; 2
|
||||
; and #$3f ; 2
|
||||
ldy LETTERX ; 3
|
||||
sta (BASL),Y ; 6
|
||||
|
||||
lda LETTERX ; see if we are at destination ; 3
|
||||
cmp LETTERD ; 3
|
||||
beq letter_next ; 3
|
||||
;===========
|
||||
; 46
|
||||
|
||||
;-1
|
||||
lda #0 ; 2
|
||||
lda #0 ; 2
|
||||
jmp waste_28 ; 3
|
||||
;==========
|
||||
; 9
|
||||
letter_next:
|
||||
clc ; 16-bit inc letter pointer ; 2
|
||||
lda LETTERL ; 3
|
||||
adc #1 ; 2
|
||||
sta LETTERL ; 3
|
||||
lda LETTERH ; 3
|
||||
adc #0 ; 2
|
||||
sta LETTERH ; 3
|
||||
|
||||
inc LETTERD ; inc destination X ; 5
|
||||
start_destination:
|
||||
ml_patch_dest:
|
||||
; lda #39 ; start at right of screen ; 2
|
||||
lda #39 ; start at right of screen ; 2
|
||||
sta LETTERX ; 3
|
||||
rts ; 6
|
||||
;===========
|
||||
; 37
|
||||
|
||||
letter_special:
|
||||
cmp #$ff ; handle FF, we're done ; 2
|
||||
beq letter_done ; 3
|
||||
;==========
|
||||
; 5
|
||||
|
||||
|
||||
; -1
|
||||
and #$7f ; clear top ; 2
|
||||
sta WAITING ; this is waiting value ; 3
|
||||
|
||||
ldy #1 ; otherwise, Y,X pair ; 2
|
||||
lda (LETTERL),Y ; get Y, put in LETTERY ; 5
|
||||
sta LETTERY ; 3
|
||||
;===========
|
||||
; 14
|
||||
|
||||
iny ; get dest ; 2
|
||||
lda (LETTERL),Y ; 5
|
||||
sta LETTERD ; put in LETTERD ; 3
|
||||
|
||||
clc ; skip 3 bytes to begin of letters ; 2
|
||||
lda LETTERL ; 16-bit add ; 3
|
||||
adc #3 ; 2
|
||||
sta LETTERL ; 3
|
||||
lda LETTERH ; 3
|
||||
adc #0 ; 2
|
||||
sta LETTERH ; 3
|
||||
lda LETTERH ; waste ; 3
|
||||
jmp waste_26 ; 3
|
||||
|
||||
;===========
|
||||
; 34
|
||||
|
||||
wait_it_out:
|
||||
; wait 11
|
||||
inc BLARGH ; 5
|
||||
lda LETTERH ; 3
|
||||
lda LETTERH ; 3
|
||||
|
||||
letter_done:
|
||||
lda LETTERH ; 3
|
||||
lda LETTERH ; 3
|
||||
|
||||
waste_42:
|
||||
ldx #0 ; 2
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
inc BLARGH ; 5
|
||||
waste_26:
|
||||
ldx #0 ; 2
|
||||
ldx #0 ; 2
|
||||
ldx #0 ; 2
|
||||
inc BLARGH ; 5
|
||||
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
|
||||
|
||||
move_letters_after:
|
|
@ -21,6 +21,15 @@ SEEDH = $4F
|
|||
FRAME_PLAY_OFFSET=$56
|
||||
FRAME_PLAY_PAGE = $57
|
||||
|
||||
WAITING = $62
|
||||
LETTERL = $63
|
||||
LETTERH = $64
|
||||
LETTERX = $65
|
||||
LETTERY = $66
|
||||
LETTERD = $67
|
||||
LETTER = $68
|
||||
BLARGH = $69
|
||||
|
||||
AY_REGISTERS = $70
|
||||
A_FINE_TONE = $70
|
||||
A_COARSE_TONE = $71
|
||||
|
@ -147,6 +156,17 @@ snow_init_loop:
|
|||
dex
|
||||
bpl snow_init_loop
|
||||
|
||||
lda #<letters_bm
|
||||
sta LETTERL
|
||||
lda #>letters_bm
|
||||
sta LETTERH
|
||||
lda #39
|
||||
sta LETTERX
|
||||
lda #1
|
||||
sta LETTERY
|
||||
lda #16
|
||||
sta LETTERD
|
||||
|
||||
|
||||
;=============================
|
||||
; Load graphic page0
|
||||
|
@ -554,6 +574,9 @@ ll_smc4:
|
|||
.align $100
|
||||
music_snow:
|
||||
|
||||
; do letters
|
||||
|
||||
jsr move_letters ; 6+126
|
||||
|
||||
; play music
|
||||
jsr play_frame_compressed ; 6+1237
|
||||
|
@ -795,13 +818,16 @@ draw_loop:
|
|||
; -3 jump at end
|
||||
;-1243 music
|
||||
; -135 wrap
|
||||
; -132 letters
|
||||
;======
|
||||
; 167
|
||||
; 35
|
||||
|
||||
; Try X=32 Y=1 cycles=167
|
||||
; Try X=2 Y=2 cycles=33R2
|
||||
|
||||
ldy #1 ; 2
|
||||
dloop1: ldx #32 ; 2
|
||||
nop
|
||||
|
||||
ldy #2 ; 2
|
||||
dloop1: ldx #2 ; 2
|
||||
dloop2: dex ; 2
|
||||
bne dloop2 ; 2nt/3
|
||||
dey ; 2
|
||||
|
@ -918,6 +944,9 @@ pixel_lookup:
|
|||
.include "pt3_lib_write_frame.s"
|
||||
.include "pt3_lib_write_lc.s"
|
||||
|
||||
.align $100
|
||||
.include "move_letters.s"
|
||||
.include "letters.s"
|
||||
|
||||
.align $100
|
||||
PT3_LOC = song
|
||||
|
|
Loading…
Reference in New Issue
Block a user