mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-08-16 09:29:23 +00:00
291 lines
4.4 KiB
ArmAsm
291 lines
4.4 KiB
ArmAsm
;========================================================
|
|
; 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
|
|
|
|
|