From fd2cbd7d4999f90a8d259a71ac4542569b25335b Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Tue, 18 Mar 2014 13:59:30 +0000 Subject: [PATCH] mccs1850: devcb2. (nw) --- src/emu/machine/mccs1850.c | 39 +++++++++++++++++++------------------- src/emu/machine/mccs1850.h | 19 ++++++++++++++----- src/mess/drivers/next.c | 3 +-- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/emu/machine/mccs1850.c b/src/emu/machine/mccs1850.c index 7f7113336f5..ebc38da8b13 100644 --- a/src/emu/machine/mccs1850.c +++ b/src/emu/machine/mccs1850.c @@ -282,28 +282,24 @@ inline void mccs1850_device::advance_seconds() // mccs1850_device - constructor //------------------------------------------------- -mccs1850_device::mccs1850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, MCCS1850, "MCCS1850", tag, owner, clock, "mccs1850", __FILE__), - device_rtc_interface(mconfig, *this), - device_nvram_interface(mconfig, *this), - m_pse(1), - m_counter(0), - m_ce(0), - m_sck(0), - m_sdo(1), - m_sdi(0), - m_state(STATE_ADDRESS), - m_bits(0) +mccs1850_device::mccs1850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, MCCS1850, "MCCS1850", tag, owner, clock, "mccs1850", __FILE__), + device_rtc_interface(mconfig, *this), + device_nvram_interface(mconfig, *this), + int_cb(*this), + pse_cb(*this), + nuc_cb(*this), + m_pse(1), + m_counter(0), + m_ce(0), + m_sck(0), + m_sdo(1), + m_sdi(0), + m_state(STATE_ADDRESS), + m_bits(0) { } -void mccs1850_device::set_cb(line_cb_t _int_cb, line_cb_t _pse_cb, line_cb_t _nuc_cb) -{ - int_cb = _int_cb; - pse_cb = _pse_cb; - nuc_cb = _nuc_cb; -} - //------------------------------------------------- // device_start - device-specific startup @@ -311,6 +307,11 @@ void mccs1850_device::set_cb(line_cb_t _int_cb, line_cb_t _pse_cb, line_cb_t _nu void mccs1850_device::device_start() { + // resolve callbacks + int_cb.resolve(); + pse_cb.resolve(); + nuc_cb.resolve(); + // allocate timers m_clock_timer = timer_alloc(TIMER_CLOCK); m_clock_timer->adjust(attotime::from_hz(clock() / 32768), 0, attotime::from_hz(clock() / 32768)); diff --git a/src/emu/machine/mccs1850.h b/src/emu/machine/mccs1850.h index 4f08af6ee51..8b142e14b22 100644 --- a/src/emu/machine/mccs1850.h +++ b/src/emu/machine/mccs1850.h @@ -33,9 +33,15 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_MCCS1850_ADD(_tag, _clock, _int_cb, _pse_cb, _nuc_cb) \ - MCFG_DEVICE_ADD(_tag, MCCS1850, _clock) \ - downcast(device)->set_cb(_int_cb, _pse_cb, _nuc_cb); +#define MCFG_MCCS1850_INT_CALLBACK(_write) \ + devcb = &mccs1850_device::set_int_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_MCCS1850_PSE_CALLBACK(_write) \ + devcb = &mccs1850_device::set_pse_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_MCCS1850_NUC_CALLBACK(_write) \ + devcb = &mccs1850_device::set_nuc_wr_callback(*device, DEVCB2_##_write); + //************************************************************************** @@ -51,7 +57,10 @@ class mccs1850_device : public device_t, public: // construction/destruction mccs1850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - void set_cb(line_cb_t int_cb, line_cb_t pse_cb, line_cb_t nuc_cb); + + template static devcb2_base &set_int_wr_callback(device_t &device, _Object object) { return downcast(device).int_cb.set_callback(object); } + template static devcb2_base &set_pse_wr_callback(device_t &device, _Object object) { return downcast(device).pse_cb.set_callback(object); } + template static devcb2_base &set_nuc_wr_callback(device_t &device, _Object object) { return downcast(device).nuc_cb.set_callback(object); } DECLARE_WRITE_LINE_MEMBER( ce_w ); DECLARE_WRITE_LINE_MEMBER( sck_w ); @@ -81,7 +90,7 @@ private: static const device_timer_id TIMER_CLOCK = 0; - line_cb_t int_cb, pse_cb, nuc_cb; + devcb2_write_line int_cb, pse_cb, nuc_cb; UINT8 m_ram[0x80]; // RAM diff --git a/src/mess/drivers/next.c b/src/mess/drivers/next.c index 64da9bf543a..407243f5ab3 100644 --- a/src/mess/drivers/next.c +++ b/src/mess/drivers/next.c @@ -960,8 +960,7 @@ static MACHINE_CONFIG_START( next_base, next_state ) // devices MCFG_NSCSI_BUS_ADD("scsibus") - MCFG_MCCS1850_ADD("rtc", XTAL_32_768kHz, - line_cb_t(), line_cb_t(), line_cb_t()) + MCFG_DEVICE_ADD("rtc", MCCS1850, XTAL_32_768kHz) MCFG_DEVICE_ADD("scc", SCC8530, XTAL_25MHz) MCFG_Z8530_INTRQ_CALLBACK(WRITELINE(next_state, scc_irq)) MCFG_NEXTKBD_ADD("keyboard",