rp5c15.c: converted to devcb2 (nw)

This commit is contained in:
Ivan Vangelista 2014-03-19 12:25:59 +00:00
parent 59d013bc52
commit 7721c04301
6 changed files with 24 additions and 85 deletions

View File

@ -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<const rp5c15_interface *>(static_config());
if (intf != NULL)
*static_cast<rp5c15_interface *>(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;
}
}

View File

@ -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<class _Object> static devcb2_base &set_out_alarm_callback(device_t &device, _Object object) { return downcast<rp5c15_device &>(device).m_out_alarm_cb.set_callback(object); }
template<class _Object> static devcb2_base &set_out_clkout_callback(device_t &device, _Object object) { return downcast<rp5c15_device &>(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

View File

@ -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 */

View File

@ -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 */

View File

@ -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))

View File

@ -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)