sa: move lyrics printing out of interrupt handler file

This commit is contained in:
Vince Weaver 2018-05-24 09:48:48 -04:00
parent 2385c53473
commit 1a559ef166
2 changed files with 78 additions and 64 deletions

View File

@ -35,3 +35,78 @@ fortycol_word_bounds:
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

View File

@ -254,11 +254,6 @@ update_r0_pointer:
;=================================
done_interrupt:
;===============================================================
; Handle Lyrics
;===============================================================
;=====================
; Increment Frame Count
@ -267,71 +262,15 @@ done_interrupt:
inc FRAME_COUNT ; 5
ldy #$0
;=====================
; See if lyrics already printing
; print lyrics
;=====================
lda LYRICS_ACTIVE ; see if lyric is ready
bne handle_lyrics ; if so handle it
jsr display_lyrics
;========================
; Check if new lyric ready
;========================
lda FRAME_COUNT ; get current frame count
cmp (LYRICSL),Y ; compare to next-trigger
bne exit_interrupt ; 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 exit_interrupt
done_lyric:
lda #0
sta LYRICS_ACTIVE
jmp lyric_continue
quiet_exit:
sta DONE_PLAYING
jsr clear_ay_both