From b09982c7d1a828486ae298d2188ac5a2a983b20f Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sun, 30 Jun 2013 11:00:58 +0000 Subject: [PATCH] (MESS) ibm5160: Keyboard WIP. (nw) --- src/mess/machine/kb_pcxt83.c | 42 ++++++++++++++++++++++-------------- src/mess/machine/kb_pcxt83.h | 2 ++ 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/mess/machine/kb_pcxt83.c b/src/mess/machine/kb_pcxt83.c index 7550a0bf37c..44d6aaad53f 100644 --- a/src/mess/machine/kb_pcxt83.c +++ b/src/mess/machine/kb_pcxt83.c @@ -281,6 +281,8 @@ void ibm_pc_xt_83_keyboard_device::device_start() // state saving save_item(NAME(m_p1)); save_item(NAME(m_p2)); + save_item(NAME(m_md)); + save_item(NAME(m_sense)); } @@ -336,6 +338,11 @@ WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::bus_w ) m_pc_kbdc->data_write_from_kb(BIT(data, 5)); m_pc_kbdc->clock_write_from_kb(BIT(data, 6)); + + if (BIT(data, 7)) + { + m_md = (m_p2 & 0xf0) << 4 | m_p1; + } } @@ -377,7 +384,7 @@ WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::p2_w ) 0 SELECT 2 1 SELECT 1 2 SELECT 0 - 3 SA CLOSED, T1 + 3 SA CLOSED 4 MD08 5 MD09 6 MD10 @@ -385,6 +392,11 @@ WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::p2_w ) */ + if (!BIT(m_p2, 3) && BIT(data, 3)) + { + m_sense = data & 0x07; + } + m_p2 = data; } @@ -417,20 +429,18 @@ int ibm_pc_xt_83_keyboard_device::sa_closed() { UINT8 data = 0xff; - logerror("md %03x sense %01x\n", m_p2 << 4 | m_p1, m_p2&0x07); + if (BIT(m_md, 0)) data &= m_md00->read(); + if (BIT(m_md, 1)) data &= m_md01->read(); + if (BIT(m_md, 2)) data &= m_md02->read(); + if (BIT(m_md, 3)) data &= m_md03->read(); + if (BIT(m_md, 4)) data &= m_md04->read(); + if (BIT(m_md, 5)) data &= m_md05->read(); + if (BIT(m_md, 6)) data &= m_md06->read(); + if (BIT(m_md, 7)) data &= m_md07->read(); + if (BIT(m_md, 8)) data &= m_md08->read(); + if (BIT(m_md, 9)) data &= m_md09->read(); + if (BIT(m_md, 10)) data &= m_md10->read(); + if (BIT(m_md, 11)) data &= m_md11->read(); - if (BIT(m_p1, 0)) data &= m_md00->read(); - if (BIT(m_p1, 1)) data &= m_md01->read(); - if (BIT(m_p1, 2)) data &= m_md02->read(); - if (BIT(m_p1, 3)) data &= m_md03->read(); - if (BIT(m_p1, 4)) data &= m_md04->read(); - if (BIT(m_p1, 5)) data &= m_md05->read(); - if (BIT(m_p1, 6)) data &= m_md06->read(); - if (BIT(m_p1, 7)) data &= m_md07->read(); - if (BIT(m_p2, 4)) data &= m_md08->read(); - if (BIT(m_p2, 5)) data &= m_md09->read(); - if (BIT(m_p2, 6)) data &= m_md10->read(); - if (BIT(m_p2, 7)) data &= m_md11->read(); - - return BIT(m_p2, 3) && BIT(data, m_p2 & 0x07); + return BIT(data, m_sense); } diff --git a/src/mess/machine/kb_pcxt83.h b/src/mess/machine/kb_pcxt83.h index 116a6711c4c..a45d5b19623 100644 --- a/src/mess/machine/kb_pcxt83.h +++ b/src/mess/machine/kb_pcxt83.h @@ -71,6 +71,8 @@ private: UINT8 m_p1; UINT8 m_p2; + UINT16 m_md; + int m_sense; };