72 lines
1.1 KiB
ArmAsm
72 lines
1.1 KiB
ArmAsm
// #LAYOUT# STD * #TAKE
|
|
// #LAYOUT# * KERNAL_0 #TAKE
|
|
// #LAYOUT# * * #IGNORE
|
|
|
|
//
|
|
// CHROUT routine - screen support, control codes
|
|
//
|
|
|
|
chrout_screen_control:
|
|
|
|
txa
|
|
|
|
chrout_try_jumptable:
|
|
|
|
ldx #(__chrout_screen_jumptable_codes_end - chrout_screen_jumptable_codes - 1)
|
|
|
|
chrout_try_jumptable_loop:
|
|
|
|
cpx #(__chrout_screen_jumptable_quote_guard - chrout_screen_jumptable_codes - 1)
|
|
bne chrout_try_jumptable_loop_noquote
|
|
|
|
// Is this insert/quote mode?
|
|
tay
|
|
lda QTSW
|
|
ora INSRT
|
|
beq !+
|
|
tya
|
|
jmp chrout_screen_quote
|
|
!:
|
|
tya
|
|
|
|
// FALLTROUGH
|
|
|
|
chrout_try_jumptable_loop_noquote:
|
|
|
|
cmp chrout_screen_jumptable_codes, x
|
|
bne !+
|
|
|
|
// Found, perform a jump to subroutine
|
|
#if !HAS_OPCODES_65C02
|
|
lda chrout_screen_jumptable_hi, x
|
|
pha
|
|
lda chrout_screen_jumptable_lo, x
|
|
pha
|
|
rts
|
|
#else
|
|
txa
|
|
asl
|
|
tax
|
|
jmp (chrout_screen_jumptable, x)
|
|
#endif
|
|
!:
|
|
dex
|
|
bpl chrout_try_jumptable_loop
|
|
|
|
chrout_try_COLOR:
|
|
|
|
ldx #$0F
|
|
|
|
chrout_try_color_loop:
|
|
|
|
cmp colour_codes,x
|
|
bne !+
|
|
stx COLOR
|
|
jmp chrout_screen_done
|
|
!:
|
|
dex
|
|
bpl chrout_try_color_loop
|
|
|
|
// Unknown code, or key not requiring any handling
|
|
jmp chrout_screen_done
|