diff --git a/src/emu/machine/i8214.c b/src/emu/machine/i8214.c index 820fffecf46..78b60178690 100644 --- a/src/emu/machine/i8214.c +++ b/src/emu/machine/i8214.c @@ -44,11 +44,11 @@ inline void i8214_device::trigger_interrupt(int level) m_int_dis = 1; // disable next level group - m_out_enlg_func(0); + m_write_enlg(0); // toggle interrupt line - m_out_int_func(ASSERT_LINE); - m_out_int_func(CLEAR_LINE); + m_write_irq(ASSERT_LINE); + m_write_irq(CLEAR_LINE); } @@ -91,34 +91,14 @@ inline void i8214_device::check_interrupt() // i8214_device - constructor //------------------------------------------------- -i8214_device::i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, I8214, "I8214", tag, owner, clock, "i8214", __FILE__) +i8214_device::i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, I8214, "I8214", tag, owner, clock, "i8214", __FILE__), + m_write_irq(*this), + m_write_enlg(*this) { } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void i8214_device::device_config_complete() -{ - // inherit a copy of the static data - const i8214_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_out_int_cb, 0, sizeof(m_out_int_cb)); - memset(&m_out_enlg_cb, 0, sizeof(m_out_enlg_cb)); - } -} - - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -126,8 +106,8 @@ void i8214_device::device_config_complete() void i8214_device::device_start() { // resolve callbacks - m_out_int_func.resolve(m_out_int_cb, *this); - m_out_enlg_func.resolve(m_out_enlg_cb, *this); + m_write_irq.resolve_safe(); + m_write_enlg.resolve_safe(); m_int_dis = 0; @@ -170,7 +150,7 @@ void i8214_device::b_w(UINT8 data) m_int_dis = 0; // enable next level group - m_out_enlg_func(1); + m_write_enlg(1); check_interrupt(); } diff --git a/src/emu/machine/i8214.h b/src/emu/machine/i8214.h index a5fe2c9ae0a..deae3c2fa45 100644 --- a/src/emu/machine/i8214.h +++ b/src/emu/machine/i8214.h @@ -37,13 +37,11 @@ // INTERFACE CONFIGURATION MACROS ///************************************************************************* -#define MCFG_I8214_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, I8214, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_I8214_IRQ_CALLBACK(_write) \ + devcb = &i8214_device::set_irq_wr_callback(*device, DEVCB2_##_write); - -#define I8214_INTERFACE(name) \ - const i8214_interface (name) = +#define MCFG_I8214_ENLG_CALLBACK(_write) \ + devcb = &i8214_device::set_enlg_wr_callback(*device, DEVCB2_##_write); @@ -51,23 +49,17 @@ // TYPE DEFINITIONS ///************************************************************************* -// ======================> i8214_interface - -struct i8214_interface -{ - devcb_write_line m_out_int_cb; - devcb_write_line m_out_enlg_cb; -}; - - // ======================> i8214_device -class i8214_device : public device_t, public i8214_interface +class i8214_device : public device_t { public: // construction/destruction i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_irq.set_callback(object); } + template static devcb2_base &set_enlg_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_enlg.set_callback(object); } + DECLARE_WRITE_LINE_MEMBER( sgs_w ); DECLARE_WRITE_LINE_MEMBER( etlg_w ); DECLARE_WRITE_LINE_MEMBER( inte_w ); @@ -78,15 +70,14 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); private: inline void trigger_interrupt(int level); inline void check_interrupt(); - devcb_resolved_write_line m_out_int_func; - devcb_resolved_write_line m_out_enlg_func; + devcb2_write_line m_write_irq; + devcb2_write_line m_write_enlg; int m_inte; // interrupt enable int m_int_dis; // interrupt disable flip-flop diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c index 28fc5b1ebc3..a8996fbf4ea 100644 --- a/src/mess/drivers/v1050.c +++ b/src/mess/drivers/v1050.c @@ -666,12 +666,6 @@ WRITE_LINE_MEMBER(v1050_state::pic_int_w) } } -static I8214_INTERFACE( pic_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(v1050_state,pic_int_w), - DEVCB_NULL -}; - // Display 8255A Interface WRITE8_MEMBER(v1050_state::disp_ppi_pc_w) @@ -1120,7 +1114,8 @@ static MACHINE_CONFIG_START( v1050, v1050_state ) MCFG_FRAGMENT_ADD(v1050_video) // devices - MCFG_I8214_ADD(UPB8214_TAG, XTAL_16MHz/4, pic_intf) + MCFG_DEVICE_ADD(UPB8214_TAG, I8214, XTAL_16MHz/4) + MCFG_I8214_IRQ_CALLBACK(WRITELINE(v1050_state, pic_int_w)) MCFG_DEVICE_ADD(MSM58321RS_TAG, MSM58321, XTAL_32_768kHz) MCFG_MSM58321_D0_HANDLER(WRITELINE(v1050_state, rtc_ppi_pa_0_w))