From 49b50676194adfab9eff8b7b94dd20a174ff0f74 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Fri, 4 Feb 2022 17:40:04 +0100 Subject: [PATCH] Add keyboard scan code enum --- include/c64/keyboard.c | 6 ++- include/c64/keyboard.h | 88 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 85 insertions(+), 9 deletions(-) diff --git a/include/c64/keyboard.c b/include/c64/keyboard.c index 055e0af..72e8349 100644 --- a/include/c64/keyboard.c +++ b/include/c64/keyboard.c @@ -23,10 +23,12 @@ const char keyb_codes[128] = { }; -byte keyb_matrix[8], keyb_key; +byte keyb_matrix[8]; + +KeyScanCode keyb_key; static byte keyb_pmatrix[8]; -bool key_pressed(char code) +bool key_pressed(KeyScanCode code) { return !(keyb_matrix[code >> 3] & (1 << (code & 7))); } diff --git a/include/c64/keyboard.h b/include/c64/keyboard.h index d0ae0b5..70ef6b0 100644 --- a/include/c64/keyboard.h +++ b/include/c64/keyboard.h @@ -23,10 +23,83 @@ #define KEY_F6 (139) #define KEY_F8 (140) -#define KEY_CODE_CSR_RIGHT (2) -#define KEY_CODE_CSR_DOWN (7) -#define KEY_CODE_LSHIFT (15) -#define KEY_CODE_RSHIFT (48) +enum KeyScanCode +{ + KSCAN_DEL, + KSCAN_RETURN, + KSCAN_CSR_RIGHT, + KSCAN_F7, + KSCAN_F1, + KSCAN_F3, + KSCAN_F5, + KSCAN_CSR_DOWN, + + KSCAN_3, + KSCAN_W, + KSCAN_A, + KSCAN_4, + KSCAN_Z, + KSCAN_S, + KSCAN_E, + KSCAN_SHIFT_LOCK, + + KSCAN_5, + KSCAN_R, + KSCAN_D, + KSCAN_6, + KSCAN_C, + KSCAN_F, + KSCAN_T, + KSCAN_X, + + KSCAN_7, + KSCAN_Y, + KSCAN_G, + KSCAN_8, + KSCAN_B, + KSCAN_H, + KSCAN_U, + KSCAN_V, + + KSCAN_9, + KSCAN_I, + KSCAN_J, + KSCAN_0, + KSCAN_M, + KSCAN_K, + KSCAN_O, + KSCAN_N, + + KSCAN_PLUS, + KSCAN_P, + KSCAN_L, + KSCAN_MINUS, + KSCAN_DOT, + KSCAN_COLON, + KSCAN_AT, + KSCAN_COMMA, + + KSCAN_POUND, + KSCAN_STAR, + KSCAN_SEMICOLON, + KSCAN_HOME, + KSCAN_RSHIFT, + KSCAN_EQUAL, + KSCAN_ARROW_UP, + KSCAN_SLASH, + + KSCAN_1, + KSCAN_ARROW_LEFT, + KSCAN_CONTROL, + KSCAN_2, + KSCAN_SPACE, + KSCAN_COMMODORE, + KSCAN_Q, + KSCAN_STOP, + + KSCAN_QUAL_SHIFT = 0x40, + KSCAN_QUAL_DOWN = 0x80 +}; // map of keyboard codes to PETSCII, first 64 without shift // second 64 with shift @@ -36,14 +109,15 @@ extern const char keyb_codes[128]; // current status of key matrix extern byte keyb_matrix[8]; -// current key -extern byte keyb_key; +// current key in scan code - the top level bit KSCAN_QUAL_DOWN is +// used to indicate a key is pressed, so 0 is no key +extern KeyScanCode keyb_key; // poll keyboard matrix void keyb_poll(void); -inline bool key_pressed(char code); +inline bool key_pressed(KeyScanCode code); inline bool key_shift(void);