function keys, RUN and HELP are now programmable at compile time
This commit is contained in:
1 parent
15362c29b4
commit
d0ac49b2b6
22 files changed
+320
-22
No files matched your search
@@ -3,6 +3,9 @@
|
||||
// Messages to be prined out by Kernal
|
||||
//
|
||||
|
||||
.encoding "petscii_upper"
|
||||
|
||||
|
||||
// Double underscore prevents labels from being passed to VICE (would confuse monitor)
|
||||
|
||||
.label __MSG_KERNAL_SEARCHING_FOR = __msg_kernalsearching_for - __msg_kernal_first
|
||||
|
||||
+38
-5
@@ -91,10 +91,10 @@ read_from_keyboard:
|
||||
cmp #$0D
|
||||
bne not_enter
|
||||
|
||||
chrin_enter:
|
||||
|
||||
jsr cursor_disable
|
||||
|
||||
jsr pop_keyboard_buffer
|
||||
|
||||
jsr cursor_hide_if_visible
|
||||
|
||||
// It was enter.
|
||||
@@ -140,12 +140,45 @@ empty_line:
|
||||
|
||||
not_enter:
|
||||
|
||||
// Print character
|
||||
lda KEYD
|
||||
// XXX add support for SHIFT + RUN/STOP ($84) and function keys (should be configurable)
|
||||
jsr CHROUT
|
||||
|
||||
#if CONFIG_PROGRAMMABLE_KEYS
|
||||
|
||||
ldx #(__programmable_keys_codes_end - programmable_keys_codes - 1)
|
||||
|
||||
chrin_programmable_loop:
|
||||
|
||||
cmp programmable_keys_codes, x
|
||||
beq chrin_programmable_key
|
||||
dex
|
||||
bpl chrin_programmable_loop
|
||||
|
||||
// FALLTROUGH
|
||||
|
||||
#endif // CONFIG_PROGRAMMABLE_KEYS
|
||||
|
||||
chrin_print_character:
|
||||
|
||||
jsr CHROUT
|
||||
jsr pop_keyboard_buffer
|
||||
|
||||
// Keep looking for input from keyboard until carriage return
|
||||
jmp chrin_repeat
|
||||
|
||||
#if CONFIG_PROGRAMMABLE_KEYS
|
||||
|
||||
chrin_programmable_key:
|
||||
|
||||
// .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 chrin_enter
|
||||
jsr CHROUT // our implementation preserves .X too
|
||||
inx
|
||||
bne !- // jumps always
|
||||
|
||||
#endif // CONFIG_PROGRAMMABLE_KEYS
|
||||
@@ -6,6 +6,7 @@
|
||||
// - [CM64] Compute's Mapping the Commodore 64 - page 228
|
||||
//
|
||||
// CPU registers that has to be preserved (see [RG64]): .Y
|
||||
// Additionally we have to preserve .X for out CHRIN implementation
|
||||
//
|
||||
|
||||
CHROUT:
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
|
||||
//
|
||||
// Command string definitions for programmable keys
|
||||
//
|
||||
|
||||
|
||||
#if CONFIG_PROGRAMMABLE_KEYS
|
||||
|
||||
|
||||
.macro PROGRAMMABLE_KEY_CODE(STR, CODE)
|
||||
{
|
||||
.if (STR.size() > 0)
|
||||
{
|
||||
.byte CODE
|
||||
}
|
||||
}
|
||||
|
||||
.macro PROGRAMMABLE_KEY_STRING(STR)
|
||||
{
|
||||
.if (STR.size() > 0)
|
||||
{
|
||||
.text STR
|
||||
.byte $00
|
||||
}
|
||||
}
|
||||
|
||||
.macro PROGRAMMABLE_KEY_OFFSET(STR, LABEL)
|
||||
{
|
||||
.if (STR.size() > 0)
|
||||
{
|
||||
.byte LABEL - programmable_keys_strings
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
programmable_keys_codes:
|
||||
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_RUN, KEY_RUN)
|
||||
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F1, KEY_F1)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F2, KEY_F2)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F3, KEY_F3)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F4, KEY_F4)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F5, KEY_F5)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F6, KEY_F6)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F7, KEY_F7)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F8, KEY_F8)
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && (CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_HELP, KEY_HELP)
|
||||
#endif
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && CONFIG_KEYBOARD_C65
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F9, KEY_F9)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F10, KEY_F10)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F11, KEY_F11)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F12, KEY_F12)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F13, KEY_F13)
|
||||
PROGRAMMABLE_KEY_CODE(CONFIG_KEYCMD_F14, KEY_F14)
|
||||
#endif
|
||||
|
||||
__programmable_keys_codes_end:
|
||||
|
||||
|
||||
programmable_keys_strings:
|
||||
|
||||
__str_offset_RUN: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_RUN)
|
||||
|
||||
__str_offset_F1: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F1)
|
||||
__str_offset_F2: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F2)
|
||||
__str_offset_F3: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F3)
|
||||
__str_offset_F4: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F4)
|
||||
__str_offset_F5: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F5)
|
||||
__str_offset_F6: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F6)
|
||||
__str_offset_F7: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F7)
|
||||
__str_offset_F8: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F8)
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && (CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65)
|
||||
__str_offset_HELP: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_HELP)
|
||||
#endif
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && CONFIG_KEYBOARD_C65
|
||||
__str_offset_F9: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F9)
|
||||
__str_offset_F10: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F10)
|
||||
__str_offset_F11: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F11)
|
||||
__str_offset_F12: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F12)
|
||||
__str_offset_F13: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F13)
|
||||
__str_offset_F14: PROGRAMMABLE_KEY_STRING(CONFIG_KEYCMD_F14)
|
||||
#endif
|
||||
|
||||
__programmable_keys_strings_end:
|
||||
{
|
||||
.var offset = __programmable_keys_strings_end - programmable_keys_strings
|
||||
.if (offset >= 255) .error "Programmable keys took too much space"
|
||||
}
|
||||
|
||||
|
||||
programmable_keys_offsets:
|
||||
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_RUN, __str_offset_RUN)
|
||||
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F1, __str_offset_F1)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F2, __str_offset_F2)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F3, __str_offset_F3)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F4, __str_offset_F4)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F5, __str_offset_F5)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F6, __str_offset_F6)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F7, __str_offset_F7)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F8, __str_offset_F8)
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && (CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_HELP, __str_offset_HELP)
|
||||
#endif
|
||||
|
||||
#if !CONFIG_LEGACY_SCNKEY && CONFIG_KEYBOARD_C65
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F9, __str_offset_F9)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F10, __str_offset_F10)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F11, __str_offset_F11)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F12, __str_offset_F12)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F13, __str_offset_F13)
|
||||
PROGRAMMABLE_KEY_OFFSET(CONFIG_KEYCMD_F14, __str_offset_F14)
|
||||
#endif
|
||||
|
||||
|
||||
#endif // CONFIG_PROGRAMMABLE_KEYS
|
||||
Reference in new issue
Block a user