(MESS) ibm5160: Keyboard WIP. (nw)

This commit is contained in:
Curt Coder 2013-06-30 21:22:08 +00:00
parent 285531623a
commit c7b51f7fb1
2 changed files with 127 additions and 133 deletions

View File

@ -54,7 +54,7 @@ ROM_START( ibm_pc_xt_83_keyboard )
8143 P
(C) INTEL 76
*/
ROM_LOAD( "4584751.bin", 0x000, 0x400, CRC(c59aa9d1) SHA1(4f5b2a075c68f6493310ec1e2a24271ceea330df) )
ROM_LOAD( "4584751.m1", 0x000, 0x400, CRC(c59aa9d1) SHA1(4f5b2a075c68f6493310ec1e2a24271ceea330df) )
ROM_END
@ -108,124 +108,124 @@ machine_config_constructor ibm_pc_xt_83_keyboard_device::device_mconfig_addition
INPUT_PORTS_START( ibm_pc_xt_83_keyboard )
PORT_START("MD00")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4e
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //51
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4d
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4a
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //49
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //46
PORT_START("MD01")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //53
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //50
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4f
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4c
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //4b
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //47
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //48
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //45
PORT_START("MD02")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //52
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //37
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //36
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //29
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1c
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0e
PORT_START("MD03")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3a
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //35
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //28
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1b
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1a
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0d
PORT_START("MD04")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //34
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //27
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //26
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //19
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0c
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0b
PORT_START("MD05")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //32
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //33
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //25
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //24
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //18
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //17
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0a
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //09
PORT_START("MD06")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //39
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //31
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //30
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //23
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //16
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //15
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //08
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //07
PORT_START("MD07")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2e
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2f
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //22
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //21
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //14
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //13
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //06
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //05
PORT_START("MD08")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2d
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2c
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //20
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1f
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //12
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //11
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //04
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //03
PORT_START("MD09")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2b
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //2a
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1d
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //1e
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) //10
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //0f
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //02
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //01
PORT_START("MD10")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) //38
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //44
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //42
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //40
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3e
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3c
PORT_START("MD11")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) //43
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) //41
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3f
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3d
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) //76
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) //3b
INPUT_PORTS_END
@ -264,8 +264,11 @@ ibm_pc_xt_83_keyboard_device::ibm_pc_xt_83_keyboard_device(const machine_config
m_md09(*this, "MD09"),
m_md10(*this, "MD10"),
m_md11(*this, "MD11"),
m_p1(0),
m_p2(0)
m_bus(0xff),
m_p1(0xff),
m_p2(0xff),
m_sense(0),
m_q(1)
{
}
@ -279,10 +282,11 @@ void ibm_pc_xt_83_keyboard_device::device_start()
set_pc_kbdc_device();
// state saving
save_item(NAME(m_bus));
save_item(NAME(m_p1));
save_item(NAME(m_p2));
save_item(NAME(m_md));
save_item(NAME(m_sense));
save_item(NAME(m_q));
}
@ -292,7 +296,6 @@ void ibm_pc_xt_83_keyboard_device::device_start()
void ibm_pc_xt_83_keyboard_device::device_reset()
{
m_maincpu->reset();
}
@ -332,17 +335,34 @@ WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::bus_w )
4
5 DATAOUT
6 -REQOUT
7 RESET
7 Z1 RESET
*/
m_pc_kbdc->data_write_from_kb(BIT(data, 5));
m_pc_kbdc->clock_write_from_kb(BIT(data, 6));
if (BIT(data, 7))
if (!BIT(m_bus, 7) && BIT(data, 7))
{
m_md = (m_p2 & 0xf0) << 4 | m_p1;
UINT8 data = 0xff;
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();
m_q = BIT(data, m_sense);
}
m_bus = data;
}
@ -417,30 +437,5 @@ READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t0_r )
READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t1_r )
{
return sa_closed();
}
//-------------------------------------------------
// sa_closed -
//-------------------------------------------------
int ibm_pc_xt_83_keyboard_device::sa_closed()
{
UINT8 data = 0xff;
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();
return BIT(data, m_sense);
return BIT(m_p2, 3) && m_q;
}

View File

@ -53,8 +53,6 @@ protected:
virtual DECLARE_WRITE_LINE_MEMBER( data_write );
private:
int sa_closed();
required_device<cpu_device> m_maincpu;
required_ioport m_md00;
required_ioport m_md01;
@ -69,10 +67,11 @@ private:
required_ioport m_md10;
required_ioport m_md11;
UINT8 m_bus;
UINT8 m_p1;
UINT8 m_p2;
UINT16 m_md;
int m_sense;
int m_q;
};