Simplifying keycode handling
authorAndreas Eversberg <jolly@eversberg.eu>
Sat, 21 Apr 2018 13:38:42 +0000 (15:38 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Sun, 22 Apr 2018 10:04:07 +0000 (12:04 +0200)
Makefile.am
configure.ac
include/Makefile.am [new file with mode: 0644]
include/keycodes.h [new file with mode: 0644]
src/libframerate/framerate.c
src/libkeyboard/keyboard.c
src/libkeyboard/keyboard.h
src/libsdl/sdl.c
src/libsdl/sdl.h
src/mercenary/main.c

index 4c3e7c3..a7f85df 100644 (file)
@@ -1,4 +1,4 @@
 AUTOMAKE_OPTIONS = foreign
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = src
+SUBDIRS = src include
 
index 8ff6fd4..ba0a746 100644 (file)
@@ -71,6 +71,7 @@ NOTE: This package is mandatory. The games will not compile without it!
 AS_IF([test "x$with_ovr" == "xyes"],[AC_MSG_NOTICE( Compiling with OVR support )], [AC_MSG_NOTICE( [OVR not supported.] )])
 
 AC_OUTPUT(
+    include/Makefile
     src/libcpu/Makefile
     src/libframerate/Makefile
     src/libvideo/Makefile
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644 (file)
index 0000000..57171f6
--- /dev/null
@@ -0,0 +1 @@
+noinst_HEADERS = keycodes.h
diff --git a/include/keycodes.h b/include/keycodes.h
new file mode 100644 (file)
index 0000000..61ba4d9
--- /dev/null
@@ -0,0 +1,109 @@
+
+/* These codes are a mixture of what PC and Amiga keyboard provides,
+ * none of them support all keys.
+ */
+enum keycode {
+       KEYCODE_UNDEFINED = 0,
+       KEYCODE_LCTRL,
+       KEYCODE_RCTRL,
+       KEYCODE_LSHIFT,
+       KEYCODE_RSHIFT,
+       KEYCODE_LALT,
+       KEYCODE_RALT,
+       KEYCODE_LAMIGA,
+       KEYCODE_RAMIGA,
+       KEYCODE_CAPSLOCK,
+       KEYCODE_HELP,
+       KEYCODE_PAUSE,
+       KEYCODE_LEFT,
+       KEYCODE_RIGHT,
+       KEYCODE_UP,
+       KEYCODE_DOWN,
+       KEYCODE_END,
+       KEYCODE_a,
+       KEYCODE_b,
+       KEYCODE_c,
+       KEYCODE_d,
+       KEYCODE_e,
+       KEYCODE_f,
+       KEYCODE_g,
+       KEYCODE_h,
+       KEYCODE_i,
+       KEYCODE_j,
+       KEYCODE_k,
+       KEYCODE_l,
+       KEYCODE_m,
+       KEYCODE_n,
+       KEYCODE_o,
+       KEYCODE_p,
+       KEYCODE_q,
+       KEYCODE_r,
+       KEYCODE_s,
+       KEYCODE_t,
+       KEYCODE_u,
+       KEYCODE_v,
+       KEYCODE_w,
+       KEYCODE_x,
+       KEYCODE_y,
+       KEYCODE_z,
+       KEYCODE_0,
+       KEYCODE_1,
+       KEYCODE_2,
+       KEYCODE_3,
+       KEYCODE_4,
+       KEYCODE_5,
+       KEYCODE_6,
+       KEYCODE_7,
+       KEYCODE_8,
+       KEYCODE_9,
+       KEYCODE_KP_0,
+       KEYCODE_KP_1,
+       KEYCODE_KP_2,
+       KEYCODE_KP_3,
+       KEYCODE_KP_4,
+       KEYCODE_KP_5,
+       KEYCODE_KP_6,
+       KEYCODE_KP_7,
+       KEYCODE_KP_8,
+       KEYCODE_KP_9,
+       KEYCODE_KP_DIVIDE,
+       KEYCODE_KP_MULTIPLY,
+       KEYCODE_KP_MINUS,
+       KEYCODE_KP_PLUS,
+       KEYCODE_KP_PERIOD,
+       KEYCODE_KP_ENTER,
+       KEYCODE_KP_LPAREN,
+       KEYCODE_KP_RPAREN,
+       KEYCODE_F1,
+       KEYCODE_F2,
+       KEYCODE_F3,
+       KEYCODE_F4,
+       KEYCODE_F5,
+       KEYCODE_F6,
+       KEYCODE_F7,
+       KEYCODE_F8,
+       KEYCODE_F9,
+       KEYCODE_F10,
+       KEYCODE_SPACE,
+       KEYCODE_BACKSPACE,
+       KEYCODE_TAB,
+       KEYCODE_RETURN,
+       KEYCODE_ESCAPE,
+       KEYCODE_DELETE,
+       KEYCODE_INSERT,
+       KEYCODE_COMMA,
+       KEYCODE_PERIOD,
+
+       KEYCODE_LBRACKET,
+       KEYCODE_RBRACKET,
+       KEYCODE_SEMICOLON,
+       KEYCODE_SLASH,
+       KEYCODE_BACKSLASH,
+       KEYCODE_QUOTE,
+       KEYCODE_NUMBERSIGN,
+       KEYCODE_LTGT,
+       KEYCODE_BACKQUOTE,
+       KEYCODE_MINUS,
+       KEYCODE_EQUAL,
+};
+
index 8a79cbf..fc948bf 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <string.h>
+#include "../../include/keycodes.h"
 #include "../libsdl/sdl.h"
 #include "framerate.h"
 
index f6d5cce..62d465b 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <string.h>
+#include "../../include/keycodes.h"
 #include "../libsdl/print.h"
 #include "keyboard.h"
 
 
 /* stolen from UAE */
 static struct keycodes {
-       const char *key;
+       enum keycode key;
        uint8_t code;
 } keycodes[] = {
-       { "A", 0x20 }, { "B", 0x35 }, { "C", 0x33 }, { "D", 0x22 },
-       { "E", 0x12 }, { "F", 0x23 }, { "G", 0x24 }, { "H", 0x25 },
-       { "I", 0x17 }, { "J", 0x26 }, { "K", 0x27 }, { "L", 0x28 },
-       { "M", 0x37 }, { "N", 0x36 }, { "O", 0x18 }, { "P", 0x19 },
-       { "Q", 0x10 }, { "R", 0x13 }, { "S", 0x21 }, { "T", 0x14 },
-       { "U", 0x16 }, { "V", 0x34 }, { "W", 0x11 }, { "X", 0x32 },
-       { "Y", 0x15 }, { "Z", 0x31 },
-
-       { "0", 0x0A }, { "1", 0x01 }, { "2", 0x02 }, { "3", 0x03 },
-       { "4", 0x04 }, { "5", 0x05 }, { "6", 0x06 }, { "7", 0x07 },
-       { "8", 0x08 }, { "9", 0x09 },
-
-       { "NP0", 0x0F }, { "NP1", 0x1D }, { "NP2", 0x1E }, { "NP3", 0x1F },
-       { "NP4", 0x2D }, { "NP5", 0x2E }, { "NP6", 0x2F }, { "NP7", 0x3D },
-       { "NP8", 0x3E }, { "NP9", 0x3F },
-
-       { "NPDIV", 0x5C }, { "NPMUL", 0x5D }, { "NPSUB", 0x4A },
-       { "NPADD", 0x5E }, { "NPDEL", 0x3C }, { "NPLPAREN", 0x5A },
-       { "NPRPAREN", 0x5B },
-
-       { "F1", 0x50 }, { "F2", 0x51 }, { "F3", 0x52 }, { "F4", 0x53 },
-       { "F5", 0x54 }, { "F6", 0x55 }, { "F7", 0x56 }, { "F8", 0x57 },
-       { "F9", 0x58 }, { "F10", 0x59 },
-
-       { "UP", 0x4C }, { "DN", 0x4D }, { "LF", 0x4F }, { "RT", 0x4E },
-
-       { "SPC", 0x40 }, { "BS", 0x41 }, { "TAB", 0x42 }, { "ENT", 0x43 },
-       { "RET", 0x44 }, { "ESC", 0x45 }, { "DEL", 0x46 },
-
-       { "LSH", 0x60 }, { "RSH", 0x61 }, { "CAPSLOCK", 0x62 },
-       { "CTRL", 0x63 }, { "LALT", 0x64 }, { "RALT", 0x65 }, { "LAMI", 0x66 },
-       { "RAMI", 0x67 }, { "HELP", 0x5F },
-
-       { "LBRACKET", 0x1A }, { "RBRACKET", 0x1B }, { "SEMICOLON", 0x29 },
-       { "COMMA", 0x38 }, { "PERIOD", 0x39 }, { "SLASH", 0x3A },
-       { "BACKSLASH", 0x0D }, { "QUOTE", 0x2A }, { "NUMBERSIGN", 0x2B },
-       { "LTGT", 0x30 }, { "BACKQUOTE", 0x00 }, { "MINUS", 0x0B },
-       { "EQUAL", 0x0C },
-
-       { NULL, 0 },
+       { KEYCODE_a, 0x20 },
+       { KEYCODE_b, 0x35 },
+       { KEYCODE_c, 0x33 },
+       { KEYCODE_d, 0x22 },
+       { KEYCODE_e, 0x12 },
+       { KEYCODE_f, 0x23 },
+       { KEYCODE_g, 0x24 },
+       { KEYCODE_h, 0x25 },
+       { KEYCODE_i, 0x17 },
+       { KEYCODE_j, 0x26 },
+       { KEYCODE_k, 0x27 },
+       { KEYCODE_l, 0x28 },
+       { KEYCODE_m, 0x37 },
+       { KEYCODE_n, 0x36 },
+       { KEYCODE_o, 0x18 },
+       { KEYCODE_p, 0x19 },
+       { KEYCODE_q, 0x10 },
+       { KEYCODE_r, 0x13 },
+       { KEYCODE_s, 0x21 },
+       { KEYCODE_t, 0x14 },
+       { KEYCODE_u, 0x16 },
+       { KEYCODE_v, 0x34 },
+       { KEYCODE_w, 0x11 },
+       { KEYCODE_x, 0x32 },
+       { KEYCODE_y, 0x15 },
+       { KEYCODE_z, 0x31 },
+
+       { KEYCODE_0, 0x0A },
+       { KEYCODE_1, 0x01 },
+       { KEYCODE_2, 0x02 },
+       { KEYCODE_3, 0x03 },
+       { KEYCODE_4, 0x04 },
+       { KEYCODE_5, 0x05 },
+       { KEYCODE_6, 0x06 },
+       { KEYCODE_7, 0x07 },
+       { KEYCODE_8, 0x08 },
+       { KEYCODE_9, 0x09 },
+
+       { KEYCODE_KP_0, 0x0F },
+       { KEYCODE_KP_1, 0x1D },
+       { KEYCODE_KP_2, 0x1E },
+       { KEYCODE_KP_3, 0x1F },
+       { KEYCODE_KP_4, 0x2D },
+       { KEYCODE_KP_5, 0x2E },
+       { KEYCODE_KP_6, 0x2F },
+       { KEYCODE_KP_7, 0x3D },
+       { KEYCODE_KP_8, 0x3E },
+       { KEYCODE_KP_9, 0x3F },
+
+       { KEYCODE_KP_DIVIDE, 0x5C },
+       { KEYCODE_KP_MULTIPLY, 0x5D },
+       { KEYCODE_KP_MINUS, 0x4A },
+       { KEYCODE_KP_PLUS, 0x5E },
+       { KEYCODE_KP_PERIOD, 0x3C },
+       { KEYCODE_KP_ENTER, 0x43 },
+       { KEYCODE_KP_LPAREN, 0x5A },
+       { KEYCODE_KP_RPAREN, 0x5B },
+
+       { KEYCODE_F1, 0x50 },
+       { KEYCODE_F2, 0x51 },
+       { KEYCODE_F3, 0x52 },
+       { KEYCODE_F4, 0x53 },
+       { KEYCODE_F5, 0x54 },
+       { KEYCODE_F6, 0x55 },
+       { KEYCODE_F7, 0x56 },
+       { KEYCODE_F8, 0x57 },
+       { KEYCODE_F9, 0x58 },
+       { KEYCODE_F10, 0x59 },
+
+       { KEYCODE_UP, 0x4C },
+       { KEYCODE_DOWN, 0x4D },
+       { KEYCODE_LEFT, 0x4F },
+       { KEYCODE_RIGHT, 0x4E },
+
+       { KEYCODE_SPACE, 0x40 },
+       { KEYCODE_BACKSPACE, 0x41 },
+       { KEYCODE_TAB, 0x42 },
+       { KEYCODE_RETURN, 0x44 },
+       { KEYCODE_ESCAPE, 0x45 },
+       { KEYCODE_DELETE, 0x46 },
+
+       { KEYCODE_LSHIFT, 0x60 },
+       { KEYCODE_RSHIFT, 0x61 },
+       { KEYCODE_CAPSLOCK, 0x62 },
+       { KEYCODE_LCTRL, 0x63 },
+       { KEYCODE_RCTRL, 0x63 },
+       { KEYCODE_LALT, 0x64 },
+       { KEYCODE_RALT, 0x65 },
+       { KEYCODE_LAMIGA, 0x66 },
+       { KEYCODE_RAMIGA, 0x67 },
+       { KEYCODE_HELP, 0x5F },
+
+       { KEYCODE_LBRACKET, 0x1A },
+       { KEYCODE_RBRACKET, 0x1B },
+       { KEYCODE_SEMICOLON, 0x29 },
+       { KEYCODE_COMMA, 0x38 },
+       { KEYCODE_PERIOD, 0x39 },
+       { KEYCODE_SLASH, 0x3A },
+       { KEYCODE_BACKSLASH, 0x0D },
+       { KEYCODE_QUOTE, 0x2A },
+       { KEYCODE_NUMBERSIGN, 0x2B },
+       { KEYCODE_LTGT, 0x30 },
+       { KEYCODE_BACKQUOTE, 0x00 },
+       { KEYCODE_MINUS, 0x0B },
+       { KEYCODE_EQUAL, 0x0C },
+
+       { KEYCODE_UNDEFINED, 0xff },
 };
 
 static uint8_t buffer[16];
@@ -109,19 +177,21 @@ uint16_t emulate_keyboard_read(uint32_t address)
        return 0xffff;
 }
 
-void set_key(const char *key, int down)
+void set_amiga_key(enum keycode key, int down)
 {
        int code = -1, isdown;
        int i;
 
-       for (i = 0; keycodes[i].key; i++) {
-               if (!strcmp(keycodes[i].key, key)) {
+       for (i = 0; keycodes[i].key != KEYCODE_UNDEFINED; i++) {
+               if (keycodes[i].key == key) {
                        code = keycodes[i].code;
                        break;
                }
        }
        if (code < 0 || code >= 0x80) {
-               print_error("Key code '%s' unknown, please fix!\n", key);
+#ifdef DEBUG_KEYS
+               printf("Key code '%d' unknown, please fix!\n", key);
+#endif
                return;
        }
 
index bb4eb3f..46285ba 100644 (file)
@@ -1,4 +1,4 @@
 
 uint16_t emulate_keyboard_read(uint32_t address);
-void set_key(const char *key, int down);
+void set_amiga_key(enum keycode key, int down);
 
index 611f046..0b17c16 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdint.h>
 #include <errno.h>
 #include "print.h"
+#include "../../include/keycodes.h"
 #include "sdl.h"
 #include "opengl.h"
 
@@ -249,6 +250,7 @@ static enum keycode sdl2keycode(SDL_Keycode sym)
        case SDLK_KP_MINUS: return KEYCODE_KP_MINUS;
        case SDLK_KP_PLUS: return KEYCODE_KP_PLUS;
        case SDLK_KP_PERIOD: return KEYCODE_KP_PERIOD;
+       case SDLK_KP_ENTER: return KEYCODE_KP_ENTER;
        case SDLK_F1: return KEYCODE_F1;
        case SDLK_F2: return KEYCODE_F2;
        case SDLK_F3: return KEYCODE_F3;
@@ -262,11 +264,12 @@ static enum keycode sdl2keycode(SDL_Keycode sym)
        case SDLK_SPACE: return KEYCODE_SPACE;
        case SDLK_BACKSPACE: return KEYCODE_BACKSPACE;
        case SDLK_TAB: return KEYCODE_TAB;
-       case SDLK_KP_ENTER: return KEYCODE_KP_ENTER;
        case SDLK_RETURN: return KEYCODE_RETURN;
        case SDLK_ESCAPE: return KEYCODE_ESCAPE;
        case SDLK_DELETE: return KEYCODE_DELETE;
        case SDLK_INSERT: return KEYCODE_INSERT;
+       case SDLK_COMMA: return KEYCODE_COMMA;
+       case SDLK_PERIOD: return KEYCODE_PERIOD;
        default: return KEYCODE_UNDEFINED;
        }
 }
index c37caa7..7307496 100644 (file)
@@ -1,87 +1,4 @@
 
-enum keycode {
-       KEYCODE_UNDEFINED = 0,
-       KEYCODE_LCTRL,
-       KEYCODE_RCTRL,
-       KEYCODE_LSHIFT,
-       KEYCODE_RSHIFT,
-       KEYCODE_PAUSE,
-       KEYCODE_LEFT,
-       KEYCODE_RIGHT,
-       KEYCODE_UP,
-       KEYCODE_DOWN,
-       KEYCODE_END,
-       KEYCODE_a,
-       KEYCODE_b,
-       KEYCODE_c,
-       KEYCODE_d,
-       KEYCODE_e,
-       KEYCODE_f,
-       KEYCODE_g,
-       KEYCODE_h,
-       KEYCODE_i,
-       KEYCODE_j,
-       KEYCODE_k,
-       KEYCODE_l,
-       KEYCODE_m,
-       KEYCODE_n,
-       KEYCODE_o,
-       KEYCODE_p,
-       KEYCODE_q,
-       KEYCODE_r,
-       KEYCODE_s,
-       KEYCODE_t,
-       KEYCODE_u,
-       KEYCODE_v,
-       KEYCODE_w,
-       KEYCODE_x,
-       KEYCODE_y,
-       KEYCODE_z,
-       KEYCODE_0,
-       KEYCODE_1,
-       KEYCODE_2,
-       KEYCODE_3,
-       KEYCODE_4,
-       KEYCODE_5,
-       KEYCODE_6,
-       KEYCODE_7,
-       KEYCODE_8,
-       KEYCODE_9,
-       KEYCODE_KP_0,
-       KEYCODE_KP_1,
-       KEYCODE_KP_2,
-       KEYCODE_KP_3,
-       KEYCODE_KP_4,
-       KEYCODE_KP_5,
-       KEYCODE_KP_6,
-       KEYCODE_KP_7,
-       KEYCODE_KP_8,
-       KEYCODE_KP_9,
-       KEYCODE_KP_DIVIDE,
-       KEYCODE_KP_MULTIPLY,
-       KEYCODE_KP_MINUS,
-       KEYCODE_KP_PLUS,
-       KEYCODE_KP_PERIOD,
-       KEYCODE_F1,
-       KEYCODE_F2,
-       KEYCODE_F3,
-       KEYCODE_F4,
-       KEYCODE_F5,
-       KEYCODE_F6,
-       KEYCODE_F7,
-       KEYCODE_F8,
-       KEYCODE_F9,
-       KEYCODE_F10,
-       KEYCODE_SPACE,
-       KEYCODE_BACKSPACE,
-       KEYCODE_TAB,
-       KEYCODE_KP_ENTER,
-       KEYCODE_RETURN,
-       KEYCODE_ESCAPE,
-       KEYCODE_DELETE,
-       KEYCODE_INSERT,
-};
-
 int init_sdl(const char *progname, int width, int height, int sound_samplerate, int sound_chunk, void (*keyboard)(int down, enum keycode keycode), void (*audio)(float *data, int len), void (*resize_window)(int width, int height), int multisampling, int vbl_sync, int rift);
 int event_sdl(void);
 void swap_sdl(void);
index 2b4a8a0..bbba112 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include "../../include/keycodes.h"
 #include "../libsdl/sdl.h"
 #ifdef HAVE_OVR
 #include "../libovr/ovr.h"
@@ -768,135 +769,63 @@ static void keyboard_sdl(int down, enum keycode keycode)
        if (keycode == KEYCODE_PAUSE && down)
                help_view ^= 1;
 
-       /* in help view we don't need to forward keypresses */
+       /* in help view we must not forward keypresses */
        if (help_view)
                return;
 
        switch (keycode) {
        case KEYCODE_LSHIFT:
-               set_key("LSH", down);
+               set_amiga_key(keycode, down);
                shift = down;
                break;
        case KEYCODE_RSHIFT:
-               set_key("RSH", down);
+               set_amiga_key(keycode, down);
                shift = down;
                break;
        case KEYCODE_LEFT:
                if (shift && down) {
-                       set_key("LF", down);
+                       set_amiga_key(keycode, down);
                        set_joystick(-1, -1, -1, -1, -1);
                        break;
                }
-               set_key("LF", 0);
+               set_amiga_key(keycode, 0);
                set_joystick(down, -1, -1, -1, -1);
                break;
        case KEYCODE_RIGHT:
                if (shift && down) {
-                       set_key("RT", down);
+                       set_amiga_key(keycode, down);
                        set_joystick(-1, -1, -1, -1, -1);
                        break;
                }
-               set_key("RT", 0);
+               set_amiga_key(keycode, 0);
                set_joystick(-1, down, -1, -1, -1);
                break;
        case KEYCODE_UP:
                if (shift && down) {
-                       set_key("UP", down);
+                       set_amiga_key(keycode, down);
                        set_joystick(-1, -1, -1, -1, -1);
                        break;
                }
-               set_key("UP", 0);
+               set_amiga_key(keycode, 0);
                set_joystick(-1, -1, down, -1, -1);
                break;
        case KEYCODE_DOWN:
                if (shift && down) {
-                       set_key("DN", down);
+                       set_amiga_key(keycode, down);
                        set_joystick(-1, -1, -1, -1, -1);
                        break;
                }
-               set_key("DN", 0);
+               set_amiga_key(keycode, 0);
                set_joystick(-1, -1, -1, down, -1);
                break;
        case KEYCODE_END:
                set_joystick(-1, -1, -1, -1, down);
                break;
-
-       case KEYCODE_a: set_key("A", down); break;
-       case KEYCODE_b: set_key("B", down); break;
-       case KEYCODE_c: set_key("C", down); break;
-       case KEYCODE_d: set_key("D", down); break;
-       case KEYCODE_e: set_key("E", down); break;
-       case KEYCODE_f: set_key("F", down); break;
-       case KEYCODE_g: set_key("G", down); break;
-       case KEYCODE_h: set_key("H", down); break;
-       case KEYCODE_i: set_key("I", down); break;
-       case KEYCODE_j: set_key("J", down); break;
-       case KEYCODE_k: set_key("K", down); break;
-       case KEYCODE_l: set_key("L", down); break;
-       case KEYCODE_m: set_key("M", down); break;
-       case KEYCODE_n: set_key("N", down); break;
-       case KEYCODE_o: set_key("O", down); break;
-       case KEYCODE_p: set_key("P", down); break;
-       case KEYCODE_q: set_key("Q", down); break;
-       case KEYCODE_r: set_key("R", down); break;
-       case KEYCODE_s: set_key("S", down); break;
-       case KEYCODE_t: set_key("T", down); break;
-       case KEYCODE_u: set_key("U", down); break;
-       case KEYCODE_v: set_key("V", down); break;
-       case KEYCODE_w: set_key("W", down); break;
-       case KEYCODE_x: set_key("X", down); break;
-       case KEYCODE_y: set_key("Y", down); break;
-       case KEYCODE_z: set_key("Z", down); break;
-
-       case KEYCODE_0: set_key("0", down); break;
-       case KEYCODE_1: set_key("1", down); break;
-       case KEYCODE_2: set_key("2", down); break;
-       case KEYCODE_3: set_key("3", down); break;
-       case KEYCODE_4: set_key("4", down); break;
-       case KEYCODE_5: set_key("5", down); break;
-       case KEYCODE_6: set_key("6", down); break;
-       case KEYCODE_7: set_key("7", down); break;
-       case KEYCODE_8: set_key("8", down); break;
-       case KEYCODE_9: set_key("9", down); break;
-
-       case KEYCODE_KP_0: set_key("NP0", down); break;
-       case KEYCODE_KP_1: set_key("NP1", down); break;
-       case KEYCODE_KP_2: set_key("NP2", down); break;
-       case KEYCODE_KP_3: set_key("NP3", down); break;
-       case KEYCODE_KP_4: set_key("NP4", down); break;
-       case KEYCODE_KP_5: set_key("NP5", down); break;
-       case KEYCODE_KP_6: set_key("NP6", down); break;
-       case KEYCODE_KP_7: set_key("NP7", down); break;
-       case KEYCODE_KP_8: set_key("NP8", down); break;
-       case KEYCODE_KP_9: set_key("NP9", down); break;
-       case KEYCODE_KP_DIVIDE: set_key("NPDIV", down); break;
-       case KEYCODE_KP_MULTIPLY: set_key("NPMUL", down); break;
-       case KEYCODE_KP_MINUS: set_key("NPSUB", down); break;
-       case KEYCODE_KP_PLUS: set_key("NPADD", down); break;
-       case KEYCODE_KP_PERIOD: set_key("NPDEL", down); break;
-       // NPLPAREN and NPRPAREN are not emulated
-
-       case KEYCODE_F1: set_key("F1", down); break;
-       case KEYCODE_F2: set_key("F2", down); break;
-       case KEYCODE_F3: set_key("F3", down); break;
-       case KEYCODE_F4: set_key("F4", down); break;
-       case KEYCODE_F5: set_key("F5", down); break;
-       case KEYCODE_F6: set_key("F6", down); break;
-       case KEYCODE_F7: set_key("F7", down); break;
-       case KEYCODE_F8: set_key("F8", down); break;
-       case KEYCODE_F9: set_key("F9", down); break;
-       case KEYCODE_F10: set_key("F10", down); break;
-
-       case KEYCODE_SPACE: set_key("SPC", down); break;
-       case KEYCODE_BACKSPACE: set_key("BS", down); break;
-       case KEYCODE_TAB: set_key("TAB", down); break;
-       case KEYCODE_KP_ENTER: set_key("ENT", down); break;
-       case KEYCODE_RETURN: set_key("RET", down); break;
-       case KEYCODE_ESCAPE: set_key("ESC", down); break;
-       case KEYCODE_DELETE: set_key("DEL", down); break;
-       case KEYCODE_INSERT: set_key("HELP", down); break;
-
-       default: break;
+       case KEYCODE_INSERT:
+               set_amiga_key(KEYCODE_HELP, down);
+               break;
+       default:
+               set_amiga_key(keycode, down);
        }
 }