summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/8042kbdc.c
diff options
context:
space:
mode:
author Scott Stone <tafoid@users.noreply.github.com>2013-01-05 08:53:11 +0000
committer Scott Stone <tafoid@users.noreply.github.com>2013-01-05 08:53:11 +0000
commit99345a6c276df385d55ef425efdfb25e8f634477 (patch)
tree6ff0b4784a25ab69378b47e4668b47541f81c315 /src/emu/machine/8042kbdc.c
parentf5e3f157b1b821c3662bca71f461cfdd9d031269 (diff)
8042kbdc.c [Peter Ferrie]
- add support for keyboard enable command - add support for keyboard reset command idectrl.c [Peter Ferrie] - correct status flags for multi-sector reads - implement more correct controller reset values - fix phantom slave drive detection problem calchase.c [Peter Ferrie] - corrected memory map to 64kb blocks - corrected access to PAM register - removed execution hack queen.c [Peter Ferrie] - split BIOS region into 64kb blocks - implement missing PAM registers - remove unused PAM regions savquest.c [Peter Ferrie] - split BIOS region into 16kb blocks - implement missing PAM registers - correct slave_ack configuration member declaration
Diffstat (limited to 'src/emu/machine/8042kbdc.c')
-rw-r--r--src/emu/machine/8042kbdc.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/emu/machine/8042kbdc.c b/src/emu/machine/8042kbdc.c
index 92bec5ee273..62989cc28b4 100644
--- a/src/emu/machine/8042kbdc.c
+++ b/src/emu/machine/8042kbdc.c
@@ -364,12 +364,19 @@ READ8_HANDLER(kbdc8042_8_r)
switch (offset) {
case 0:
data = kbdc8042.data;
- if (kbdc8042.type != KBDC8042_AT386 || (data != 0x55))
+ if ((kbdc8042.status_read_mode != 3) || (data != 0xfa))
{
- /* at386 self test doesn't like this */
- at_8042_clear_keyboard_received();
+ if (kbdc8042.type != KBDC8042_AT386 || (data != 0x55))
+ {
+ /* at386 self test doesn't like this */
+ at_8042_clear_keyboard_received();
+ }
+ at_8042_check_keyboard(space.machine());
+ }
+ else
+ {
+ kbdc8042.status_read_mode = 4;
}
- at_8042_check_keyboard(space.machine());
break;
case 1:
@@ -428,6 +435,10 @@ READ8_HANDLER(kbdc8042_8_r)
case 2:
data |= kbdc8042.inport<<4;
break;
+ case 4:
+ at_8042_receive(space.machine(), 0xaa);
+ kbdc8042.status_read_mode = 0;
+ break;
}
break;
}
@@ -447,6 +458,18 @@ WRITE8_HANDLER(kbdc8042_8_w)
kbdc8042.status_read_mode = 0;
switch (kbdc8042.operation_write_state) {
case 0:
+ if ((data == 0xf4) || (data == 0xff)) /* keyboard enable or keyboard reset */
+ {
+ at_8042_receive(space.machine(), 0xfa); /* ACK, delivered a bit differently */
+
+ if (data == 0xff)
+ {
+ kbdc8042.status_read_mode = 3; /* keyboard buffer to be written again after next read */
+ }
+
+ break;
+ }
+
/* normal case */
kbdc8042.data = data;
kbdc8042.sending=1;