47 lines
867 B
ArmAsm
47 lines
867 B
ArmAsm
// #LAYOUT# STD * #TAKE
|
|
// #LAYOUT# X16 * #IGNORE
|
|
// #LAYOUT# * KERNAL_0 #TAKE
|
|
// #LAYOUT# * * #IGNORE
|
|
|
|
//
|
|
// Keyboard part of the CHRIN routine - programmable keys support
|
|
// Output: if Carry clear, programmable key was handled
|
|
//
|
|
|
|
|
|
#if CONFIG_PROGRAMMABLE_KEYS
|
|
|
|
chrin_programmable_keys:
|
|
|
|
// Check if the key is programmable
|
|
|
|
ldx #(__programmable_keys_codes_end - programmable_keys_codes - 1)
|
|
!:
|
|
cmp programmable_keys_codes, x
|
|
beq !+
|
|
dex
|
|
bpl !-
|
|
|
|
// This is not a programmable key
|
|
|
|
sec
|
|
rts
|
|
!:
|
|
// .X contains index of the key code, we need offset to key string instead
|
|
|
|
lda programmable_keys_offsets, x
|
|
tax
|
|
|
|
// Print all the characters assigned to key
|
|
!:
|
|
lda programmable_keys_strings, x
|
|
beq !+
|
|
jsr CHROUT // our implementation preserves .X too
|
|
inx
|
|
bne !- // jumps always
|
|
!:
|
|
clc
|
|
rts
|
|
|
|
#endif // CONFIG_PROGRAMMABLE_KEYS
|