dos33fsprogs/still_alive/display_lyrics.s

113 lines
1.8 KiB
ArmAsm

;============================
; Setup Word Bounds
;============================
word_bounds:
lda FORTYCOL
bne fortycol_word_bounds
eightycol_word_bounds:
; on 80 column, words go from 2,1 to 35,21
lda #2
sta WNDLFT
lda #35
sta WNDWDTH
lda #1
sta WNDTOP
lda #21
sta WNDBTM
rts
fortycol_word_bounds:
; on 40 column, words go from 1,0 to 35,4
lda #1
sta WNDLFT
lda #35
sta WNDWDTH
lda #0
sta WNDTOP
lda #4
sta WNDBTM
rts
;========================================================
; display lyrics
;========================================================
display_lyrics:
;=====================
; See if lyrics already printing
;=====================
lda LYRICS_ACTIVE ; see if lyric is ready
bne handle_lyrics ; if so handle it
;========================
; Check if new lyric ready
;========================
lda FRAME_COUNT ; get current frame count
cmp (LYRICSL),Y ; compare to next-trigger
bne all_done_lyrics ; not same, so skip
lda #1 ; matches, set lyrics active
sta LYRICS_ACTIVE
; adjust pointer 16-bit
inc LYRICSL
bne lc_sb2
inc LYRICSH
lc_sb2:
;==================================
; Lyric active, print current char
;==================================
handle_lyrics:
lda (LYRICSL),Y ; load value
beq done_lyric ; if 0, done lyric
cmp #11 ; check if in range 1-10
bcs lyric_home ; if not, skip ahead
go_draw_ascii:
jsr draw_ascii_art ; draw proper ascii art
jmp lyric_continue ; and continue
lyric_home:
cmp #12 ; check if form feed char
bne lyric_char ; if not skip ahead
jsr HOME ; call HOME
jmp lyric_continue ; continue
lyric_char:
jsr COUT1 ; output the character
lyric_continue:
; adjust pointer 16-bit
inc LYRICSL
bne lc_sb
inc LYRICSH
lc_sb:
jmp all_done_lyrics
done_lyric:
lda #0
sta LYRICS_ACTIVE
jmp lyric_continue
all_done_lyrics:
rts