diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index fb70a408993..58816cb9532 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -1114,8 +1114,6 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_DEVICE_ADD(M6522_2_TAG, VIA6522, XTAL_30MHz/30) MCFG_VIA6522_READPA_HANDLER(READ8(victor9k_state, via2_pa_r)) - MCFG_VIA6522_READCB1_HANDLER(DEVREADLINE(VICTOR9K_KEYBOARD_TAG, victor9k_keyboard_device, kbrdy_r)) - MCFG_VIA6522_READCB2_HANDLER(DEVREADLINE(VICTOR9K_KEYBOARD_TAG, victor9k_keyboard_device, kbdata_r)) MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via2_pa_w)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via2_pb_w)) MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via2_irq_w)) @@ -1172,7 +1170,9 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_RS232_OUT_RI_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rib_w)) MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, ctsb_w)) - MCFG_VICTOR9K_KEYBOARD_ADD(WRITELINE(victor9k_state, kbrdy_w)) + MCFG_DEVICE_ADD(VICTOR9K_KEYBOARD_TAG, VICTOR9K_KEYBOARD, 0) + MCFG_VICTOR9K_KBRDY_HANDLER(WRITELINE(victor9k_state, kbrdy_w)) + MCFG_VICTOR9K_KBDATA_HANDLER(DEVWRITELINE(M6522_2_TAG, via6522_device, write_cb2)) // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h index fdd0b23f6ff..c4e5de50d38 100644 --- a/src/mess/includes/victor9k.h +++ b/src/mess/includes/victor9k.h @@ -51,6 +51,7 @@ #define RS232_A_TAG "rs232a" #define RS232_B_TAG "rs232b" #define SCREEN_TAG "screen" +#define VICTOR9K_KEYBOARD_TAG "victor9kb" class victor9k_state : public driver_device { diff --git a/src/mess/machine/victor9kb.c b/src/mess/machine/victor9kb.c index 1c2666a1af0..64b1ab01382 100644 --- a/src/mess/machine/victor9kb.c +++ b/src/mess/machine/victor9kb.c @@ -253,7 +253,8 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig m_ya(*this, "YA"), m_yb(*this, "YB"), m_yc(*this, "YC"), - m_write_kbrdy(*this), + m_kbrdy_handler(*this), + m_kbdata_handler(*this), m_y(0), m_kbrdy(1), m_kbdata(1), @@ -269,7 +270,8 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig void victor9k_keyboard_device::device_start() { // resolve callbacks - m_write_kbrdy.resolve_safe(); + m_kbrdy_handler.resolve_safe(); + m_kbdata_handler.resolve_safe(); // state saving save_item(NAME(m_y)); @@ -384,10 +386,16 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w ) if (m_kbrdy != kbrdy) { m_kbrdy = kbrdy; - m_write_kbrdy(m_kbrdy); + m_kbrdy_handler(m_kbrdy); } - m_kbdata = BIT(data, 3); + int kbdata = BIT(data, 3); + + if (m_kbdata != kbdata) + { + m_kbdata = kbdata; + m_kbdata_handler(m_kbdata); + } logerror("P2 %01x\n", data & 0x0f); } diff --git a/src/mess/machine/victor9kb.h b/src/mess/machine/victor9kb.h index bef1115541c..61ee8784bc5 100644 --- a/src/mess/machine/victor9kb.h +++ b/src/mess/machine/victor9kb.h @@ -20,21 +20,15 @@ -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define VICTOR9K_KEYBOARD_TAG "victor9kb" - - - //************************************************************************** // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_VICTOR9K_KEYBOARD_ADD(_kbrdy) \ - MCFG_DEVICE_ADD(VICTOR9K_KEYBOARD_TAG, VICTOR9K_KEYBOARD, 0) \ - downcast(device)->set_kbrdy_callback(DEVCB2_##_kbrdy); +#define MCFG_VICTOR9K_KBRDY_HANDLER(_devcb) \ + devcb = &victor9k_keyboard_device::set_kbrdy_handler(*device, DEVCB2_##_devcb); + +#define MCFG_VICTOR9K_KBDATA_HANDLER(_devcb) \ + devcb = &victor9k_keyboard_device::set_kbdata_handler(*device, DEVCB2_##_devcb); //************************************************************************** @@ -49,7 +43,8 @@ public: // construction/destruction victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - template void set_kbrdy_callback(_kbrdy kbrdy) { m_write_kbrdy.set_callback(kbrdy); } + template static devcb2_base &set_kbrdy_handler(device_t &device, _Object object) { return downcast(device).m_kbrdy_handler.set_callback(object); } + template static devcb2_base &set_kbdata_handler(device_t &device, _Object object) { return downcast(device).m_kbdata_handler.set_callback(object); } // optional information overrides virtual const rom_entry *device_rom_region() const; @@ -87,7 +82,8 @@ private: required_ioport m_yb; required_ioport m_yc; - devcb2_write_line m_write_kbrdy; + devcb2_write_line m_kbrdy_handler; + devcb2_write_line m_kbdata_handler; UINT8 m_y; int m_kbrdy;