mirror of
https://github.com/holub/mame
synced 2025-05-10 00:01:52 +03:00
Updated tmp68301 device to use devcb2 (nw)
This commit is contained in:
parent
97f9e94597
commit
bdf177df07
@ -85,43 +85,24 @@ WRITE16_MEMBER(tmp68301_device::pdir_w)
|
||||
|
||||
READ16_MEMBER(tmp68301_device::pdr_r)
|
||||
{
|
||||
return m_in_parallel_func(0) & ~m_pdir;
|
||||
return m_in_parallel_cb(0) & ~m_pdir;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(tmp68301_device::pdr_w)
|
||||
{
|
||||
m_out_parallel_func(0,data & m_pdir);
|
||||
m_out_parallel_cb(0, data & m_pdir, 0xffff);
|
||||
}
|
||||
|
||||
|
||||
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_in_parallel_cb(*this),
|
||||
m_out_parallel_cb(*this),
|
||||
m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, NULL, *ADDRESS_MAP_NAME(tmp68301_regs))
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void tmp68301_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const tmp68301_interface *intf = reinterpret_cast<const tmp68301_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<tmp68301_interface *>(this) = *intf;
|
||||
|
||||
// or defaults to 0 if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_parallel_cb, 0, sizeof(m_in_parallel_cb));
|
||||
memset(&m_out_parallel_cb, 0, sizeof(m_out_parallel_cb));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
@ -133,8 +114,8 @@ void tmp68301_device::device_start()
|
||||
for (i = 0; i < 3; i++)
|
||||
m_tmp68301_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmp68301_device::timer_callback), this));
|
||||
|
||||
m_in_parallel_func.resolve(m_in_parallel_cb, *this);
|
||||
m_out_parallel_func.resolve(m_out_parallel_cb, *this);
|
||||
m_in_parallel_cb.resolve_safe(0);
|
||||
m_out_parallel_cb.resolve_safe();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -5,41 +5,30 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
/* TODO: frequency & hook it up with m68k */
|
||||
#define MCFG_TMP68301_ADD(_tag, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, TMP68301, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
/* TODO: serial ports, frequency & hook it up with m68k */
|
||||
#define MCFG_TMP68301_IN_PARALLEL_CALLBACK(_devcb) \
|
||||
devcb = &tmp68301_device::set_in_parallel_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_TMP68301_MODIFY(_tag, _config) \
|
||||
MCFG_DEVICE_MODIFY(_tag) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define TMP68301_INTERFACE(name) \
|
||||
const tmp68301_interface (name) =
|
||||
#define MCFG_TMP68301_OUT_PARALLEL_CALLBACK(_devcb) \
|
||||
devcb = &tmp68301_device::set_out_parallel_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> mb_vcu_interface
|
||||
|
||||
struct tmp68301_interface
|
||||
{
|
||||
devcb_read16 m_in_parallel_cb;
|
||||
devcb_write16 m_out_parallel_cb;
|
||||
// TODO: serial ports
|
||||
};
|
||||
|
||||
class tmp68301_device : public device_t,
|
||||
public device_memory_interface,
|
||||
public tmp68301_interface
|
||||
public device_memory_interface
|
||||
{
|
||||
public:
|
||||
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
~tmp68301_device() {}
|
||||
|
||||
template<class _Object> static devcb2_base &set_in_parallel_callback(device_t &device, _Object object) { return downcast<tmp68301_device &>(device).m_in_parallel_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_parallel_callback(device_t &device, _Object object) { return downcast<tmp68301_device &>(device).m_out_parallel_cb.set_callback(object); }
|
||||
|
||||
// Hardware Registers
|
||||
DECLARE_READ16_MEMBER( regs_r );
|
||||
DECLARE_WRITE16_MEMBER( regs_w );
|
||||
@ -62,14 +51,14 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
||||
|
||||
devcb_resolved_read16 m_in_parallel_func;
|
||||
devcb_resolved_write16 m_out_parallel_func;
|
||||
private:
|
||||
devcb2_read16 m_in_parallel_cb;
|
||||
devcb2_write16 m_out_parallel_cb;
|
||||
|
||||
// internal state
|
||||
UINT16 m_regs[0x400];
|
||||
|
||||
|
@ -636,13 +636,6 @@ static const z80_daisy_config daisy_chain_sound[] =
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_interface )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( csplayh5, csplayh5_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -650,7 +643,7 @@ static MACHINE_CONFIG_START( csplayh5, csplayh5_state )
|
||||
MCFG_CPU_PROGRAM_MAP(csplayh5_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", csplayh5_state, csplayh5_irq, "screen", 0, 1)
|
||||
|
||||
MCFG_TMP68301_ADD("tmp68301",tmp68301_interface)
|
||||
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0)
|
||||
|
||||
#if USE_H8
|
||||
MCFG_CPU_ADD("subcpu", H83002, 16000000) /* unknown clock */
|
||||
|
@ -934,12 +934,6 @@ static const z80_daisy_config daisy_chain_sound[] =
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_interface )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER16(niyanpai_state,tmp68301_parallel_port_w)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( niyanpai, niyanpai_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -947,7 +941,8 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state )
|
||||
MCFG_CPU_PROGRAM_MAP(niyanpai_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", niyanpai_state, niyanpai_interrupt)
|
||||
|
||||
MCFG_TMP68301_ADD("tmp68301",tmp68301_interface)
|
||||
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0)
|
||||
MCFG_TMP68301_OUT_PARALLEL_CALLBACK(WRITE16(niyanpai_state, tmp68301_parallel_port_w))
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* TMPZ84C011, 8.00 MHz */
|
||||
MCFG_CPU_CONFIG(daisy_chain_sound)
|
||||
|
@ -750,18 +750,6 @@ INTERRUPT_GEN_MEMBER(realbrk_state::realbrk_interrupt)
|
||||
m_tmp68301->external_interrupt_1();
|
||||
}
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_default_interface )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER16(realbrk_state,realbrk_flipscreen_w)
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_pkgnsh_interface )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( realbrk, realbrk_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -769,7 +757,8 @@ static MACHINE_CONFIG_START( realbrk, realbrk_state )
|
||||
MCFG_CPU_PROGRAM_MAP(realbrk_mem)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", realbrk_state, realbrk_interrupt)
|
||||
|
||||
MCFG_TMP68301_ADD("tmp68301", tmp68301_default_interface)
|
||||
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0)
|
||||
MCFG_TMP68301_OUT_PARALLEL_CALLBACK(WRITE16(realbrk_state,realbrk_flipscreen_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -799,7 +788,8 @@ static MACHINE_CONFIG_DERIVED( pkgnsh, realbrk )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(pkgnsh_mem)
|
||||
|
||||
MCFG_TMP68301_MODIFY("tmp68301", tmp68301_pkgnsh_interface)
|
||||
MCFG_DEVICE_MODIFY("tmp68301")
|
||||
MCFG_TMP68301_OUT_PARALLEL_CALLBACK(NULL)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( pkgnshdx, pkgnsh )
|
||||
|
@ -1987,37 +1987,13 @@ static const x1_010_interface x1_010_sound_intf =
|
||||
0x0000, /* address */
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_default_intf )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_gundamex_intf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER16(seta2_state,gundamex_eeprom_r),
|
||||
DEVCB_DRIVER_MEMBER16(seta2_state,gundamex_eeprom_w)
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_reelquak_intf )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER16(seta2_state,reelquak_leds_w)
|
||||
};
|
||||
|
||||
static TMP68301_INTERFACE( tmp68301_samshoot_intf )
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSW2"),
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( seta2, seta2_state )
|
||||
MCFG_CPU_ADD("maincpu", M68301, XTAL_50MHz/3) // !! TMP68301 !!
|
||||
MCFG_CPU_PROGRAM_MAP(mj4simai_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", seta2_state, seta2_interrupt)
|
||||
|
||||
MCFG_TMP68301_ADD("tmp68301", tmp68301_default_intf)
|
||||
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0)
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -2058,7 +2034,9 @@ static MACHINE_CONFIG_DERIVED( gundamex, seta2 )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(gundamex_map)
|
||||
|
||||
MCFG_TMP68301_MODIFY("tmp68301",tmp68301_gundamex_intf)
|
||||
MCFG_DEVICE_MODIFY("tmp68301")
|
||||
MCFG_TMP68301_IN_PARALLEL_CALLBACK(READ16(seta2_state, gundamex_eeprom_r))
|
||||
MCFG_TMP68301_OUT_PARALLEL_CALLBACK(WRITE16(seta2_state, gundamex_eeprom_w))
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
|
||||
|
||||
@ -2126,7 +2104,8 @@ static MACHINE_CONFIG_DERIVED( reelquak, seta2 )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(reelquak_map)
|
||||
|
||||
MCFG_TMP68301_MODIFY("tmp68301",tmp68301_reelquak_intf)
|
||||
MCFG_DEVICE_MODIFY("tmp68301")
|
||||
MCFG_TMP68301_OUT_PARALLEL_CALLBACK(WRITE16(seta2_state, reelquak_leds_w))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW)
|
||||
@ -2144,7 +2123,8 @@ static MACHINE_CONFIG_DERIVED( samshoot, seta2 )
|
||||
MCFG_CPU_PROGRAM_MAP(samshoot_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(seta2_state, samshoot_interrupt, 60)
|
||||
|
||||
MCFG_TMP68301_MODIFY("tmp68301",tmp68301_samshoot_intf)
|
||||
MCFG_DEVICE_MODIFY("tmp68301")
|
||||
MCFG_TMP68301_IN_PARALLEL_CALLBACK(IOPORT("DSW2"))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
@ -2269,8 +2249,7 @@ static MACHINE_CONFIG_START( namcostr, seta2_state )
|
||||
MCFG_CPU_PROGRAM_MAP(namcostr_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", seta2_state, seta2_interrupt)
|
||||
|
||||
MCFG_TMP68301_ADD("tmp68301",tmp68301_default_intf) // tmp68301_reelquak_intf does this have a ticket dispenser?
|
||||
|
||||
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0) // does this have a ticket dispenser?
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
Loading…
Reference in New Issue
Block a user