From 745f59d3eafb86716b981c58ff4466b12d2487ab Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sun, 9 Oct 2016 10:19:27 +0300 Subject: [PATCH] required_ioport_array. (nw) --- src/devices/bus/abckb/abc77.cpp | 57 ++---------------- src/devices/bus/abckb/abc77.h | 13 +---- src/devices/bus/abckb/abc800kb.cpp | 46 ++++----------- src/devices/bus/abckb/abc800kb.h | 13 +---- src/devices/bus/pc_kbd/pc83.cpp | 63 ++++---------------- src/devices/bus/pc_kbd/pc83.h | 25 +------- src/devices/bus/pc_kbd/pcat84.cpp | 93 +++++------------------------- src/devices/bus/pc_kbd/pcat84.h | 17 +----- src/devices/bus/pc_kbd/pcxt83.cpp | 37 +++++------- src/devices/bus/pc_kbd/pcxt83.h | 13 +---- src/mame/drivers/compucolor.cpp | 79 +++++-------------------- src/mame/drivers/tiki100.cpp | 15 +---- src/mame/includes/tiki100.h | 26 +-------- src/mame/machine/apricotkb.cpp | 37 +++--------- src/mame/machine/apricotkb.h | 14 +---- src/mame/machine/compiskb.cpp | 46 ++++++--------- src/mame/machine/compiskb.h | 10 +--- src/mame/machine/mm1kb.cpp | 24 +------- src/mame/machine/mm1kb.h | 11 +--- src/mame/machine/pc1512kb.cpp | 34 ++++------- src/mame/machine/pc1512kb.h | 12 +--- src/mame/machine/tandy2kb.cpp | 45 +++++---------- src/mame/machine/tandy2kb.h | 13 +---- src/mame/machine/trs80m2kb.cpp | 50 +++++----------- src/mame/machine/trs80m2kb.h | 15 +---- src/mame/machine/v1050kb.cpp | 48 +++++---------- src/mame/machine/v1050kb.h | 15 +---- src/mame/machine/victor9kb.cpp | 43 ++++---------- src/mame/machine/victor9kb.h | 16 +---- src/mame/machine/wangpckb.cpp | 62 +++++--------------- src/mame/machine/wangpckb.h | 19 +----- src/mame/machine/x820kb.cpp | 49 +++++++--------- src/mame/machine/x820kb.h | 11 +--- 33 files changed, 223 insertions(+), 848 deletions(-) diff --git a/src/devices/bus/abckb/abc77.cpp b/src/devices/bus/abckb/abc77.cpp index 0fd9c53d7b8..1b62094f18e 100644 --- a/src/devices/bus/abckb/abc77.cpp +++ b/src/devices/bus/abckb/abc77.cpp @@ -422,50 +422,13 @@ inline void abc77_device::key_down(int state) // abc77_device - constructor //------------------------------------------------- -abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8035_TAG), - m_watchdog(*this, "watchdog"), - m_discrete(*this, DISCRETE_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), - m_dsw(*this, "DSW"), - m_txd(1), m_keylatch(0), - m_keydown(1), - m_clock(0), m_hys(0), m_reset(0), - m_stb(1), m_j3(0), m_serial_timer(nullptr), m_reset_timer(nullptr) -{ -} - abc77_device::abc77_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), abc_keyboard_interface(mconfig, *this), m_maincpu(*this, I8035_TAG), m_watchdog(*this, "watchdog"), m_discrete(*this, DISCRETE_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), + m_x(*this, "X%u", 0), m_dsw(*this, "DSW"), m_txd(1), m_keylatch(0), m_keydown(1), @@ -477,6 +440,9 @@ abc77_device::abc77_device(const machine_config &mconfig, device_type type, cons abc55_device::abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : abc77_device(mconfig, ABC55, "Luxor ABC 55", tag, owner, clock, "abc55", __FILE__) { } +abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc77_device(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__) { } + //------------------------------------------------- // device_start - device-specific startup @@ -565,20 +531,9 @@ READ8_MEMBER( abc77_device::p1_r ) if (m_stb) { - switch (m_keylatch) + if (m_keylatch < 12) { - case 0: data = m_x0->read(); break; - case 1: data = m_x1->read(); break; - case 2: data = m_x2->read(); break; - case 3: data = m_x3->read(); break; - case 4: data = m_x4->read(); break; - case 5: data = m_x5->read(); break; - case 6: data = m_x6->read(); break; - case 7: data = m_x7->read(); break; - case 8: data = m_x8->read(); break; - case 9: data = m_x9->read(); break; - case 10: data = m_x10->read(); break; - case 11: data = m_x11->read(); break; + data = m_x[m_keylatch]->read(); } } diff --git a/src/devices/bus/abckb/abc77.h b/src/devices/bus/abckb/abc77.h index f3521bfd0af..b3d40b36ac7 100644 --- a/src/devices/bus/abckb/abc77.h +++ b/src/devices/bus/abckb/abc77.h @@ -69,18 +69,7 @@ protected: required_device m_maincpu; required_device m_watchdog; required_device m_discrete; - required_ioport m_x0; - required_ioport m_x1; - required_ioport m_x2; - required_ioport m_x3; - required_ioport m_x4; - required_ioport m_x5; - required_ioport m_x6; - required_ioport m_x7; - required_ioport m_x8; - required_ioport m_x9; - required_ioport m_x10; - required_ioport m_x11; + required_ioport_array<12> m_x; required_ioport m_dsw; int m_txd; // transmit data diff --git a/src/devices/bus/abckb/abc800kb.cpp b/src/devices/bus/abckb/abc800kb.cpp index aedd983e202..123843efd05 100644 --- a/src/devices/bus/abckb/abc800kb.cpp +++ b/src/devices/bus/abckb/abc800kb.cpp @@ -332,27 +332,16 @@ inline void abc800_keyboard_device::key_down(int state) // abc800_keyboard_device - constructor //------------------------------------------------- -abc800_keyboard_device::abc800_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC800_KEYBOARD, "ABC-800 Keyboard", tag, owner, clock, "abc800kb", __FILE__), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8048_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), - m_row(0), - m_txd(1), - m_clk(0), - m_stb(1), - m_keydown(1), m_serial_timer(nullptr) +abc800_keyboard_device::abc800_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, ABC800_KEYBOARD, "ABC-800 Keyboard", tag, owner, clock, "abc800kb", __FILE__), + abc_keyboard_interface(mconfig, *this), + m_maincpu(*this, I8048_TAG), + m_x(*this, "X%u", 0), + m_row(0), + m_txd(1), + m_clk(0), + m_stb(1), + m_keydown(1), + m_serial_timer(nullptr) { } @@ -415,20 +404,9 @@ READ8_MEMBER( abc800_keyboard_device::kb_p1_r ) if (m_stb) { - switch (m_row) + if (m_row < 12) { - case 0: data = m_x0->read(); break; - case 1: data = m_x1->read(); break; - case 2: data = m_x2->read(); break; - case 3: data = m_x3->read(); break; - case 4: data = m_x4->read(); break; - case 5: data = m_x5->read(); break; - case 6: data = m_x6->read(); break; - case 7: data = m_x7->read(); break; - case 8: data = m_x8->read(); break; - case 9: data = m_x9->read(); break; - case 10: data = m_x10->read(); break; - case 11: data = m_x11->read(); break; + data = m_x[m_row]->read(); } } diff --git a/src/devices/bus/abckb/abc800kb.h b/src/devices/bus/abckb/abc800kb.h index 9606706a08b..10332c96a6e 100644 --- a/src/devices/bus/abckb/abc800kb.h +++ b/src/devices/bus/abckb/abc800kb.h @@ -58,18 +58,7 @@ private: inline void key_down(int state); required_device m_maincpu; - required_ioport m_x0; - required_ioport m_x1; - required_ioport m_x2; - required_ioport m_x3; - required_ioport m_x4; - required_ioport m_x5; - required_ioport m_x6; - required_ioport m_x7; - required_ioport m_x8; - required_ioport m_x9; - required_ioport m_x10; - required_ioport m_x11; + required_ioport_array<12> m_x; int m_row; int m_txd; diff --git a/src/devices/bus/pc_kbd/pc83.cpp b/src/devices/bus/pc_kbd/pc83.cpp index e65d688b1f5..8b1d25366ae 100644 --- a/src/devices/bus/pc_kbd/pc83.cpp +++ b/src/devices/bus/pc_kbd/pc83.cpp @@ -248,34 +248,12 @@ ioport_constructor ibm_pc_83_keyboard_device::device_input_ports() const // ibm_pc_83_keyboard_device - constructor //------------------------------------------------- -ibm_pc_83_keyboard_device::ibm_pc_83_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, PC_KBD_IBM_PC_83, "IBM PC Keyboard", tag, owner, clock, "kb_pc83", __FILE__), - device_pc_kbd_interface(mconfig, *this), - m_maincpu(*this, I8048_TAG), - m_dr00(*this, "DR00"), - m_dr01(*this, "DR01"), - m_dr02(*this, "DR02"), - m_dr03(*this, "DR03"), - m_dr04(*this, "DR04"), - m_dr05(*this, "DR05"), - m_dr06(*this, "DR06"), - m_dr07(*this, "DR07"), - m_dr08(*this, "DR08"), - m_dr09(*this, "DR09"), - m_dr10(*this, "DR10"), - m_dr11(*this, "DR11"), - m_dr12(*this, "DR12"), - m_dr13(*this, "DR13"), - m_dr14(*this, "DR14"), - m_dr15(*this, "DR15"), - m_dr16(*this, "DR16"), - m_dr17(*this, "DR17"), - m_dr18(*this, "DR18"), - m_dr19(*this, "DR19"), - m_dr20(*this, "DR20"), - m_dr21(*this, "DR21"), - m_dr22(*this, "DR22"), - m_dr23(*this, "DR23"), m_cnt(0) +ibm_pc_83_keyboard_device::ibm_pc_83_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, PC_KBD_IBM_PC_83, "IBM PC Keyboard", tag, owner, clock, "kb_pc83", __FILE__), + device_pc_kbd_interface(mconfig, *this), + m_maincpu(*this, I8048_TAG), + m_dr(*this, "DR%02u", 0), + m_cnt(0) { } @@ -390,32 +368,11 @@ READ8_MEMBER( ibm_pc_83_keyboard_device::t1_r ) { UINT8 data = 0xff; - switch (m_cnt >> 2) + int keylatch = m_cnt >> 2; + + if (keylatch < 24) { - case 0: data = m_dr00->read(); break; - case 1: data = m_dr01->read(); break; - case 2: data = m_dr02->read(); break; - case 3: data = m_dr03->read(); break; - case 4: data = m_dr04->read(); break; - case 5: data = m_dr05->read(); break; - case 6: data = m_dr06->read(); break; - case 7: data = m_dr07->read(); break; - case 8: data = m_dr08->read(); break; - case 9: data = m_dr09->read(); break; - case 10: data = m_dr10->read(); break; - case 11: data = m_dr11->read(); break; - case 12: data = m_dr12->read(); break; - case 13: data = m_dr13->read(); break; - case 14: data = m_dr14->read(); break; - case 15: data = m_dr15->read(); break; - case 16: data = m_dr16->read(); break; - case 17: data = m_dr17->read(); break; - case 18: data = m_dr18->read(); break; - case 19: data = m_dr19->read(); break; - case 20: data = m_dr20->read(); break; - case 21: data = m_dr21->read(); break; - case 22: data = m_dr22->read(); break; - case 23: data = m_dr23->read(); break; + data = m_dr[keylatch]->read(); } int sense = m_cnt & 0x03; diff --git a/src/devices/bus/pc_kbd/pc83.h b/src/devices/bus/pc_kbd/pc83.h index 6cc8baef052..9aa3c82bd85 100644 --- a/src/devices/bus/pc_kbd/pc83.h +++ b/src/devices/bus/pc_kbd/pc83.h @@ -52,30 +52,7 @@ protected: private: required_device m_maincpu; - required_ioport m_dr00; - required_ioport m_dr01; - required_ioport m_dr02; - required_ioport m_dr03; - required_ioport m_dr04; - required_ioport m_dr05; - required_ioport m_dr06; - required_ioport m_dr07; - required_ioport m_dr08; - required_ioport m_dr09; - required_ioport m_dr10; - required_ioport m_dr11; - required_ioport m_dr12; - required_ioport m_dr13; - required_ioport m_dr14; - required_ioport m_dr15; - required_ioport m_dr16; - required_ioport m_dr17; - required_ioport m_dr18; - required_ioport m_dr19; - required_ioport m_dr20; - required_ioport m_dr21; - required_ioport m_dr22; - required_ioport m_dr23; + required_ioport_array<24> m_dr; UINT8 m_cnt; }; diff --git a/src/devices/bus/pc_kbd/pcat84.cpp b/src/devices/bus/pc_kbd/pcat84.cpp index 781984f77c4..d8babfa1a36 100644 --- a/src/devices/bus/pc_kbd/pcat84.cpp +++ b/src/devices/bus/pc_kbd/pcat84.cpp @@ -353,66 +353,25 @@ ioport_constructor ibm_3270pc_122_keyboard_device::device_input_ports() const // ibm_pc_at_84_keyboard_device - constructor //------------------------------------------------- -ibm_pc_at_84_keyboard_device::ibm_pc_at_84_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), - device_pc_kbd_interface(mconfig, *this), - m_maincpu(*this, I8048_TAG), - m_dr00(*this, "DR00"), - m_dr01(*this, "DR01"), - m_dr02(*this, "DR02"), - m_dr03(*this, "DR03"), - m_dr04(*this, "DR04"), - m_dr05(*this, "DR05"), - m_dr06(*this, "DR06"), - m_dr07(*this, "DR07"), - m_dr08(*this, "DR08"), - m_dr09(*this, "DR09"), - m_dr10(*this, "DR10"), - m_dr11(*this, "DR11"), - m_dr12(*this, "DR12"), - m_dr13(*this, "DR13"), - m_dr14(*this, "DR14"), - m_dr15(*this, "DR15"), - m_kbdida(*this, "KBDIDA"), - m_kbdidb(*this, "KBDIDB"), - m_db(0), - m_cnt(0), - m_sense(0), - m_t1(1) +ibm_pc_at_84_keyboard_device::ibm_pc_at_84_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), + device_pc_kbd_interface(mconfig, *this), + m_maincpu(*this, I8048_TAG), + m_dr(*this, "DR%02u", 0), + m_kbdida(*this, "KBDIDA"), + m_kbdidb(*this, "KBDIDB"), + m_db(0), + m_cnt(0), + m_sense(0), + m_t1(1) { } -ibm_pc_at_84_keyboard_device::ibm_pc_at_84_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, PC_KBD_IBM_PC_AT_84, "IBM PC/AT Keyboard", tag, owner, clock, "kb_pcat84", __FILE__), - device_pc_kbd_interface(mconfig, *this), - m_maincpu(*this, I8048_TAG), - m_dr00(*this, "DR00"), - m_dr01(*this, "DR01"), - m_dr02(*this, "DR02"), - m_dr03(*this, "DR03"), - m_dr04(*this, "DR04"), - m_dr05(*this, "DR05"), - m_dr06(*this, "DR06"), - m_dr07(*this, "DR07"), - m_dr08(*this, "DR08"), - m_dr09(*this, "DR09"), - m_dr10(*this, "DR10"), - m_dr11(*this, "DR11"), - m_dr12(*this, "DR12"), - m_dr13(*this, "DR13"), - m_dr14(*this, "DR14"), - m_dr15(*this, "DR15"), - m_kbdida(*this, "KBDIDA"), - m_kbdidb(*this, "KBDIDB"), - m_db(0), - m_cnt(0), - m_sense(0), - m_t1(1) -{ -} +ibm_pc_at_84_keyboard_device::ibm_pc_at_84_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + ibm_pc_at_84_keyboard_device(mconfig, PC_KBD_IBM_PC_AT_84, "IBM PC/AT Keyboard", tag, owner, clock, "kb_pcat84", __FILE__) { } -ibm_3270pc_122_keyboard_device::ibm_3270pc_122_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : ibm_pc_at_84_keyboard_device(mconfig, PC_KBD_IBM_3270PC_122, "IBM 3270PC Keyboard", tag, owner, clock, "kb_3270pc", __FILE__) { } +ibm_3270pc_122_keyboard_device::ibm_3270pc_122_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + ibm_pc_at_84_keyboard_device(mconfig, PC_KBD_IBM_3270PC_122, "IBM 3270PC Keyboard", tag, owner, clock, "kb_3270pc", __FILE__) { } //------------------------------------------------- @@ -615,27 +574,7 @@ READ8_MEMBER( ibm_pc_at_84_keyboard_device::t1_r ) int ibm_pc_at_84_keyboard_device::key_depressed() { - UINT8 data = 0xff; - - switch (m_cnt) - { - case 0: data = m_dr00->read(); break; - case 1: data = m_dr01->read(); break; - case 2: data = m_dr02->read(); break; - case 3: data = m_dr03->read(); break; - case 4: data = m_dr04->read(); break; - case 5: data = m_dr05->read(); break; - case 6: data = m_dr06->read(); break; - case 7: data = m_dr07->read(); break; - case 8: data = m_dr08->read(); break; - case 9: data = m_dr09->read(); break; - case 10: data = m_dr10->read(); break; - case 11: data = m_dr11->read(); break; - case 12: data = m_dr12->read(); break; - case 13: data = m_dr13->read(); break; - case 14: data = m_dr14->read(); break; - case 15: data = m_dr15->read(); break; - } + UINT8 data = m_dr[m_cnt]->read(); return m_t1 && BIT(data, m_sense); } diff --git a/src/devices/bus/pc_kbd/pcat84.h b/src/devices/bus/pc_kbd/pcat84.h index 5fe1b85316a..5c5f542c24c 100644 --- a/src/devices/bus/pc_kbd/pcat84.h +++ b/src/devices/bus/pc_kbd/pcat84.h @@ -65,22 +65,7 @@ private: int key_depressed(); required_device m_maincpu; - required_ioport m_dr00; - required_ioport m_dr01; - required_ioport m_dr02; - required_ioport m_dr03; - required_ioport m_dr04; - required_ioport m_dr05; - required_ioport m_dr06; - required_ioport m_dr07; - required_ioport m_dr08; - required_ioport m_dr09; - required_ioport m_dr10; - required_ioport m_dr11; - required_ioport m_dr12; - required_ioport m_dr13; - required_ioport m_dr14; - required_ioport m_dr15; + required_ioport_array<16> m_dr; optional_ioport m_kbdida; optional_ioport m_kbdidb; diff --git a/src/devices/bus/pc_kbd/pcxt83.cpp b/src/devices/bus/pc_kbd/pcxt83.cpp index 3838fadbb3a..193f0e08931 100644 --- a/src/devices/bus/pc_kbd/pcxt83.cpp +++ b/src/devices/bus/pc_kbd/pcxt83.cpp @@ -251,18 +251,7 @@ ibm_pc_xt_83_keyboard_device::ibm_pc_xt_83_keyboard_device(const machine_config : device_t(mconfig, PC_KBD_IBM_PC_XT_83, "IBM PC/XT Keyboard", tag, owner, clock, "kb_pcxt83", __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_md(*this, "MD%02u", 0), m_bus(0xff), m_p1(0xff), m_p2(0xff), @@ -356,18 +345,18 @@ WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::bus_w ) { 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(); + if (BIT(m_p1, 0)) data &= m_md[0]->read(); + if (BIT(m_p1, 1)) data &= m_md[1]->read(); + if (BIT(m_p1, 2)) data &= m_md[2]->read(); + if (BIT(m_p1, 3)) data &= m_md[3]->read(); + if (BIT(m_p1, 4)) data &= m_md[4]->read(); + if (BIT(m_p1, 5)) data &= m_md[5]->read(); + if (BIT(m_p1, 6)) data &= m_md[6]->read(); + if (BIT(m_p1, 7)) data &= m_md[7]->read(); + if (BIT(m_p2, 4)) data &= m_md[8]->read(); + if (BIT(m_p2, 5)) data &= m_md[9]->read(); + if (BIT(m_p2, 6)) data &= m_md[10]->read(); + if (BIT(m_p2, 7)) data &= m_md[11]->read(); m_q = BIT(data, m_sense); } diff --git a/src/devices/bus/pc_kbd/pcxt83.h b/src/devices/bus/pc_kbd/pcxt83.h index f43e33d0b28..47e23205e62 100644 --- a/src/devices/bus/pc_kbd/pcxt83.h +++ b/src/devices/bus/pc_kbd/pcxt83.h @@ -54,18 +54,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_array<12> m_md; UINT8 m_bus; UINT8 m_p1; diff --git a/src/mame/drivers/compucolor.cpp b/src/mame/drivers/compucolor.cpp index 30f4b594ef3..149f4bd332e 100644 --- a/src/mame/drivers/compucolor.cpp +++ b/src/mame/drivers/compucolor.cpp @@ -12,7 +12,6 @@ TODO: - - floppy - interlaced video - add-on ROM - add-on RAM @@ -36,34 +35,19 @@ class compucolor2_state : public driver_device { public: - compucolor2_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, I8080_TAG), - m_mioc(*this, TMS5501_TAG), - m_vtac(*this, CRT5027_TAG), - m_palette(*this, "palette"), - m_rs232(*this, RS232_TAG), - m_floppy0(*this, "cd0"), - m_floppy1(*this, "cd1"), - m_char_rom(*this, "chargen"), - m_video_ram(*this, "videoram"), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_y10(*this, "Y10"), - m_y11(*this, "Y11"), - m_y12(*this, "Y12"), - m_y13(*this, "Y13"), - m_y14(*this, "Y14"), - m_y15(*this, "Y15"), - m_y128(*this, "Y128") + compucolor2_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, I8080_TAG), + m_mioc(*this, TMS5501_TAG), + m_vtac(*this, CRT5027_TAG), + m_palette(*this, "palette"), + m_rs232(*this, RS232_TAG), + m_floppy0(*this, "cd0"), + m_floppy1(*this, "cd1"), + m_char_rom(*this, "chargen"), + m_video_ram(*this, "videoram"), + m_y(*this, "Y%u", 0), + m_y128(*this, "Y128") { } required_device m_maincpu; @@ -75,22 +59,7 @@ public: required_device m_floppy1; required_memory_region m_char_rom; required_shared_ptr m_video_ram; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_y10; - required_ioport m_y11; - required_ioport m_y12; - required_ioport m_y13; - required_ioport m_y14; - required_ioport m_y15; + required_ioport_array<16> m_y; required_ioport m_y128; virtual void machine_start() override; @@ -327,25 +296,7 @@ READ8_MEMBER( compucolor2_state::xi_r ) switch ((m_xo >> 4) & 0x03) { case 0: - switch (m_xo & 0x0f) - { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; - case 10: data &= m_y10->read(); break; - case 11: data &= m_y11->read(); break; - case 12: data &= m_y12->read(); break; - case 13: data &= m_y13->read(); break; - case 14: data &= m_y14->read(); break; - case 15: data &= m_y15->read(); break; - } + data &= m_y[m_xo & 0x0f]->read(); if (BIT(m_xo, 7)) { diff --git a/src/mame/drivers/tiki100.cpp b/src/mame/drivers/tiki100.cpp index a25dc17ccbd..6eeb30a6679 100644 --- a/src/mame/drivers/tiki100.cpp +++ b/src/mame/drivers/tiki100.cpp @@ -180,20 +180,9 @@ READ8_MEMBER( tiki100_state::keyboard_r ) { UINT8 data = 0xff; - switch (m_keylatch) + if (m_keylatch < 12) { - case 0: data = m_y1->read(); break; - case 1: data = m_y2->read(); break; - case 2: data = m_y3->read(); break; - case 3: data = m_y4->read(); break; - case 4: data = m_y5->read(); break; - case 5: data = m_y6->read(); break; - case 6: data = m_y7->read(); break; - case 7: data = m_y8->read(); break; - case 8: data = m_y9->read(); break; - case 9: data = m_y10->read(); break; - case 10: data = m_y11->read(); break; - case 11: data = m_y12->read(); break; + data = m_y[m_keylatch]->read(); } m_keylatch++; diff --git a/src/mame/includes/tiki100.h b/src/mame/includes/tiki100.h index b4e837adba3..c0fd0c2addf 100644 --- a/src/mame/includes/tiki100.h +++ b/src/mame/includes/tiki100.h @@ -59,18 +59,7 @@ public: m_rom(*this, Z80_TAG), m_prom(*this, "u4"), m_video_ram(*this, "video_ram"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_y10(*this, "Y10"), - m_y11(*this, "Y11"), - m_y12(*this, "Y12"), + m_y(*this, "Y%u", 1), m_st_io(*this, "ST"), m_palette(*this, "palette"), m_rome(1), @@ -92,18 +81,7 @@ public: required_memory_region m_rom; required_memory_region m_prom; optional_shared_ptr m_video_ram; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_y10; - required_ioport m_y11; - required_ioport m_y12; + required_ioport_array<12> m_y; required_ioport m_st_io; required_device m_palette; diff --git a/src/mame/machine/apricotkb.cpp b/src/mame/machine/apricotkb.cpp index 8d40e726f40..d58997bb40a 100644 --- a/src/mame/machine/apricotkb.cpp +++ b/src/mame/machine/apricotkb.cpp @@ -190,7 +190,7 @@ INPUT_PORTS_START( apricot_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) - PORT_START("YA") + PORT_START("Y10") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) @@ -200,7 +200,7 @@ INPUT_PORTS_START( apricot_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) - PORT_START("YB") + PORT_START("Y11") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) @@ -210,7 +210,7 @@ INPUT_PORTS_START( apricot_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) - PORT_START("YC") + PORT_START("Y12") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) @@ -248,19 +248,7 @@ ioport_constructor apricot_keyboard_device::device_input_ports() const apricot_keyboard_device::apricot_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, APRICOT_KEYBOARD, "Apricot Keyboard", tag, owner, clock, "aprikb", __FILE__), m_write_txd(*this), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_ya(*this, "YA"), - m_yb(*this, "YB"), - m_yc(*this, "YC"), + m_y(*this, "Y%u", 0), m_modifiers(*this, "MODIFIERS") { } @@ -294,19 +282,10 @@ UINT8 apricot_keyboard_device::read_keyboard() { UINT8 data = 0xff; - if (!BIT(m_kb_y, 0)) data &= m_y0->read(); - if (!BIT(m_kb_y, 1)) data &= m_y1->read(); - if (!BIT(m_kb_y, 2)) data &= m_y2->read(); - if (!BIT(m_kb_y, 3)) data &= m_y3->read(); - if (!BIT(m_kb_y, 4)) data &= m_y4->read(); - if (!BIT(m_kb_y, 5)) data &= m_y5->read(); - if (!BIT(m_kb_y, 6)) data &= m_y6->read(); - if (!BIT(m_kb_y, 7)) data &= m_y7->read(); - if (!BIT(m_kb_y, 8)) data &= m_y8->read(); - if (!BIT(m_kb_y, 9)) data &= m_y9->read(); - if (!BIT(m_kb_y, 10)) data &= m_ya->read(); - if (!BIT(m_kb_y, 11)) data &= m_yb->read(); - if (!BIT(m_kb_y, 12)) data &= m_yc->read(); + for (int i = 0; i < 13; i++) + { + if (!BIT(m_kb_y, i)) data &= m_y[i]->read(); + } return data; } diff --git a/src/mame/machine/apricotkb.h b/src/mame/machine/apricotkb.h index ddc3d6cdde1..5cc9ed9d2ac 100644 --- a/src/mame/machine/apricotkb.h +++ b/src/mame/machine/apricotkb.h @@ -70,19 +70,7 @@ protected: private: devcb_write_line m_write_txd; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_ya; - required_ioport m_yb; - required_ioport m_yc; + required_ioport_array<13> m_y; required_ioport m_modifiers; UINT16 m_kb_y; diff --git a/src/mame/machine/compiskb.cpp b/src/mame/machine/compiskb.cpp index cfde9de9cb0..a83dc9fd6b8 100644 --- a/src/mame/machine/compiskb.cpp +++ b/src/mame/machine/compiskb.cpp @@ -239,15 +239,7 @@ compis_keyboard_device::compis_keyboard_device(const machine_config &mconfig, co : device_t(mconfig, COMPIS_KEYBOARD, "Compis Keyboard", tag, owner, clock, "compiskb", __FILE__), m_maincpu(*this, I8748_TAG), m_speaker(*this, SPEAKER_TAG), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), + m_y(*this, "Y%u", 1), m_special(*this, "SPECIAL"), m_out_tx_handler(*this), m_bus(0xff), @@ -336,15 +328,15 @@ READ8_MEMBER( compis_keyboard_device::p1_r ) switch (m_keylatch) { - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; + case 1: data &= m_y[0]->read(); break; + case 2: data &= m_y[1]->read(); break; + case 3: data &= m_y[2]->read(); break; + case 4: data &= m_y[3]->read(); break; + case 5: data &= m_y[4]->read(); break; + case 6: data &= m_y[5]->read(); break; + case 7: data &= m_y[6]->read(); break; + case 8: data &= m_y[7]->read(); break; + case 9: data &= m_y[8]->read(); break; } return data; @@ -361,15 +353,15 @@ READ8_MEMBER( compis_keyboard_device::p2_r ) switch (m_keylatch) { - case 1: data &= m_y1->read() >> 8; break; - case 2: data &= m_y2->read() >> 8; break; - case 3: data &= m_y3->read() >> 8; break; - case 4: data &= m_y4->read() >> 8; break; - case 5: data &= m_y5->read() >> 8; break; - case 6: data &= m_y6->read() >> 8; break; - case 7: data &= m_y7->read() >> 8; break; - case 8: data &= m_y8->read() >> 8; break; - case 9: data &= m_y9->read() >> 8; break; + case 1: data &= m_y[0]->read() >> 8; break; + case 2: data &= m_y[1]->read() >> 8; break; + case 3: data &= m_y[2]->read() >> 8; break; + case 4: data &= m_y[3]->read() >> 8; break; + case 5: data &= m_y[4]->read() >> 8; break; + case 6: data &= m_y[5]->read() >> 8; break; + case 7: data &= m_y[6]->read() >> 8; break; + case 8: data &= m_y[7]->read() >> 8; break; + case 9: data &= m_y[8]->read() >> 8; break; } data &= m_special->read(); diff --git a/src/mame/machine/compiskb.h b/src/mame/machine/compiskb.h index caf649c585b..0dd79a6f453 100644 --- a/src/mame/machine/compiskb.h +++ b/src/mame/machine/compiskb.h @@ -65,15 +65,7 @@ private: required_device m_maincpu; required_device m_speaker; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; + required_ioport_array<9> m_y; required_ioport m_special; devcb_write_line m_out_tx_handler; diff --git a/src/mame/machine/mm1kb.cpp b/src/mame/machine/mm1kb.cpp index e4d88bb8587..6cc417ca184 100644 --- a/src/mame/machine/mm1kb.cpp +++ b/src/mame/machine/mm1kb.cpp @@ -210,16 +210,7 @@ mm1_keyboard_t::mm1_keyboard_t(const machine_config &mconfig, const char *tag, d m_write_kbst(*this), m_samples(*this, "keyboard_and_chassis_sounds"), m_rom(*this, "keyboard"), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), + m_y(*this, "Y%u", 0), m_special(*this, "SPECIAL"), m_sense(0), m_drive(0), @@ -268,18 +259,9 @@ void mm1_keyboard_t::device_timer(emu_timer &timer, device_timer_id id, int para // handle scan timer UINT8 data = 0xff; - switch (m_drive) + if (m_drive < 10) { - case 0: data = m_y0->read(); break; - case 1: data = m_y1->read(); break; - case 2: data = m_y2->read(); break; - case 3: data = m_y3->read(); break; - case 4: data = m_y4->read(); break; - case 5: data = m_y5->read(); break; - case 6: data = m_y6->read(); break; - case 7: data = m_y7->read(); break; - case 8: data = m_y8->read(); break; - case 9: data = m_y9->read(); break; + data = m_y[m_drive]->read(); } UINT8 special = m_special->read(); diff --git a/src/mame/machine/mm1kb.h b/src/mame/machine/mm1kb.h index cd9acc98d11..e06f11d038c 100644 --- a/src/mame/machine/mm1kb.h +++ b/src/mame/machine/mm1kb.h @@ -71,16 +71,7 @@ private: required_device m_samples; required_memory_region m_rom; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; + required_ioport_array<10> m_y; required_ioport m_special; int m_sense; diff --git a/src/mame/machine/pc1512kb.cpp b/src/mame/machine/pc1512kb.cpp index 0b9d0608902..ede64bda48c 100644 --- a/src/mame/machine/pc1512kb.cpp +++ b/src/mame/machine/pc1512kb.cpp @@ -221,17 +221,7 @@ pc1512_keyboard_t::pc1512_keyboard_t(const machine_config &mconfig, const char * device_t(mconfig, PC1512_KEYBOARD, "Amstrad PC1512 Keyboard", tag, owner, clock, "pc1512kb", __FILE__), m_maincpu(*this, I8048_TAG), m_joy(*this, "joy"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_y10(*this, "Y10"), - m_y11(*this, "Y11"), + m_y(*this, "Y%u", 1), m_write_clock(*this), m_write_data(*this), m_data_in(1), @@ -365,17 +355,17 @@ READ8_MEMBER( pc1512_keyboard_t::kb_bus_r ) UINT8 data = 0xff; - if (!BIT(m_kb_y, 0)) data &= m_y1->read(); - if (!BIT(m_kb_y, 1)) data &= m_y2->read(); - if (!BIT(m_kb_y, 2)) data &= m_y3->read(); - if (!BIT(m_kb_y, 3)) data &= m_y4->read(); - if (!BIT(m_kb_y, 4)) data &= m_y5->read(); - if (!BIT(m_kb_y, 5)) data &= m_y6->read(); - if (!BIT(m_kb_y, 6)) data &= m_y7->read(); - if (!BIT(m_kb_y, 7)) data &= m_y8->read(); - if (!BIT(m_kb_y, 8)) data &= m_y9->read(); - if (!BIT(m_kb_y, 9)) data &= m_y10->read(); - if (!BIT(m_kb_y, 10)) data &= m_y11->read(); + if (!BIT(m_kb_y, 0)) data &= m_y[0]->read(); + if (!BIT(m_kb_y, 1)) data &= m_y[1]->read(); + if (!BIT(m_kb_y, 2)) data &= m_y[2]->read(); + if (!BIT(m_kb_y, 3)) data &= m_y[3]->read(); + if (!BIT(m_kb_y, 4)) data &= m_y[4]->read(); + if (!BIT(m_kb_y, 5)) data &= m_y[5]->read(); + if (!BIT(m_kb_y, 6)) data &= m_y[6]->read(); + if (!BIT(m_kb_y, 7)) data &= m_y[7]->read(); + if (!BIT(m_kb_y, 8)) data &= m_y[8]->read(); + if (!BIT(m_kb_y, 9)) data &= m_y[9]->read(); + if (!BIT(m_kb_y, 10)) data &= m_y[10]->read(); if (!m_joy_com) { data &= m_joy->joy_r(); diff --git a/src/mame/machine/pc1512kb.h b/src/mame/machine/pc1512kb.h index b6f08a52327..d1fe04cfac0 100644 --- a/src/mame/machine/pc1512kb.h +++ b/src/mame/machine/pc1512kb.h @@ -86,17 +86,7 @@ private: required_device m_maincpu; required_device m_joy; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_y10; - required_ioport m_y11; + required_ioport_array<11> m_y; devcb_write_line m_write_clock; devcb_write_line m_write_data; diff --git a/src/mame/machine/tandy2kb.cpp b/src/mame/machine/tandy2kb.cpp index a57374b80f5..46e4bb1ddba 100644 --- a/src/mame/machine/tandy2kb.cpp +++ b/src/mame/machine/tandy2kb.cpp @@ -225,26 +225,15 @@ ioport_constructor tandy2k_keyboard_device::device_input_ports() const // tandy2k_keyboard_device - constructor //------------------------------------------------- -tandy2k_keyboard_device::tandy2k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, TANDY2K_KEYBOARD, "Tandy 2000 Keyboard", tag, owner, clock, "tandy2kb", __FILE__), - m_maincpu(*this, I8048_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_y10(*this, "Y10"), - m_y11(*this, "Y11"), - m_write_clock(*this), - m_write_data(*this), - m_keylatch(0xffff), - m_clock(0), - m_data(0) +tandy2k_keyboard_device::tandy2k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, TANDY2K_KEYBOARD, "Tandy 2000 Keyboard", tag, owner, clock, "tandy2kb", __FILE__), + m_maincpu(*this, I8048_TAG), + m_y(*this, "Y%u", 0), + m_write_clock(*this), + m_write_data(*this), + m_keylatch(0xffff), + m_clock(0), + m_data(0) { } @@ -339,18 +328,10 @@ READ8_MEMBER( tandy2k_keyboard_device::kb_p1_r ) UINT8 data = 0xff; - if (!BIT(m_keylatch, 0)) data &= m_y0->read(); - if (!BIT(m_keylatch, 1)) data &= m_y1->read(); - if (!BIT(m_keylatch, 2)) data &= m_y2->read(); - if (!BIT(m_keylatch, 3)) data &= m_y3->read(); - if (!BIT(m_keylatch, 4)) data &= m_y4->read(); - if (!BIT(m_keylatch, 5)) data &= m_y5->read(); - if (!BIT(m_keylatch, 6)) data &= m_y6->read(); - if (!BIT(m_keylatch, 7)) data &= m_y7->read(); - if (!BIT(m_keylatch, 8)) data &= m_y8->read(); - if (!BIT(m_keylatch, 9)) data &= m_y9->read(); - if (!BIT(m_keylatch, 10)) data &= m_y10->read(); - if (!BIT(m_keylatch, 11)) data &= m_y11->read(); + for (int i = 0; i < 12; i++) + { + if (!BIT(m_keylatch, i)) data &= m_y[i]->read(); + } return ~data; } diff --git a/src/mame/machine/tandy2kb.h b/src/mame/machine/tandy2kb.h index ed9c354cba5..8ce35e7d757 100644 --- a/src/mame/machine/tandy2kb.h +++ b/src/mame/machine/tandy2kb.h @@ -79,18 +79,7 @@ private: }; required_device m_maincpu; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_y10; - required_ioport m_y11; + required_ioport_array<12> m_y; devcb_write_line m_write_clock; devcb_write_line m_write_data; diff --git a/src/mame/machine/trs80m2kb.cpp b/src/mame/machine/trs80m2kb.cpp index d007f4f49fa..85dac930e37 100644 --- a/src/mame/machine/trs80m2kb.cpp +++ b/src/mame/machine/trs80m2kb.cpp @@ -185,7 +185,7 @@ INPUT_PORTS_START( trs80m2_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("YA") + PORT_START("Y10") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') @@ -195,7 +195,7 @@ INPUT_PORTS_START( trs80m2_keyboard ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("YB") + PORT_START("Y11") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') @@ -226,25 +226,14 @@ ioport_constructor trs80m2_keyboard_device::device_input_ports() const // trs80m2_keyboard_device - constructor //------------------------------------------------- -trs80m2_keyboard_device::trs80m2_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, TRS80M2_KEYBOARD, "TRS-80 Model II Keyboard", tag, owner, clock, "trs80m2kb", __FILE__), - m_maincpu(*this, I8021_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_ya(*this, "YA"), - m_yb(*this, "YB"), - m_write_clock(*this), - m_busy(1), - m_data(1), - m_clk(0) +trs80m2_keyboard_device::trs80m2_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, TRS80M2_KEYBOARD, "TRS-80 Model II Keyboard", tag, owner, clock, "trs80m2kb", __FILE__), + m_maincpu(*this, I8021_TAG), + m_y(*this, "Y%u", 0), + m_write_clock(*this), + m_busy(1), + m_data(1), + m_clk(0) { } @@ -262,7 +251,7 @@ void trs80m2_keyboard_device::device_start() save_item(NAME(m_busy)); save_item(NAME(m_data)); save_item(NAME(m_clk)); - save_item(NAME(m_y)); + save_item(NAME(m_keylatch)); } @@ -312,20 +301,9 @@ READ8_MEMBER( trs80m2_keyboard_device::kb_p0_r ) { UINT8 data = 0xff; - switch (m_y) + if (m_keylatch < 12) { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; - case 0xa: data &= m_ya->read(); break; - case 0xb: data &= m_yb->read(); break; + data &= m_y[m_keylatch]->read(); } return data; @@ -388,5 +366,5 @@ WRITE8_MEMBER( trs80m2_keyboard_device::kb_p2_w ) */ - m_y = BITSWAP8(data, 7, 6, 5, 4, 0, 1, 2, 3) & 0x0f; + m_keylatch = BITSWAP8(data, 7, 6, 5, 4, 0, 1, 2, 3) & 0x0f; } diff --git a/src/mame/machine/trs80m2kb.h b/src/mame/machine/trs80m2kb.h index d5bb62c337f..f0bbf4b9df1 100644 --- a/src/mame/machine/trs80m2kb.h +++ b/src/mame/machine/trs80m2kb.h @@ -75,18 +75,7 @@ private: }; required_device m_maincpu; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_ya; - required_ioport m_yb; + required_ioport_array<12> m_y; devcb_write_line m_write_clock; @@ -94,7 +83,7 @@ private: int m_data; int m_clk; - UINT8 m_y; + UINT8 m_keylatch; }; diff --git a/src/mame/machine/v1050kb.cpp b/src/mame/machine/v1050kb.cpp index 3c5259d7f0e..31f3b053c09 100644 --- a/src/mame/machine/v1050kb.cpp +++ b/src/mame/machine/v1050kb.cpp @@ -208,7 +208,7 @@ INPUT_PORTS_START( v1050_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_START("YA") + PORT_START("Y10") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('~') PORT_CHAR('\'') PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('0') PORT_CHAR(')') PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('9') PORT_CHAR('(') @@ -218,7 +218,7 @@ INPUT_PORTS_START( v1050_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') - PORT_START("YB") + PORT_START("Y11") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') @@ -301,24 +301,13 @@ ioport_constructor v1050_keyboard_device::device_input_ports() const // v1050_keyboard_device - constructor //------------------------------------------------- -v1050_keyboard_device::v1050_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, V1050_KEYBOARD, "Visual 1050 Keyboard", tag, owner, clock, "v1050kb", __FILE__), - m_maincpu(*this, I8049_TAG), - m_discrete(*this, DISCRETE_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_ya(*this, "YA"), - m_yb(*this, "YB"), - m_out_tx_handler(*this), - m_y(0) +v1050_keyboard_device::v1050_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, V1050_KEYBOARD, "Visual 1050 Keyboard", tag, owner, clock, "v1050kb", __FILE__), + m_maincpu(*this, I8049_TAG), + m_discrete(*this, DISCRETE_TAG), + m_y(*this, "Y%u", 0), + m_out_tx_handler(*this), + m_keylatch(0) { } @@ -330,7 +319,7 @@ v1050_keyboard_device::v1050_keyboard_device(const machine_config &mconfig, cons void v1050_keyboard_device::device_start() { // state saving - save_item(NAME(m_y)); + save_item(NAME(m_keylatch)); } @@ -363,20 +352,9 @@ READ8_MEMBER( v1050_keyboard_device::kb_p1_r ) { UINT8 data = 0xff; - switch (m_y) + if (m_keylatch < 12) { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; - case 0xa: data &= m_ya->read(); break; - case 0xb: data &= m_yb->read(); break; + data &= m_y[m_keylatch]->read(); } return data; @@ -389,7 +367,7 @@ READ8_MEMBER( v1050_keyboard_device::kb_p1_r ) WRITE8_MEMBER( v1050_keyboard_device::kb_p1_w ) { - m_y = data & 0x0f; + m_keylatch = data & 0x0f; } diff --git a/src/mame/machine/v1050kb.h b/src/mame/machine/v1050kb.h index 50c02cc630e..177568843b2 100644 --- a/src/mame/machine/v1050kb.h +++ b/src/mame/machine/v1050kb.h @@ -60,21 +60,10 @@ protected: private: required_device m_maincpu; required_device m_discrete; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_ya; - required_ioport m_yb; + required_ioport_array<12> m_y; devcb_write_line m_out_tx_handler; - UINT8 m_y; + UINT8 m_keylatch; }; diff --git a/src/mame/machine/victor9kb.cpp b/src/mame/machine/victor9kb.cpp index 3f56a6e7576..04a269dd687 100644 --- a/src/mame/machine/victor9kb.cpp +++ b/src/mame/machine/victor9kb.cpp @@ -513,7 +513,7 @@ INPUT_PORTS_START( victor9k_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) // S93 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad Enter") PORT_CODE(KEYCODE_ENTER_PAD) // S94 - PORT_START("YA") + PORT_START("Y10") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad " UTF8_MULTIPLY) PORT_CODE(KEYCODE_ASTERISK) // unicode multiply sign U+00D7 // S32 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F10 [10]") PORT_CODE(KEYCODE_F10) // S11 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) // S53 @@ -523,7 +523,7 @@ INPUT_PORTS_START( victor9k_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F7 [7]") PORT_CODE(KEYCODE_F7) // S07 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F6 [6]") PORT_CODE(KEYCODE_F6) // S06 - PORT_START("YB") + PORT_START("Y11") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("UNUSED S04") // unused // S104 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD) // S103 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 00") PORT_CODE(KEYCODE_00_PAD) // S102 @@ -533,7 +533,7 @@ INPUT_PORTS_START( victor9k_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAUSE/CONT") PORT_CODE(KEYCODE_PAUSE) // S98 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Spacebar") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // S97 - PORT_START("YC") + PORT_START("Y12") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5 [5]") PORT_CODE(KEYCODE_F5) // S05 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4 [4]") PORT_CODE(KEYCODE_F4) // S04 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3 [3]") PORT_CODE(KEYCODE_F3) // S03 @@ -567,22 +567,10 @@ ioport_constructor victor_9000_keyboard_t::device_input_ports() const victor_9000_keyboard_t::victor_9000_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, VICTOR9K_KEYBOARD, "Victor 9000 Keyboard", tag, owner, clock, "victor9kb", __FILE__), m_maincpu(*this, I8021_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_ya(*this, "YA"), - m_yb(*this, "YB"), - m_yc(*this, "YC"), + m_y(*this, "Y%u", 0), m_kbrdy_cb(*this), m_kbdata_cb(*this), - m_y(0), + m_keylatch(0), m_kbrdy(-1), m_kbdata(-1), m_kback(1) @@ -602,7 +590,7 @@ void victor_9000_keyboard_t::device_start() // state saving save_item(NAME(m_p1)); - save_item(NAME(m_y)); + save_item(NAME(m_keylatch)); save_item(NAME(m_stb)); save_item(NAME(m_y12)); save_item(NAME(m_kbrdy)); @@ -631,25 +619,14 @@ READ8_MEMBER( victor_9000_keyboard_t::kb_p1_r ) { UINT8 data = 0xff; - switch (m_y) + if (m_keylatch < 12) { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; - case 0xa: data &= m_ya->read(); break; - case 0xb: data &= m_yb->read(); break; + data &= m_y[m_keylatch]->read(); } if (!m_y12) { - data &= m_yc->read(); + data &= m_y[12]->read(); } return data; @@ -686,7 +663,7 @@ WRITE8_MEMBER( victor_9000_keyboard_t::kb_p2_w ) // falling (?edge or level?), latch keyboard rows 0-11 if (!BIT(data, 0)) { - m_y = m_p1 & 0x0f; + m_keylatch = m_p1 & 0x0f; m_y12 = BIT(data, 2); } diff --git a/src/mame/machine/victor9kb.h b/src/mame/machine/victor9kb.h index 8d1570fb776..138f37da739 100644 --- a/src/mame/machine/victor9kb.h +++ b/src/mame/machine/victor9kb.h @@ -62,25 +62,13 @@ protected: private: required_device m_maincpu; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_ya; - required_ioport m_yb; - required_ioport m_yc; + required_ioport_array<13> m_y; devcb_write_line m_kbrdy_cb; devcb_write_line m_kbdata_cb; UINT8 m_p1; - UINT8 m_y; + UINT8 m_keylatch; int m_stb; int m_y12; int m_kbrdy; diff --git a/src/mame/machine/wangpckb.cpp b/src/mame/machine/wangpckb.cpp index bd636b2eadd..5268163aba9 100644 --- a/src/mame/machine/wangpckb.cpp +++ b/src/mame/machine/wangpckb.cpp @@ -239,7 +239,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("2ND") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL)) // 25 - PORT_START("YA") + PORT_START("Y10") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEC TAB") PORT_CODE(KEYCODE_F4) // 7b PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FORMAT") PORT_CODE(KEYCODE_F5) // 7a PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x95") // 71 @@ -249,7 +249,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 27 - PORT_START("YB") + PORT_START("Y11") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAGE") PORT_CODE(KEYCODE_F2) // 7d PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CENTER") PORT_CODE(KEYCODE_F3) // 7c PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MOVE") PORT_CODE(KEYCODE_F12) // 73 @@ -259,7 +259,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("YC") + PORT_START("Y12") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HELP") PORT_CODE(KEYCODE_ESC) // 36 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INDENT") PORT_CODE(KEYCODE_F1) // 7e PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("REPLC") PORT_CODE(KEYCODE_F10) // 75 @@ -269,7 +269,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // 1d PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("YD") + PORT_START("Y13") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad \xC3\x97") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) // 14 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad \xC3\xB7") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) // 18 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PRINT") // 19 @@ -279,7 +279,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 1c - PORT_START("YE") + PORT_START("Y14") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad + *") PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))// 60 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad - !") PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) // 13 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 8 >") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) // 15 @@ -289,7 +289,7 @@ INPUT_PORTS_START( wangpc_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3 #") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) // 10 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 1b - PORT_START("YF") + PORT_START("Y15") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INSERT") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) // 62 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PREV") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) // 61 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NEXT") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) // 51 @@ -376,23 +376,10 @@ wangpc_keyboard_t::wangpc_keyboard_t(const machine_config &mconfig, const char * device_t(mconfig, WANGPC_KEYBOARD, "Wang PC Keyboard", tag, owner, clock, "wangpckb", __FILE__), device_serial_interface(mconfig, *this), m_maincpu(*this, I8051_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_y9(*this, "Y9"), - m_ya(*this, "YA"), - m_yb(*this, "YB"), - m_yc(*this, "YC"), - m_yd(*this, "YD"), - m_ye(*this, "YE"), - m_yf(*this, "YF"), - m_txd_handler(*this) + m_y(*this, "Y%u", 0), + m_txd_handler(*this), + m_keylatch(0), + m_rxd(1) { } @@ -409,6 +396,9 @@ void wangpc_keyboard_t::device_start() set_rcv_rate(62500); //set_tra_rate(62500); + + save_item(NAME(m_keylatch)); + save_item(NAME(m_rxd)); } @@ -533,29 +523,7 @@ WRITE8_MEMBER(wangpc_keyboard_t::mcs51_tx_callback) READ8_MEMBER( wangpc_keyboard_t::kb_p1_r ) { - UINT8 data = 0xff; - - switch (m_y & 0x0f) - { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 9: data &= m_y9->read(); break; - case 0xa: data &= m_ya->read(); break; - case 0xb: data &= m_yb->read(); break; - case 0xc: data &= m_yc->read(); break; - case 0xd: data &= m_yd->read(); break; - case 0xe: data &= m_ye->read(); break; - case 0xf: data &= m_yf->read(); break; - } - - return data; + return m_y[m_keylatch]->read(); } @@ -610,7 +578,7 @@ WRITE8_MEMBER( wangpc_keyboard_t::kb_p2_w ) */ - m_y = data & 0x0f; + m_keylatch = data & 0x0f; //if (LOG) logerror("P2 %02x\n", data); } diff --git a/src/mame/machine/wangpckb.h b/src/mame/machine/wangpckb.h index 0ae9065abe5..d2bfbeb8c71 100644 --- a/src/mame/machine/wangpckb.h +++ b/src/mame/machine/wangpckb.h @@ -82,25 +82,10 @@ protected: private: required_device m_maincpu; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_y9; - required_ioport m_ya; - required_ioport m_yb; - required_ioport m_yc; - required_ioport m_yd; - required_ioport m_ye; - required_ioport m_yf; + required_ioport_array<16> m_y; devcb_write_line m_txd_handler; - UINT8 m_y; + UINT8 m_keylatch; int m_rxd; }; diff --git a/src/mame/machine/x820kb.cpp b/src/mame/machine/x820kb.cpp index 98f75efa559..b567c7090f9 100644 --- a/src/mame/machine/x820kb.cpp +++ b/src/mame/machine/x820kb.cpp @@ -208,7 +208,25 @@ INPUT_PORTS_START( xerox_820_keyboard ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_START("YF") + PORT_START("Y9") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y10") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y11") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y12") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y13") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y14") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("Y15") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) @@ -242,16 +260,7 @@ ioport_constructor xerox_820_keyboard_t::device_input_ports() const xerox_820_keyboard_t::xerox_820_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, XEROX_820_KEYBOARD, "Xerox 820 Keyboard", tag, owner, clock, "x820kb", __FILE__), m_maincpu(*this, I8748_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_y8(*this, "Y8"), - m_yf(*this, "YF"), + m_y(*this, "Y%u", 0), m_kbstb_cb(*this), m_p1(0xff), m_bus(0xff) @@ -329,23 +338,7 @@ WRITE8_MEMBER( xerox_820_keyboard_t::kb_p1_w ) READ8_MEMBER( xerox_820_keyboard_t::kb_p2_r ) { - UINT8 data = 0xff; - - switch (m_p1 & 0x0f) - { - case 0: data &= m_y0->read(); break; - case 1: data &= m_y1->read(); break; - case 2: data &= m_y2->read(); break; - case 3: data &= m_y3->read(); break; - case 4: data &= m_y4->read(); break; - case 5: data &= m_y5->read(); break; - case 6: data &= m_y6->read(); break; - case 7: data &= m_y7->read(); break; - case 8: data &= m_y8->read(); break; - case 0xf: data &= m_yf->read(); break; - } - - return data; + return m_y[m_p1 & 0x0f]->read(); } diff --git a/src/mame/machine/x820kb.h b/src/mame/machine/x820kb.h index effc7819726..e84cfa23ad3 100644 --- a/src/mame/machine/x820kb.h +++ b/src/mame/machine/x820kb.h @@ -61,16 +61,7 @@ protected: private: required_device m_maincpu; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_y8; - required_ioport m_yf; + required_ioport_array<16> m_y; devcb_write_line m_kbstb_cb;