From 926294f15ceded330117f3ad45ce9d02c586946e Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 24 Mar 2014 18:02:28 +0000 Subject: [PATCH] tms34061_device: converted to devcb2 (nw) --- src/emu/video/tms34061.c | 43 ++++++++++--------------------------- src/emu/video/tms34061.h | 35 +++++++++++++++++------------- src/mame/drivers/capbowl.c | 19 ++++++---------- src/mame/drivers/guab.c | 19 ++++++---------- src/mame/drivers/itech8.c | 22 ++++++------------- src/mame/drivers/jpmsys5.c | 17 ++++++--------- src/mame/includes/capbowl.h | 1 + src/mame/includes/itech8.h | 3 +-- src/mame/includes/jpmsys5.h | 1 + 9 files changed, 60 insertions(+), 100 deletions(-) diff --git a/src/emu/video/tms34061.c b/src/emu/video/tms34061.c index 77ca4f3ab1b..86cc7f4260d 100644 --- a/src/emu/video/tms34061.c +++ b/src/emu/video/tms34061.c @@ -30,7 +30,9 @@ const device_type TMS34061 = &device_creator; tms34061_device::tms34061_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, TMS34061, "tms34061", tag, owner, clock, "tms34061", __FILE__), device_video_interface(mconfig, *this), - //m_regs[TMS34061_REGCOUNT], + m_rowshift(0), + m_vramsize(0), + m_interrupt_cb(*this), m_xmask(0), m_yshift(0), m_vrammask(0), @@ -39,35 +41,9 @@ tms34061_device::tms34061_device(const machine_config &mconfig, const char *tag, m_latchdata(0), m_shiftreg(NULL), m_timer(NULL) - //m_display.blanked(0), - //m_display.vram(NULL), - //m_display.latchram(NULL), - //m_display.regs(NULL), - //m_display.dispstart(0), - //m_display.screen(NULL) { -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void tms34061_device::device_config_complete() -{ - // inherit a copy of the static data - const tms34061_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - - // or initialize to defaults if none provided - else - { - m_rowshift = 0; - m_vramsize = 0; - //(*m_interrupt)(int state) - } + memset(m_regs, 0, sizeof(m_regs)); + memset(&m_display, 0, sizeof(m_display)); } //------------------------------------------------- @@ -76,6 +52,9 @@ void tms34061_device::device_config_complete() void tms34061_device::device_start() { + /* resolve callbak */ + m_interrupt_cb.resolve(); + /* reset the data */ m_vrammask = m_vramsize - 1; @@ -151,13 +130,13 @@ static const char *const regnames[] = void tms34061_device::update_interrupts() { /* if we have a callback, process it */ - if (m_interrupt) + if (!m_interrupt_cb.isnull()) { /* if the status bit is set, and ints are enabled, turn it on */ if ((m_regs[TMS34061_STATUS] & 0x0001) && (m_regs[TMS34061_CONTROL1] & 0x0400)) - (*m_interrupt)(m_screen->machine(), ASSERT_LINE); + m_interrupt_cb(ASSERT_LINE); else - (*m_interrupt)(m_screen->machine(), CLEAR_LINE); + m_interrupt_cb(CLEAR_LINE); } } diff --git a/src/emu/video/tms34061.h b/src/emu/video/tms34061.h index fc0dc9a6e33..dfaf9e286f5 100644 --- a/src/emu/video/tms34061.h +++ b/src/emu/video/tms34061.h @@ -11,6 +11,17 @@ #ifndef __TMS34061_H__ #define __TMS34061_H__ + +#define MCFG_TMS34061_ROWSHIFT(_shift) \ + tms34061_device::set_rowshift(*device, _shift); + +#define MCFG_TMS34061_VRAM_SIZE(_size) \ + tms34061_device::set_vram_size(*device, _size); + +#define MCFG_TMS34061_INTERRUPT_CB(_devcb) \ + devcb = &tms34061_device::set_interrupt_callback(*device, DEVCB2_##_devcb); + + /* register constants */ enum { @@ -35,14 +46,6 @@ enum TMS34061_REGCOUNT }; -/* interface structure */ -struct tms34061_interface -{ - UINT8 m_rowshift; /* VRAM address is (row << rowshift) | col */ - UINT32 m_vramsize; /* size of video RAM */ - void (*m_interrupt)(running_machine &machine, int state); /* interrupt gen callback */ -}; - /* display state structure */ struct tms34061_display { @@ -59,12 +62,15 @@ struct tms34061_display // ======================> tms34061_device class tms34061_device : public device_t, - public device_video_interface, - public tms34061_interface + public device_video_interface { public: // construction/destruction tms34061_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + static void set_rowshift(device_t &device, UINT8 rowshift) { downcast(device).m_rowshift = rowshift; } + static void set_vram_size(device_t &device, UINT32 vramsize) { downcast(device).m_vramsize = vramsize; } + template static devcb2_base &set_interrupt_callback(device_t &device, _Object object) { return downcast(device).m_interrupt_cb.set_callback(object); } /* reads/writes to the 34061 */ UINT8 read(address_space &space, int col, int row, int func); @@ -81,11 +87,14 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); private: + UINT8 m_rowshift; /* VRAM address is (row << rowshift) | col */ + UINT32 m_vramsize; /* size of video RAM */ + devcb2_write_line m_interrupt_cb; /* interrupt gen callback */ + UINT16 m_regs[TMS34061_REGCOUNT]; UINT16 m_xmask; UINT8 m_yshift; @@ -108,8 +117,4 @@ private: // device type definition extern const device_type TMS34061; -#define MCFG_TMS34061_ADD(_tag, _interface) \ - MCFG_DEVICE_ADD(_tag, TMS34061, 0) \ - MCFG_DEVICE_CONFIG(_interface) - #endif diff --git a/src/mame/drivers/capbowl.c b/src/mame/drivers/capbowl.c index e3f5555f44b..bc9417d5006 100644 --- a/src/mame/drivers/capbowl.c +++ b/src/mame/drivers/capbowl.c @@ -322,21 +322,11 @@ static const ay8910_interface ay8910_config = * *************************************/ -static void generate_interrupt( running_machine &machine, int state ) +WRITE_LINE_MEMBER(capbowl_state::generate_tms34061_interrupt) { - capbowl_state *driver = machine.driver_data(); - driver->m_maincpu->set_input_line(M6809_FIRQ_LINE, state); + m_maincpu->set_input_line(M6809_FIRQ_LINE, state); } -static const struct tms34061_interface tms34061intf = -{ - 8, /* VRAM address is (row << rowshift) | col */ - 0x10000, /* size of video RAM */ - generate_interrupt /* interrupt gen callback */ -}; - - - /************************************* * * Machine driver @@ -383,7 +373,10 @@ static MACHINE_CONFIG_START( capbowl, capbowl_state ) MCFG_SCREEN_REFRESH_RATE(57) MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update_capbowl) - MCFG_TMS34061_ADD("tms34061", tms34061intf) + MCFG_DEVICE_ADD("tms34061", TMS34061, 0) + MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ + MCFG_TMS34061_VRAM_SIZE(0x10000) /* size of video RAM */ + MCFG_TMS34061_INTERRUPT_CB(WRITELINE(capbowl_state, generate_tms34061_interrupt)) /* interrupt gen callback */ /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/guab.c b/src/mame/drivers/guab.c index 9b657fe6eeb..b86abbbe9ac 100644 --- a/src/mame/drivers/guab.c +++ b/src/mame/drivers/guab.c @@ -91,6 +91,7 @@ public: struct ef9369 m_pal; emu_timer *m_fdc_timer; struct wd1770 m_fdc; + DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt); DECLARE_WRITE16_MEMBER(guab_tms34061_w); DECLARE_READ16_MEMBER(guab_tms34061_r); DECLARE_WRITE16_MEMBER(ef9369_w); @@ -138,20 +139,11 @@ static const ptm6840_interface ptm_intf = * TMS34061 CRTC *****************/ -static void tms_interrupt(running_machine &machine, int state) +WRITE_LINE_MEMBER(guab_state::generate_tms34061_interrupt) { - guab_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INT_TMS34061, state); + m_maincpu->set_input_line(INT_TMS34061, state); } -static const struct tms34061_interface tms34061intf = -{ - 8, /* VRAM address is (row << rowshift) | col */ - 0x40000, /* Size of video RAM */ - tms_interrupt /* Interrupt gen callback */ -}; - - WRITE16_MEMBER(guab_state::guab_tms34061_w) { int func = (offset >> 19) & 3; @@ -810,7 +802,10 @@ static MACHINE_CONFIG_START( guab, guab_state ) MCFG_PALETTE_ADD("palette", 16) - MCFG_TMS34061_ADD("tms34061", tms34061intf) + MCFG_DEVICE_ADD("tms34061", TMS34061, 0) + MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ + MCFG_TMS34061_VRAM_SIZE(0x40000) /* size of video RAM */ + MCFG_TMS34061_INTERRUPT_CB(WRITELINE(guab_state, generate_tms34061_interrupt)) /* interrupt gen callback */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c index 81f380b9e96..789342ded9a 100644 --- a/src/mame/drivers/itech8.c +++ b/src/mame/drivers/itech8.c @@ -1608,24 +1608,13 @@ static const ay8910_interface ay8910_config = * *************************************/ -void itech8_state::static_generate_interrupt(running_machine &machine, int state_num) { machine.driver_data()->generate_interrupt(state_num); } -void itech8_state::generate_interrupt(int state_num) +WRITE_LINE_MEMBER(itech8_state::generate_tms34061_interrupt) { - itech8_update_interrupts(-1, state_num, -1); + itech8_update_interrupts(-1, state, -1); - if (FULL_LOGGING && state_num) logerror("------------ DISPLAY INT (%d) --------------\n", m_screen->vpos()); + if (FULL_LOGGING && state) logerror("------------ DISPLAY INT (%d) --------------\n", m_screen->vpos()); } - -static const struct tms34061_interface tms34061intf = -{ - 8, /* VRAM address is (row << rowshift) | col */ - 0x40000, /* size of video RAM */ - &itech8_state::static_generate_interrupt /* interrupt gen callback */ -}; - - - /************************************* * * Machine driver @@ -1653,7 +1642,10 @@ static MACHINE_CONFIG_START( itech8_core_lo, itech8_state ) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_SIZE(512, 263) - MCFG_TMS34061_ADD("tms34061", tms34061intf) + MCFG_DEVICE_ADD("tms34061", TMS34061, 0) + MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ + MCFG_TMS34061_VRAM_SIZE(0x40000) /* size of video RAM */ + MCFG_TMS34061_INTERRUPT_CB(WRITELINE(itech8_state, generate_tms34061_interrupt)) /* interrupt gen callback */ /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/jpmsys5.c b/src/mame/drivers/jpmsys5.c index cec82599acc..f13d018ea3d 100644 --- a/src/mame/drivers/jpmsys5.c +++ b/src/mame/drivers/jpmsys5.c @@ -61,19 +61,11 @@ enum int_levels * *************************************/ -static void tms_interrupt(running_machine &machine, int state) +WRITE_LINE_MEMBER(jpmsys5_state::generate_tms34061_interrupt) { - jpmsys5_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INT_TMS34061, state); + m_maincpu->set_input_line(INT_TMS34061, state); } -static const struct tms34061_interface tms34061intf = -{ - 8, /* VRAM address is (row << rowshift) | col */ - 0x40000, /* Size of video RAM - FIXME: Should be 128kB + 32kB */ - tms_interrupt /* Interrupt gen callback */ -}; - WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w) { int func = (offset >> 19) & 3; @@ -663,7 +655,10 @@ static MACHINE_CONFIG_START( jpmsys5v, jpmsys5_state ) MCFG_SCREEN_RAW_PARAMS(XTAL_40MHz / 4, 676, 20*4, 147*4, 256, 0, 254) MCFG_SCREEN_UPDATE_DRIVER(jpmsys5_state, screen_update_jpmsys5v) - MCFG_TMS34061_ADD("tms34061", tms34061intf) + MCFG_DEVICE_ADD("tms34061", TMS34061, 0) + MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ + MCFG_TMS34061_VRAM_SIZE(0x40000) /* size of video RAM */ + MCFG_TMS34061_INTERRUPT_CB(WRITELINE(jpmsys5_state, generate_tms34061_interrupt)) /* interrupt gen callback */ MCFG_PALETTE_ADD("palette", 16) diff --git a/src/mame/includes/capbowl.h b/src/mame/includes/capbowl.h index 07438cc525a..2d5252f60b1 100644 --- a/src/mame/includes/capbowl.h +++ b/src/mame/includes/capbowl.h @@ -55,6 +55,7 @@ public: TIMER_CALLBACK_MEMBER(capbowl_update); inline rgb_t pen_for_pixel( UINT8 *src, UINT8 pix ); DECLARE_WRITE_LINE_MEMBER(firqhandler); + DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h index a14aef4faec..79387606007 100644 --- a/src/mame/includes/itech8.h +++ b/src/mame/includes/itech8.h @@ -69,8 +69,7 @@ public: UINT8 m_grmatch_palcontrol; UINT8 m_grmatch_xscroll; rgb_t m_grmatch_palette[2][16]; - static void static_generate_interrupt(running_machine &machine, int state_num); - void generate_interrupt(int state_num); + DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt); DECLARE_WRITE8_MEMBER(itech8_nmi_ack_w); DECLARE_WRITE8_MEMBER(blitter_w); DECLARE_WRITE8_MEMBER(rimrockn_bank_w); diff --git a/src/mame/includes/jpmsys5.h b/src/mame/includes/jpmsys5.h index bc1d9007b57..9c16c32c093 100644 --- a/src/mame/includes/jpmsys5.h +++ b/src/mame/includes/jpmsys5.h @@ -53,6 +53,7 @@ public: UINT8 m_a0_data_out; UINT8 m_a1_data_out; UINT8 m_a2_data_out; + DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt); DECLARE_WRITE16_MEMBER(sys5_tms34061_w); DECLARE_READ16_MEMBER(sys5_tms34061_r); DECLARE_WRITE16_MEMBER(ramdac_w);