From 3a7336913d313bf2ec126f56b2d7c161cd0f4e30 Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 30 Nov 2020 22:30:12 +0000 Subject: [PATCH] Add some keyboard controller behaviour on Intel Advanced/EV and ZP that fixes SMI hangs on Windows 95 OSR2. --- src/keyboard_at.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/keyboard_at.c b/src/keyboard_at.c index f86cb21..44cb3ec 100644 --- a/src/keyboard_at.c +++ b/src/keyboard_at.c @@ -590,6 +590,11 @@ void keyboard_at_write(uint16_t port, uint8_t val, void *priv) keyboard_at.want60 = 1; break; + case 0xba: + if (romset == ROM_ENDEAVOR || romset == ROM_ZAPPA) + keyboard_at_adddata(0); + break; + /* T3100e commands not implemented: * 0xB7: Emulate PS/2 keyboard * 0xB8: Emulate AT keyboard */ @@ -620,7 +625,11 @@ void keyboard_at_write(uint16_t port, uint8_t val, void *priv) if (romset == ROM_T3100E) keyboard_at.input_port = (t3100e_mono_get() & 1) ? 0xFF : 0xBF; - keyboard_at_adddata(keyboard_at.input_port | 4); + if (romset == ROM_ENDEAVOR || romset == ROM_ZAPPA) + keyboard_at_adddata(keyboard_at.input_port | 4 | 0x40); + else + keyboard_at_adddata(keyboard_at.input_port | 4); + keyboard_at.input_port = ((keyboard_at.input_port + 1) & 3) | (keyboard_at.input_port & 0xfc); break;