Merge pull request #1313 from shattered/_ce1d406

multiple keyboard devices: use required_ioport_array, take 2 (nw)
This commit is contained in:
Vas Crabb 2016-08-25 10:34:35 +10:00 committed by GitHub
commit 91b0265a1a
8 changed files with 24 additions and 188 deletions

View File

@ -284,22 +284,7 @@ ec_1841_keyboard_device::ec_1841_keyboard_device(const machine_config &mconfig,
: device_t(mconfig, PC_KBD_EC_1841, "EC-1841 Keyboard", tag, owner, clock, "kb_ec1841", __FILE__),
device_pc_kbd_interface(mconfig, *this),
m_maincpu(*this, I8048_TAG),
m_md00(*this, "MD00"),
m_md01(*this, "MD01"),
m_md02(*this, "MD02"),
m_md03(*this, "MD03"),
m_md04(*this, "MD04"),
m_md05(*this, "MD05"),
m_md06(*this, "MD06"),
m_md07(*this, "MD07"),
m_md08(*this, "MD08"),
m_md09(*this, "MD09"),
m_md10(*this, "MD10"),
m_md11(*this, "MD11"),
m_md12(*this, "MD12"),
m_md13(*this, "MD13"),
m_md14(*this, "MD14"),
m_md15(*this, "MD15"),
m_kbd(*this, "MD%02u", 0),
m_bus(0xff),
m_p1(0xff),
m_p2(0xff),
@ -458,25 +443,7 @@ READ8_MEMBER( ec_1841_keyboard_device::t1_r )
m_q = 1;
} else {
UINT8 sense = 0xff;
switch(m_bus & 15) {
case 0: sense &= m_md00->read(); break;
case 1: sense &= m_md01->read(); break;
case 2: sense &= m_md02->read(); break;
case 3: sense &= m_md03->read(); break;
case 4: sense &= m_md04->read(); break;
case 5: sense &= m_md05->read(); break;
case 6: sense &= m_md06->read(); break;
case 7: sense &= m_md07->read(); break;
case 8: sense &= m_md08->read(); break;
case 9: sense &= m_md09->read(); break;
case 10: sense &= m_md10->read(); break;
case 11: sense &= m_md11->read(); break;
case 12: sense &= m_md12->read(); break;
case 13: sense &= m_md13->read(); break;
case 14: sense &= m_md14->read(); break;
case 15: sense &= m_md15->read(); break;
}
sense &= m_kbd[m_bus & 15]->read();
m_q = BIT(sense, (m_bus >> 4) & 7);
}

View File

@ -52,22 +52,7 @@ protected:
private:
required_device<cpu_device> m_maincpu;
required_ioport m_md00;
required_ioport m_md01;
required_ioport m_md02;
required_ioport m_md03;
required_ioport m_md04;
required_ioport m_md05;
required_ioport m_md06;
required_ioport m_md07;
required_ioport m_md08;
required_ioport m_md09;
required_ioport m_md10;
required_ioport m_md11;
required_ioport m_md12;
required_ioport m_md13;
required_ioport m_md14;
required_ioport m_md15;
required_ioport_array<16> m_kbd;
UINT8 m_bus;
UINT8 m_p1;

View File

