summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <cuavas@users.noreply.github.com>2016-08-25 10:34:35 +1000
committer GitHub <noreply@github.com>2016-08-25 10:34:35 +1000
commit91b0265a1ac4ddf229ea15190ef1b2484c87a02a (patch)
treee6603d8a505b2731baee6d7698cb238bae552850
parent0d08c04009a954a64b7bf4d7be978a744940d721 (diff)
parente59b3b16e918786c76d11e4d60c9d9cd8a489591 (diff)
Merge pull request #1313 from shattered/_ce1d406
multiple keyboard devices: use required_ioport_array, take 2 (nw)
-rw-r--r--src/devices/bus/pc_kbd/ec1841.cpp37
-rw-r--r--src/devices/bus/pc_kbd/ec1841.h17
-rw-r--r--src/mame/machine/ie15_kbd.cpp41
-rw-r--r--src/mame/machine/ie15_kbd.h5
-rw-r--r--src/mame/machine/km035.cpp36
-rw-r--r--src/mame/machine/km035.h17
-rw-r--r--src/mame/machine/ms7004.cpp42
-rw-r--r--src/mame/machine/ms7004.h17
8 files changed, 24 insertions, 188 deletions
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<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;
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<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;
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<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;