diff --git a/src/emu/machine/rp5c15.c b/src/emu/machine/rp5c15.c index 1f83325cb26..9a4694a1962 100644 --- a/src/emu/machine/rp5c15.c +++ b/src/emu/machine/rp5c15.c @@ -130,7 +130,7 @@ inline void rp5c15_device::set_alarm_line() { if (LOG) logerror("RP5C15 '%s' Alarm %u\n", tag(), alarm); - m_out_alarm_func(alarm); + m_out_alarm_cb(alarm); m_alarm = alarm; } } @@ -188,6 +188,8 @@ inline void rp5c15_device::check_alarm() rp5c15_device::rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, RP5C15, "RP5C15", tag, owner, clock, "rp5c15", __FILE__), device_rtc_interface(mconfig, *this), + m_out_alarm_cb(*this), + m_out_clkout_cb(*this), m_alarm(1), m_alarm_on(1), m_1hz(1), @@ -196,29 +198,6 @@ rp5c15_device::rp5c15_device(const machine_config &mconfig, const char *tag, dev { } - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void rp5c15_device::device_config_complete() -{ - // inherit a copy of the static data - const rp5c15_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_out_alarm_cb, 0, sizeof(m_out_alarm_cb)); - memset(&m_out_clkout_cb, 0, sizeof(m_out_clkout_cb)); - } -} - - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -226,8 +205,8 @@ void rp5c15_device::device_config_complete() void rp5c15_device::device_start() { // resolve callbacks - m_out_alarm_func.resolve(m_out_alarm_cb, *this); - m_out_clkout_func.resolve(m_out_clkout_cb, *this); + m_out_alarm_cb.resolve_safe(); + m_out_clkout_cb.resolve_safe(); // allocate timers m_clock_timer = timer_alloc(TIMER_CLOCK); @@ -296,7 +275,7 @@ void rp5c15_device::device_timer(emu_timer &timer, device_timer_id id, int param case TIMER_CLKOUT: m_clkout = !m_clkout; - m_out_clkout_func(m_clkout); + m_out_clkout_cb(m_clkout); break; } } diff --git a/src/emu/machine/rp5c15.h b/src/emu/machine/rp5c15.h index d73ce74114d..18daeb562d4 100644 --- a/src/emu/machine/rp5c15.h +++ b/src/emu/machine/rp5c15.h @@ -34,39 +34,27 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_RP5C15_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD((_tag), RP5C15, _clock) \ - MCFG_DEVICE_CONFIG(_config) - - -#define RP5C15_INTERFACE(name) \ - const rp5c15_interface (name) = - +#define MCFG_RP5C15_OUT_ALARM_CB(_devcb) \ + devcb = &rp5c15_device::set_out_alarm_callback(*device, DEVCB2_##_devcb); +#define MCFG_RP5C15_OUT_CLKOUT_CB(_devcb) \ + devcb = &rp5c15_device::set_out_clkout_callback(*device, DEVCB2_##_devcb); //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// ======================> rp5c15_interface - -struct rp5c15_interface -{ - devcb_write_line m_out_alarm_cb; - devcb_write_line m_out_clkout_cb; -}; - - - // ======================> rp5c15_device class rp5c15_device : public device_t, - public device_rtc_interface, - public rp5c15_interface + public device_rtc_interface { public: // construction/destruction rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + template static devcb2_base &set_out_alarm_callback(device_t &device, _Object object) { return downcast(device).m_out_alarm_cb.set_callback(object); } + template static devcb2_base &set_out_clkout_callback(device_t &device, _Object object) { return downcast(device).m_out_clkout_cb.set_callback(object); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -74,7 +62,6 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); @@ -93,8 +80,8 @@ private: static const device_timer_id TIMER_16HZ = 1; static const device_timer_id TIMER_CLKOUT = 2; - devcb_resolved_write_line m_out_alarm_func; - devcb_resolved_write_line m_out_clkout_func; + devcb2_write_line m_out_alarm_cb; + devcb2_write_line m_out_clkout_cb; UINT8 m_reg[2][13]; // clock registers UINT8 m_ram[13]; // RAM diff --git a/src/mess/drivers/atarist.c b/src/mess/drivers/atarist.c index f72b832d7c3..189ffdba991 100644 --- a/src/mess/drivers/atarist.c +++ b/src/mess/drivers/atarist.c @@ -1876,17 +1876,6 @@ WRITE_LINE_MEMBER( st_state::fdc_drq_w ) } -//------------------------------------------------- -// RP5C15_INTERFACE( rtc_intf ) -//------------------------------------------------- - -static RP5C15_INTERFACE( rtc_intf ) -{ - DEVCB_NULL, - DEVCB_NULL -}; - - //************************************************************************** // MACHINE INITIALIZATION //************************************************************************** @@ -2216,7 +2205,7 @@ static MACHINE_CONFIG_START( megast, megast_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) // devices - MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) + MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) MCFG_WD1772x_ADD(WD1772_TAG, Y2/4) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT @@ -2377,7 +2366,7 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( megaste, ste ) MCFG_CPU_MODIFY(M68000_TAG) MCFG_CPU_PROGRAM_MAP(megaste_map) - MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) + MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) MCFG_DEVICE_ADD(Z8530_TAG, SCC8530, Y2/4) /* internal ram */ diff --git a/src/mess/drivers/lcmate2.c b/src/mess/drivers/lcmate2.c index 27aa56f08b3..6091532c0b4 100644 --- a/src/mess/drivers/lcmate2.c +++ b/src/mess/drivers/lcmate2.c @@ -221,12 +221,6 @@ static GFXDECODE_START( lcmate2 ) GFXDECODE_END -static RP5C15_INTERFACE( rtc_intf ) -{ - DEVCB_NULL, - DEVCB_NULL -}; - static MACHINE_CONFIG_START( lcmate2, lcmate2_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_3_579545MHz) // confirmed @@ -258,7 +252,7 @@ static MACHINE_CONFIG_START( lcmate2, lcmate2_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_RP5C15_ADD("rtc", XTAL_32_768kHz, rtc_intf) + MCFG_DEVICE_ADD("rtc", RP5C15, XTAL_32_768kHz) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/mz2500.c b/src/mess/drivers/mz2500.c index 14308101b55..e57d5d6ca54 100644 --- a/src/mess/drivers/mz2500.c +++ b/src/mess/drivers/mz2500.c @@ -2090,12 +2090,6 @@ WRITE_LINE_MEMBER(mz2500_state::mz2500_rtc_alarm_irq) // m_maincpu->set_input_line_and_vector(0, HOLD_LINE,drvm_irq_vector[3]); } -static RP5C15_INTERFACE( rtc_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(mz2500_state,mz2500_rtc_alarm_irq), - DEVCB_NULL -}; - static Z80SIO_INTERFACE( mz2500_sio_intf ) { 0, 0, 0, 0, @@ -2131,8 +2125,9 @@ static MACHINE_CONFIG_START( mz2500, mz2500_state ) MCFG_I8255_ADD( "i8255_0", ppi8255_intf ) MCFG_Z80PIO_ADD( "z80pio_1", 6000000, mz2500_pio1_intf ) MCFG_Z80SIO0_ADD( "z80sio", 6000000, mz2500_sio_intf ) - MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) - + MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) + MCFG_RP5C15_OUT_ALARM_CB(WRITELINE(mz2500_state, mz2500_rtc_alarm_irq)) + MCFG_DEVICE_ADD("pit", PIT8253, 0) MCFG_PIT8253_CLK0(31250) MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mz2500_state, pit8253_clk0_irq)) diff --git a/src/mess/drivers/x68k.c b/src/mess/drivers/x68k.c index 636dd206dd8..cb1658d7e39 100644 --- a/src/mess/drivers/x68k.c +++ b/src/mess/drivers/x68k.c @@ -1444,12 +1444,6 @@ static const okim6258_interface x68k_okim6258_interface = OUTPUT_10BITS, }; -static RP5C15_INTERFACE( rtc_intf ) -{ - DEVCB_DEVICE_LINE_MEMBER(MC68901_TAG, mc68901_device, i0_w), - DEVCB_NULL -}; - static INPUT_PORTS_START( x68000 ) PORT_START("ctrltype") PORT_CONFNAME(0x0f, 0x00, "Joystick Port 1") @@ -1925,7 +1919,8 @@ static MACHINE_CONFIG_FRAGMENT( x68000_base ) MCFG_DEVICE_ADD( "scc", SCC8530, 5000000 ) - MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) + MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) + MCFG_RP5C15_OUT_ALARM_CB(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER)