From de3379a19f1df64e458fbf72e7e180fcf0f1c15e Mon Sep 17 00:00:00 2001 From: SarahW Date: Wed, 18 Apr 2018 20:59:01 +0100 Subject: [PATCH] Tweaked XT keyboard code a bit. Fixes Keyboard Error reported by AMI XT clone. --- src/keyboard_xt.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/keyboard_xt.c b/src/keyboard_xt.c index aaabda0..a36e707 100644 --- a/src/keyboard_xt.c +++ b/src/keyboard_xt.c @@ -1,5 +1,6 @@ #include "ibm.h" #include "device.h" +#include "fdd.h" #include "io.h" #include "mem.h" #include "pic.h" @@ -31,6 +32,8 @@ struct uint8_t pa; uint8_t pb; + int shift_full; + int tandy; int pb2_turbo; } keyboard_xt; @@ -41,14 +44,17 @@ static int key_queue_start = 0, key_queue_end = 0; void keyboard_xt_poll() { keybsenddelay += (1000 * TIMER_USEC); + if (!(keyboard_xt.pb & 0x40) && romset != ROM_TANDY) + return; if (keyboard_xt.wantirq) { keyboard_xt.wantirq = 0; keyboard_xt.pa = keyboard_xt.key_waiting; + keyboard_xt.shift_full = 1; picint(2); pclog("keyboard_xt : take IRQ\n"); } - if (key_queue_start != key_queue_end && !keyboard_xt.pa) + if (key_queue_start != key_queue_end && !keyboard_xt.shift_full) { keyboard_xt.key_waiting = key_queue[key_queue_start]; pclog("Reading %02X from the key queue at %i\n", keyboard_xt.key_waiting, key_queue_start); @@ -109,6 +115,9 @@ void keyboard_xt_write(uint16_t port, uint8_t val, void *priv) if (!(keyboard_xt.pb & 0x40) && (val & 0x40)) /*Reset keyboard*/ { pclog("keyboard_xt : reset keyboard\n"); + key_queue_start = key_queue_end = 0; + keyboard_xt.wantirq = 0; + keyboard_xt.shift_full = 0; keyboard_xt_adddata(0xaa); } keyboard_xt.pb = val; @@ -130,6 +139,7 @@ void keyboard_xt_write(uint16_t port, uint8_t val, void *priv) if (val & 0x80) { keyboard_xt.pa = 0; + keyboard_xt.shift_full = 0; picintc(2); } break; @@ -159,16 +169,6 @@ uint8_t keyboard_xt_read(uint16_t port, void *priv) else { temp = keyboard_xt.pa; - if (key_queue_start == key_queue_end) - { - keyboard_xt.wantirq = 0; - } - else - { - keyboard_xt.key_waiting = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0xf; - keyboard_xt.wantirq = 1; - } } break;