From e741d4e6d366e07d1026af10c6123cc807c00901 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 14 Apr 2014 19:59:10 +0000 Subject: [PATCH] ie15_keyboard_device: converted to devcb2. Also removed some machine().first_screen() from ie15.c (nw) --- src/mess/drivers/ie15.c | 22 ++++++++++------------ src/mess/machine/ie15_kbd.c | 17 +++-------------- src/mess/machine/ie15_kbd.h | 25 +++++++------------------ 3 files changed, 20 insertions(+), 44 deletions(-) diff --git a/src/mess/drivers/ie15.c b/src/mess/drivers/ie15.c index b4cf22f6c77..1ea3a5e7cb9 100644 --- a/src/mess/drivers/ie15.c +++ b/src/mess/drivers/ie15.c @@ -56,6 +56,7 @@ public: m_maincpu(*this, "maincpu"), m_beeper(*this, "beeper"), m_rs232(*this, "rs232"), + m_screen(*this, "screen"), m_io_keyboard(*this, "keyboard") { } @@ -127,6 +128,7 @@ protected: required_device m_maincpu; required_device m_beeper; required_device m_rs232; + required_device m_screen; required_ioport m_io_keyboard; }; @@ -337,13 +339,13 @@ READ8_MEMBER( ie15_state::flag_r ) { switch (offset) { case 0: // hsync pulse (not hblank) - ret = machine().first_screen()->hpos() < IE15_HORZ_START; + ret = m_screen->hpos() < IE15_HORZ_START; break; case 1: // marker scanline - ret = (machine().first_screen()->vpos() % 11) > 7; + ret = (m_screen->vpos() % 11) > 7; break; case 2: // vblank - ret = !machine().first_screen()->vblank(); + ret = !m_screen->vblank(); break; case 4: ret = m_kb_ruslat; @@ -438,11 +440,6 @@ WRITE16_MEMBER( ie15_state::kbd_put ) } } -static IE15_KEYBOARD_INTERFACE( keyboard_intf ) -{ - DEVCB_DRIVER_MEMBER16(ie15_state, kbd_put) -}; - void ie15_state::machine_reset() { memset(&m_video, 0, sizeof(m_video)); @@ -509,7 +506,7 @@ UINT32 ie15_state::draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline) UINT16 x, chr; bg = 0; fg = 1; ra = scanline % 8; - blink = (machine().first_screen()->frame_number() % 10) > 4; + blink = (m_screen->frame_number() % 10) > 4; red = m_io_keyboard->read() & IE_KB_RED; for (x = offset; x < offset + 80; x++) @@ -559,11 +556,11 @@ void ie15_state::update_leds() */ TIMER_DEVICE_CALLBACK_MEMBER(ie15_state::scanline_callback) { - UINT16 y = machine().first_screen()->vpos(); + UINT16 y = m_screen->vpos(); DBG_LOG(3,"scanline_cb", ("addr %03x frame %" I64FMT "d x %.4d y %.3d row %.2d e:c:s %d:%d:%d\n", - m_video.ptr2, machine().first_screen()->frame_number(), machine().first_screen()->hpos(), y, + m_video.ptr2, m_screen->frame_number(), m_screen->hpos(), y, y%11, m_video.enable, m_video.cursor, m_video.line25)); if (y < IE15_VERT_START) return; @@ -625,7 +622,8 @@ static MACHINE_CONFIG_START( ie15, ie15_state ) MCFG_DEFAULT_LAYOUT( layout_ie15 ) /* Devices */ - MCFG_IE15_KEYBOARD_ADD("keyboard", keyboard_intf) + MCFG_DEVICE_ADD("keyboard", IE15_KEYBOARD, 0) + MCFG_IE15_KEYBOARD_CB(WRITE16(ie15_state, kbd_put)) MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, NULL) MCFG_RS232_RXD_HANDLER(WRITELINE(ie15_state, serial_rx_callback)) diff --git a/src/mess/machine/ie15_kbd.c b/src/mess/machine/ie15_kbd.c index d72f398d24b..71a0e31cb0f 100644 --- a/src/mess/machine/ie15_kbd.c +++ b/src/mess/machine/ie15_kbd.c @@ -19,6 +19,7 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, device , m_io_kbd2(*this, "TERM_LINE2") , m_io_kbd3(*this, "TERM_LINE3") , m_io_kbdc(*this, "TERM_LINEC") + , m_keyboard_cb(*this) { } @@ -29,6 +30,7 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const , m_io_kbd2(*this, "TERM_LINE2") , m_io_kbd3(*this, "TERM_LINE3") , m_io_kbdc(*this, "TERM_LINEC") + , m_keyboard_cb(*this) { } @@ -152,24 +154,11 @@ machine_config_constructor ie15_keyboard_device::device_mconfig_additions() cons void ie15_keyboard_device::device_start() { - m_keyboard_func.resolve(m_keyboard_cb, *this); + m_keyboard_cb.resolve_safe(); m_timer = timer_alloc(); m_rom = (UINT8*)memregion("ie15kbd")->base(); } -void ie15_keyboard_device::device_config_complete() -{ - const ie15_keyboard_interface *intf = reinterpret_cast(static_config()); - if(intf != NULL) - { - *static_cast(this) = *intf; - } - else - { - memset(&m_keyboard_cb, 0, sizeof(m_keyboard_cb)); - } -} - void ie15_keyboard_device::device_reset() { m_last_code = 0; diff --git a/src/mess/machine/ie15_kbd.h b/src/mess/machine/ie15_kbd.h index 6da5c8fa256..cbdda9b0311 100644 --- a/src/mess/machine/ie15_kbd.h +++ b/src/mess/machine/ie15_kbd.h @@ -24,36 +24,26 @@ #define IE_KB_SI 0x0f #define IE_KB_SO 0x0e -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct ie15_keyboard_interface -{ - devcb_write16 m_keyboard_cb; -}; - -#define IE15_KEYBOARD_INTERFACE(name) const ie15_keyboard_interface (name) = /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ -#define MCFG_IE15_KEYBOARD_ADD(_tag, _intrf) \ - MCFG_DEVICE_ADD(_tag, IE15_KEYBOARD, 0) \ - MCFG_DEVICE_CONFIG(_intrf) +#define MCFG_IE15_KEYBOARD_CB(_devcb) \ + devcb = &ie15_keyboard_device::set_keyboard_callback(*device, DEVCB2_##_devcb); /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ class ie15_keyboard_device : - public device_t, - public ie15_keyboard_interface + public device_t { public: 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); ie15_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + template static devcb2_base &set_keyboard_callback(device_t &device, _Object object) { return downcast(device).m_keyboard_cb.set_callback(object); } virtual ioport_constructor device_input_ports() const; virtual machine_config_constructor device_mconfig_additions() const; @@ -69,8 +59,7 @@ protected: virtual void device_start(); virtual void device_reset(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - virtual void device_config_complete(); - virtual void send_key(UINT16 code) { m_keyboard_func(0, code); } + virtual void send_key(UINT16 code) { m_keyboard_cb((offs_t)0, code); } emu_timer *m_timer; private: @@ -81,7 +70,7 @@ private: UINT8 m_ruslat; UINT8 *m_rom; - devcb_resolved_write16 m_keyboard_func; + devcb2_write16 m_keyboard_cb; }; extern const device_type IE15_KEYBOARD;