diff --git a/src/devices/bus/pc_kbd/ec1841.cpp b/src/devices/bus/pc_kbd/ec1841.cpp index 5e4bdcc69bd..3d7020d9ad2 100644 --- a/src/devices/bus/pc_kbd/ec1841.cpp +++ b/src/devices/bus/pc_kbd/ec1841.cpp @@ -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); } diff --git a/src/devices/bus/pc_kbd/ec1841.h b/src/devices/bus/pc_kbd/ec1841.h index ce04dc17cd1..7c7b830a083 100644 --- a/src/devices/bus/pc_kbd/ec1841.h +++ b/src/devices/bus/pc_kbd/ec1841.h @@ -52,22 +52,7 @@ protected: private: required_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; diff --git a/src/mame/machine/ie15_kbd.cpp b/src/mame/machine/ie15_kbd.cpp index 137ae48f15a..7e287ff6553 100644 --- a/src/mame/machine/ie15_kbd.cpp +++ b/src/mame/machine/ie15_kbd.cpp @@ -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) { diff --git a/src/mame/machine/ie15_kbd.h b/src/mame/machine/ie15_kbd.h index adf2a32f5af..2ecbe4dc7e9 100644 --- a/src/mame/machine/ie15_kbd.h +++ b/src/mame/machine/ie15_kbd.h @@ -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; diff --git a/src/mame/machine/km035.cpp b/src/mame/machine/km035.cpp index a76117940f8..f32ef6bffe7 100644 --- a/src/mame/machine/km035.cpp +++ b/src/mame/machine/km035.cpp @@ -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)); diff --git a/src/mame/machine/km035.h b/src/mame/machine/km035.h index c165730936e..26cbd115574 100644 --- a/src/mame/machine/km035.h +++ b/src/mame/machine/km035.h @@ -62,22 +62,7 @@ private: required_device m_maincpu; required_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; diff --git a/src/mame/machine/ms7004.cpp b/src/mame/machine/ms7004.cpp index 1e5cca40e0a..f93c5854431 100644 --- a/src/mame/machine/ms7004.cpp +++ b/src/mame/machine/ms7004.cpp @@ -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) diff --git a/src/mame/machine/ms7004.h b/src/mame/machine/ms7004.h index ef9e9608d25..563dce2da51 100644 --- a/src/mame/machine/ms7004.h +++ b/src/mame/machine/ms7004.h @@ -61,22 +61,7 @@ private: required_device m_speaker; required_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;