mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Merge pull request #1313 from shattered/_ce1d406
multiple keyboard devices: use required_ioport_array, take 2 (nw)
This commit is contained in:
commit
91b0265a1a
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user