;======================================================== ; display lyrics electric duet ;======================================================== display_lyrics_ed: ;======================== ; Check if new lyric ready ;======================== lda FRAME_COUNT ; get current frame count ldy #0 cmp (LYRICSL),Y ; compare to next-trigger bne all_done_lyrics_ed ; not same, so skip ; adjust pointer 16-bit inc LYRICSL bne lc_sb2_ed inc LYRICSH lc_sb2_ed: ;================================== ; Print lyric ;================================== handle_lyrics_ed: ldy #0 lda (LYRICSL),Y ; load value handle_lyrics_loop_ed: cmp #11 ; check if in range 1-10 bcs lyric_home_ed ; if not, skip ahead go_draw_ascii_ed: jsr draw_ascii_art ; draw proper ascii art jmp lyric_continue_ed ; and continue lyric_home_ed: cmp #12 ; check if form feed char bne lyric_char_ed ; if not skip ahead jsr HOME ; call HOME jmp lyric_continue_ed ; continue lyric_char_ed: ldy FORTYCOL ; if 40 column, uppercase it beq just_output_already_ed ; Uppercase it cmp #'a'+$80 bcc just_output_already_ed cmp #'z'+$80 bcs just_output_already_ed and #$DF just_output_already_ed: jsr COUT1 ; output the character lyric_continue_ed: ; adjust pointer 16-bit inc LYRICSL bne lc_sb_ed inc LYRICSH lc_sb_ed: ldy #0 lda (LYRICSL),Y ; load value bne handle_lyrics_loop_ed ; adjust pointer 16-bit inc LYRICSL bne lc_sb_ed2 inc LYRICSH lc_sb_ed2: ; skip MB offset ; adjust pointer 16-bit inc LYRICSL bne lc_sb_ed8 inc LYRICSH lc_sb_ed8: all_done_lyrics_ed: rts ;======================================================== ; display lyrics mockingboard ;======================================================== display_lyrics: ;===================== ; See if lyrics already printing ;===================== ldy #0 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: ; skip ED data ; adjust pointer 16-bit inc LYRICSL bne lc_sb5 inc LYRICSH lc_sb5: ;================================== ; 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: ; clear cursor cursor_clear: pha lda #' '+$80 ldy FORTYCOL beq eightyclear fortyclear: ldy CH sta (BASL),Y jmp cursor_clear_done eightyclear: jsr COUT lda #$8 jsr COUT cursor_clear_done: pla ldy FORTYCOL ; if 40col, convert to UPPERCASE beq just_output_already cmp #'a'+$80 bcc just_output_already cmp #'z'+$80 bcs just_output_already and #$DF just_output_already: 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: lda FORTYCOL beq blink_cursor80 ; Blink Cursor blink_cursor40: inc CURSOR lda CURSOR and #$10 beq cursor_space cursor_underscore: lda #'_'+$80 jmp cursor_done cursor_space: lda #' '+$80 cursor_done: ldy CH sta (BASL),Y rts blink_cursor80: inc CURSOR lda CURSOR and #$10 beq cursor_space80 cursor_underscore80: lda #'_'+$80 jsr COUT lda #$8 ; BS (backspace) jsr COUT rts cursor_space80: lda #' '+$80 jsr COUT lda #$8 ; BS (backspace) jsr COUT cursor_done80: rts ;============================ ; 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