Fixing amiga keyboad emulation
authorAndreas Eversberg <jolly@eversberg.eu>
Sun, 22 Apr 2018 04:28:22 +0000 (06:28 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Sun, 22 Apr 2018 10:04:07 +0000 (12:04 +0200)
 - Debug info
 - Correctly de-queue key code

src/libkeyboard/keyboard.c

index 62d465b..630cf30 100644 (file)
@@ -163,12 +163,14 @@ uint16_t emulate_keyboard_read(uint32_t address)
        case CIAASDR:
                if (buffer_len == 0)
                        return 0xffff;
-               value = buffer[--buffer_len];
-               /* rotate and negate */
-               value = ~ROL(value);
+               value = buffer[0];
 #ifdef DEBUG_KEYS
-               printf("sending key code %02x\n", buffer[buffer_len]);
+               printf("sending amiga code 0x%02x\n", value);
 #endif
+               /* rotate and negate */
+               value = ~ROL(value);
+               /* remove first entry from buffer */
+               buffer_len--;
                for (i = 0; i < buffer_len; i++)
                        buffer[i] = buffer[i + 1];
                return 0xff00 | value;
@@ -177,6 +179,10 @@ uint16_t emulate_keyboard_read(uint32_t address)
        return 0xffff;
 }
 
+/* schedule given key to queue,
+ * down == 0: up
+ * down == 1: down
+ */
 void set_amiga_key(enum keycode key, int down)
 {
        int code = -1, isdown;
@@ -190,7 +196,7 @@ void set_amiga_key(enum keycode key, int down)
        }
        if (code < 0 || code >= 0x80) {
 #ifdef DEBUG_KEYS
-               printf("Key code '%d' unknown, please fix!\n", key);
+               printf("Key code '%d' unknown, ignoring!\n", key);
 #endif
                return;
        }
@@ -212,13 +218,13 @@ void set_amiga_key(enum keycode key, int down)
        }
 
        if (buffer_len == buffer_size) {
-               print_error("keyboard buffer overflow\n");
+               print_info("keyboard buffer overflow\n");
                return;
        }
 
        buffer[buffer_len++] = code;
 #ifdef DEBUG_KEYS
-       printf("Converting key '%s' to code 0x%02x\n", key, code);
+       printf("Converting keycode %d to amiga code 0x%02x\n", key, code);
 #endif
 }