@ -16,10 +16,7 @@
ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
, m_io_kbd0(*this, "TERM_LINE0")
, m_io_kbd1(*this, "TERM_LINE1")
, m_io_kbd2(*this, "TERM_LINE2")
, m_io_kbd3(*this, "TERM_LINE3")
, m_io_kbd(*this, "TERM_LINE%u", 0)
, m_io_kbdc(*this, "TERM_LINEC")
, m_keyboard_cb(*this)
{
@ -27,10 +24,7 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, device
ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, IE15_KEYBOARD, "15WWW-97-006 Keyboard", tag, owner, clock, "ie15_keyboard", __FILE__)
, m_io_kbd0(*this, "TERM_LINE0")
, m_io_kbd1(*this, "TERM_LINE1")
, m_io_kbd2(*this, "TERM_LINE2")
, m_io_kbd3(*this, "TERM_LINE3")
, m_io_kbd(*this, "TERM_LINE%u", 0)
, m_io_kbdc(*this, "TERM_LINEC")
, m_keyboard_cb(*this)
{
@ -38,23 +32,11 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const
UINT8 ie15_keyboard_device::row_number(UINT32 code)
{
if (BIT(code,0)) return 0;
if (BIT(code,1)) return 1;
if (BIT(code,2)) return 2;
if (BIT(code,3)) return 3;
if (BIT(code,4)) return 4;
if (BIT(code,5)) return 5;
if (BIT(code,6)) return 6;
if (BIT(code,7)) return 7;
if (BIT(code,8)) return 8;
if (BIT(code,9)) return 9;
if (BIT(code,10)) return 10;
if (BIT(code,11)) return 11;
if (BIT(code,12)) return 12;
if (BIT(code,13)) return 13;
if (BIT(code,14)) return 14;
if (BIT(code,15)) return 15;
return 0;
int row = 0;
while (code >>= 1) { ++row; }
return row;
}
UINT16 ie15_keyboard_device::keyboard_handler(UINT16 last_code, UINT8 *scan_line)
@ -68,13 +50,8 @@ UINT16 ie15_keyboard_device::keyboard_handler(UINT16 last_code, UINT8 *scan_line
i = *scan_line;
{
if (i == 0) code = m_io_kbd0->read();
else
if (i == 1) code = m_io_kbd1->read();
else
if (i == 2) code = m_io_kbd2->read();
else
if (i == 3) code = m_io_kbd3->read();
if (i<4)
code = m_io_kbd[i]->read();
if (code != 0)
{

View File

@ -52,10 +52,7 @@ public:
virtual const tiny_rom_entry *device_rom_region() const override;
protected:
required_ioport m_io_kbd0;
required_ioport m_io_kbd1;
required_ioport m_io_kbd2;
required_ioport m_io_kbd3;
required_ioport_array<4> m_io_kbd;
required_ioport m_io_kbdc;
virtual void device_start() override;

View File

@ -273,22 +273,7 @@ km035_device::km035_device(const machine_config &mconfig, const char *tag, devic
: device_t(mconfig, KM035, "KM035 keyboard", tag, owner, clock, "km035", __FILE__),
m_maincpu(*this, KM035_CPU_TAG),
m_speaker(*this, KM035_SPK_TAG),
m_kbd0(*this, "KBD0"),
m_kbd1(*this, "KBD1"),
m_kbd2(*this, "KBD2"),
m_kbd3(*this, "KBD3"),
m_kbd4(*this, "KBD4"),
m_kbd5(*this, "KBD5"),
m_kbd6(*this, "KBD6"),
m_kbd7(*this, "KBD7"),
m_kbd8(*this, "KBD8"),
m_kbd9(*this, "KBD9"),
m_kbd10(*this, "KBD10"),
m_kbd11(*this, "KBD11"),
m_kbd12(*this, "KBD12"),
m_kbd13(*this, "KBD13"),
m_kbd14(*this, "KBD14"),
m_kbd15(*this, "KBD15"),
m_kbd(*this, "KBD%u", 0),
m_tx_handler(*this),
m_rts_handler(*this)
{
@ -345,24 +330,7 @@ WRITE8_MEMBER( km035_device::p1_w )
DBG_LOG(2,0,( "p1_w %02x = row %d col %d tx %d\n", data, (data>>4)&15, data&7, !BIT(data, 3)));
m_p1 = data;
switch((data>>4)&15) {
case 0x0: sense = m_kbd0->read(); break;
case 0x1: sense = m_kbd1->read(); break;
case 0x2: sense = m_kbd2->read(); break;
case 0x3: sense = m_kbd3->read(); break;
case 0x4: sense = m_kbd4->read(); break;
case 0x5: sense = m_kbd5->read(); break;
case 0x6: sense = m_kbd6->read(); break;
case 0x7: sense = m_kbd7->read(); break;
case 0x8: sense = m_kbd8->read(); break;
case 0x9: sense = m_kbd9->read(); break;
case 0xa: sense = m_kbd10->read(); break;
case 0xb: sense = m_kbd11->read(); break;
case 0xc: sense = m_kbd12->read(); break;
case 0xd: sense = m_kbd13->read(); break;
case 0xe: sense = m_kbd14->read(); break;
case 0xf: sense = m_kbd15->read(); break;
}
sense = m_kbd[(data>>4) & 15]->read();
m_keylatch = BIT(sense, (data & 7));
if (m_keylatch)
DBG_LOG(1,0,( "keypress at row %d col %d\n", (data>>4)&15, data&7));

View File

@ -62,22 +62,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<beep_device> m_speaker;
required_ioport m_kbd0;
required_ioport m_kbd1;
required_ioport m_kbd2;
required_ioport m_kbd3;
required_ioport m_kbd4;
required_ioport m_kbd5;
required_ioport m_kbd6;
required_ioport m_kbd7;
required_ioport m_kbd8;
required_ioport m_kbd9;
required_ioport m_kbd10;
required_ioport m_kbd11;
required_ioport m_kbd12;
required_ioport m_kbd13;
required_ioport m_kbd14;
required_ioport m_kbd15;
required_ioport_array<16> m_kbd;
int m_keylatch; // keyboard row latch
UINT8 m_p1;

View File

@ -359,22 +359,7 @@ ms7004_device::ms7004_device(const machine_config &mconfig, const char *tag, dev
m_maincpu(*this, MS7004_CPU_TAG),
m_speaker(*this, MS7004_SPK_TAG),
m_i8243(*this, "i8243"),
m_kbd0(*this, "KBD0"),
m_kbd1(*this, "KBD1"),
m_kbd2(*this, "KBD2"),
m_kbd3(*this, "KBD3"),
m_kbd4(*this, "KBD4"),
m_kbd5(*this, "KBD5"),
m_kbd6(*this, "KBD6"),
m_kbd7(*this, "KBD7"),
m_kbd8(*this, "KBD8"),
m_kbd9(*this, "KBD9"),
m_kbd10(*this, "KBD10"),
m_kbd11(*this, "KBD11"),
m_kbd12(*this, "KBD12"),
m_kbd13(*this, "KBD13"),
m_kbd14(*this, "KBD14"),
m_kbd15(*this, "KBD15"),
m_kbd(*this, "KBD%u", 0),
m_tx_handler(*this),
m_rts_handler(*this)
{
@ -464,27 +449,14 @@ WRITE8_MEMBER( ms7004_device::i8243_port_w )
{
int sense = 0;
DBG_LOG(2,0,( "8243 port %d data %02xH\n",
offset + 4, data));
DBG_LOG(2,0,( "8243 port %d data %02xH\n", offset + 4, data));
if (data) {
switch(offset << 4 | data) {
case 0x01: sense = m_kbd0->read(); break;
case 0x02: sense = m_kbd1->read(); break;
case 0x04: sense = m_kbd2->read(); break;
case 0x08: sense = m_kbd3->read(); break;
case 0x11: sense = m_kbd4->read(); break;
case 0x12: sense = m_kbd5->read(); break;
case 0x14: sense = m_kbd6->read(); break;
case 0x18: sense = m_kbd7->read(); break;
case 0x21: sense = m_kbd8->read(); break;
case 0x22: sense = m_kbd9->read(); break;
case 0x24: sense = m_kbd10->read(); break;
case 0x28: sense = m_kbd11->read(); break;
case 0x31: sense = m_kbd12->read(); break;
case 0x32: sense = m_kbd13->read(); break;
case 0x34: sense = m_kbd14->read(); break;
case 0x38: sense = m_kbd15->read(); break;
switch(data) {
case 0x01: sense = m_kbd[(offset << 2) + 0]->read(); break;
case 0x02: sense = m_kbd[(offset << 2) + 1]->read(); break;
case 0x04: sense = m_kbd[(offset << 2) + 2]->read(); break;
case 0x08: sense = m_kbd[(offset << 2) + 3]->read(); break;
}
m_keylatch = BIT(sense, (m_p1 & 7));
if (m_keylatch)

View File

@ -61,22 +61,7 @@ private:
required_device<beep_device> m_speaker;
required_device<i8243_device> m_i8243;
required_ioport m_kbd0;
required_ioport m_kbd1;
required_ioport m_kbd2;
required_ioport m_kbd3;
required_ioport m_kbd4;
required_ioport m_kbd5;
required_ioport m_kbd6;
required_ioport m_kbd7;
required_ioport m_kbd8;
required_ioport m_kbd9;
required_ioport m_kbd10;
required_ioport m_kbd11;
required_ioport m_kbd12;
required_ioport m_kbd13;
required_ioport m_kbd14;
required_ioport m_kbd15;
required_ioport_array<16> m_kbd;
int m_keylatch; // keyboard row latch
UINT8 m_p1;