From 2e6d392ff83070a71448f784aa84fe46eb901be4 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 21 Jul 2024 04:53:54 +0200 Subject: [PATCH] On ASIC keyboard controllers, output on channel 0 (KBC) now overrides any existing bytes in the output buffer, fixes FIC PT-2000 soft reset problems. --- src/device/kbc_at.c | 8 ++++++++ src/machine/m_at_socket5.c | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/device/kbc_at.c b/src/device/kbc_at.c index dd18649de..8c94685b7 100644 --- a/src/device/kbc_at.c +++ b/src/device/kbc_at.c @@ -422,6 +422,14 @@ kbc_delay_to_ob(atkbc_t *dev, uint8_t val, uint8_t channel, uint8_t stat_hi) dev->stat_hi = stat_hi; dev->pending = 1; dev->state = STATE_KBC_DELAY_OUT; + + if (dev->is_asic && (channel == 0) && (dev->status & STAT_OFULL)) { + /* Expedite the sending to the output buffer to prevent the wrong + data from being accidentally read. */ + kbc_send_to_ob(dev, dev->val, dev->channel, dev->stat_hi); + dev->state = STATE_MAIN_IBF; + dev->pending = 0; + } } static void kbc_at_process_cmd(void *priv); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index ff59ec65f..3629c9d6b 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -345,7 +345,8 @@ machine_at_pt2000_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); + /* Should be VIA, but we do not emulate that yet. */ + device_add(&keyboard_ps2_holtek_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87332_398_device);