function keys, RUN and HELP are now programmable at compile time

This commit is contained in:
FeralChild64 committed 2019-10-27 17:59:53 +01:00
1 parent 15362c29b4
commit d0ac49b2b6
22 files changed
+320 -22

No files matched your search

+3
View File
@@ -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
View File
@@ -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
+1
View File
@@ -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:
+125
View File
@@ -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