tms32031: removed static configs in favor of inline config+devcb. nw.

This commit is contained in:
Fabio Priuli 2014-10-12 08:30:17 +00:00
parent 8fa8c17c8e
commit d7e6d623c4
9 changed files with 54 additions and 99 deletions

View File

@ -108,10 +108,10 @@ void tms3203x_device::update_special(int dreg)
}
else if (dreg == TMR_IOF)
{
if (m_xf0_w != NULL && IREG(TMR_IOF) & 0x002)
(*m_xf0_w)(*this, (IREG(TMR_IOF) >> 2) & 1);
if (m_xf1_w != NULL && IREG(TMR_IOF) & 0x020)
(*m_xf1_w)(*this, (IREG(TMR_IOF) >> 6) & 1);
if (IREG(TMR_IOF) & 0x002)
m_xf0_cb((offs_t)0, (IREG(TMR_IOF) >> 2) & 1);
if (IREG(TMR_IOF) & 0x020)
m_xf1_cb((offs_t)0, (IREG(TMR_IOF) >> 6) & 1);
}
else if (dreg == TMR_ST || dreg == TMR_IF || dreg == TMR_IE)
check_irqs();
@ -3132,21 +3132,17 @@ void tms3203x_device::xor_imm(UINT32 op)
void tms3203x_device::iack_dir(UINT32 op)
{
offs_t addr = DIRECT(op);
if (m_iack_w)
(*m_iack_w)(*this, ASSERT_LINE, addr);
m_iack_cb(addr, ASSERT_LINE);
RMEM(addr);
if (m_iack_w)
(*m_iack_w)(*this, CLEAR_LINE, addr);
m_iack_cb(addr, CLEAR_LINE);
}
void tms3203x_device::iack_ind(UINT32 op)
{
offs_t addr = INDIRECT_D(op, op >> 8);
if (m_iack_w)
(*m_iack_w)(*this, ASSERT_LINE, addr);
m_iack_cb(addr, ASSERT_LINE);
RMEM(addr);
if (m_iack_w)
(*m_iack_w)(*this, CLEAR_LINE, addr);
m_iack_cb(addr, CLEAR_LINE);
}
/*-----------------------------------------------------*/

View File

@ -263,13 +263,12 @@ tms3203x_device::tms3203x_device(const machine_config &mconfig, device_type type
m_is_idling(false),
m_icount(0),
m_program(0),
m_direct(0)
m_direct(0),
m_mcbl_mode(false),
m_xf0_cb(*this),
m_xf1_cb(*this),
m_iack_cb(*this)
{
m_mcbl_mode = false;
m_xf0_w = NULL;
m_xf1_w = NULL;
m_iack_w = NULL;
// initialize remaining state
memset(&m_r, 0, sizeof(m_r));
@ -319,18 +318,6 @@ tms3203x_device::~tms3203x_device()
}
//-------------------------------------------------
// static_set_config - set the configuration
// structure
//-------------------------------------------------
void tms3203x_device::static_set_config(device_t &device, const tms3203x_config &config)
{
tms3203x_device &tms = downcast<tms3203x_device &>(device);
static_cast<tms3203x_config &>(tms) = config;
}
//-------------------------------------------------
// rom_region - return a pointer to the device's
// internal ROM region
@ -389,6 +376,11 @@ void tms3203x_device::device_start()
m_program = &space(AS_PROGRAM);
m_direct = &m_program->direct();
// resolve devcb handlers
m_xf0_cb.resolve_safe();
m_xf1_cb.resolve_safe();
m_iack_cb.resolve_safe();
// set up the internal boot loader ROM
m_bootrom = reinterpret_cast<UINT32*>(memregion(shortname())->base());
m_direct->set_direct_update(direct_update_delegate(FUNC(tms3203x_device::direct_handler), this));

View File

@ -90,37 +90,26 @@ enum
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_TMS3203X_CONFIG(_config) \
tms3203x_device::static_set_config(*device, _config);
#define MCFG_TMS3203X_MCBL(_mode) \
tms3203x_device::set_mcbl_mode(*device, _mode);
#define MCFG_TMS3203X_XF0_CB(_devcb) \
devcb = &tms3203x_device::set_xf0_callback(*device, DEVCB_##_devcb);
#define MCFG_TMS3203X_XF1_CB(_devcb) \
devcb = &tms3203x_device::set_xf1_callback(*device, DEVCB_##_devcb);
#define MCFG_TMS3203X_IACK_CB(_devcb) \
devcb = &tms3203x_device::set_iack_callback(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class tms3203x_device;
// I/O callback types
typedef void (*tms3203x_xf_func)(tms3203x_device &device, UINT8 val);
typedef void (*tms3203x_iack_func)(tms3203x_device &device, UINT8 val, offs_t address);
// ======================> tms3203x_config
struct tms3203x_config
{
bool m_mcbl_mode;
tms3203x_xf_func m_xf0_w;
tms3203x_xf_func m_xf1_w;
tms3203x_iack_func m_iack_w;
};
// ======================> tms3203x_device
class tms3203x_device : public cpu_device,
public tms3203x_config
class tms3203x_device : public cpu_device
{
struct tmsreg
{
@ -159,7 +148,10 @@ protected:
public:
// inline configuration helpers
static void static_set_config(device_t &device, const tms3203x_config &config);
static void set_mcbl_mode(device_t &device, bool mode) { downcast<tms3203x_device &>(device).m_mcbl_mode = mode; }
template<class _Object> static devcb_base &set_xf0_callback(device_t &device, _Object object) { return downcast<tms3203x_device &>(device).m_xf0_cb.set_callback(object); }
template<class _Object> static devcb_base &set_xf1_callback(device_t &device, _Object object) { return downcast<tms3203x_device &>(device).m_xf1_cb.set_callback(object); }
template<class _Object> static devcb_base &set_iack_callback(device_t &device, _Object object) { return downcast<tms3203x_device &>(device).m_iack_cb.set_callback(object); }
// public interfaces
static float fp_to_float(UINT32 floatdata);
@ -779,6 +771,11 @@ protected:
direct_read_data * m_direct;
UINT32 * m_bootrom;
bool m_mcbl_mode;
devcb_write8 m_xf0_cb;
devcb_write8 m_xf1_cb;
devcb_write8 m_iack_cb;
// tables
static void (tms3203x_device::*const s_tms32031ops[])(UINT32 op);
static UINT32 (tms3203x_device::*const s_indirect_d[0x20])(UINT32, UINT8);

View File

@ -593,12 +593,6 @@ WRITE32_MEMBER( atari_cage_device::speedup_w )
*
*************************************/
static const tms3203x_config cage_config =
{
true
};
static ADDRESS_MAP_START( cage_map, AS_PROGRAM, 32, atari_cage_device )
AM_RANGE(0x000000, 0x00ffff) AM_RAM
AM_RANGE(0x200000, 0x200000) AM_WRITENOP
@ -634,8 +628,8 @@ MACHINE_CONFIG_FRAGMENT( cage )
/* basic machine hardware */
MCFG_CPU_ADD("cage", TMS32031, 33868800)
MCFG_TMS3203X_CONFIG(cage_config)
MCFG_CPU_PROGRAM_MAP(cage_map)
MCFG_TMS3203X_MCBL(true)
MCFG_TIMER_DEVICE_ADD("cage_dma_timer", DEVICE_SELF, atari_cage_device, dma_timer_callback)
MCFG_TIMER_DEVICE_ADD("cage_timer0", DEVICE_SELF, atari_cage_device, cage_timer_callback)

View File

@ -465,11 +465,11 @@ WRITE32_MEMBER(gaelco3d_state::tms_m68k_ram_w)
}
static void iack_w(tms3203x_device &device, UINT8 state, offs_t addr)
WRITE8_MEMBER(gaelco3d_state::tms_iack_w)
{
if (LOG)
logerror("iack_w(%d) - %06X\n", state, addr);
device.set_input_line(0, CLEAR_LINE);
logerror("iack_w(%d) - %06X\n", data, offset);
m_tms->set_input_line(0, CLEAR_LINE);
}
@ -949,15 +949,6 @@ INPUT_PORTS_END
*
*************************************/
static const tms3203x_config tms_config =
{
true,
0,
0,
iack_w
};
static MACHINE_CONFIG_START( gaelco3d, gaelco3d_state )
/* basic machine hardware */
@ -966,8 +957,9 @@ static MACHINE_CONFIG_START( gaelco3d, gaelco3d_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", gaelco3d_state, vblank_gen)
MCFG_CPU_ADD("tms", TMS32031, 60000000)
MCFG_TMS3203X_CONFIG(tms_config)
MCFG_CPU_PROGRAM_MAP(tms_map)
MCFG_TMS3203X_MCBL(true)
MCFG_TMS3203X_IACK_CB(WRITE8(gaelco3d_state, tms_iack_w))
MCFG_CPU_ADD("adsp", ADSP2115, 16000000)
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(gaelco3d_state, adsp_tx_callback))

View File

@ -439,15 +439,14 @@ WRITE32_MEMBER(midvunit_state::midvplus_misc_w)
*
*************************************/
static void midvplus_xf1_w(tms3203x_device &device, UINT8 val)
WRITE8_MEMBER(midvunit_state::midvplus_xf1_w)
{
midvunit_state *state = device.machine().driver_data<midvunit_state>();
// osd_printf_debug("xf1_w = %d\n", val);
// osd_printf_debug("xf1_w = %d\n", data);
if (state->m_lastval && !val)
memcpy(state->m_ram_base, state->m_fastram_base, 0x20000*4);
if (m_lastval && !data)
memcpy(m_ram_base, m_fastram_base, 0x20000*4);
state->m_lastval = val;
m_lastval = data;
}
@ -489,8 +488,6 @@ static ADDRESS_MAP_START( midvunit_map, AS_PROGRAM, 32, midvunit_state )
ADDRESS_MAP_END
static const tms3203x_config midvplus_config = { false, NULL, midvplus_xf1_w };
static ADDRESS_MAP_START( midvplus_map, AS_PROGRAM, 32, midvunit_state )
AM_RANGE(0x000000, 0x01ffff) AM_RAM AM_SHARE("ram_base")
AM_RANGE(0x400000, 0x41ffff) AM_RAM AM_SHARE("fastram_base")
@ -1045,13 +1042,12 @@ static MACHINE_CONFIG_DERIVED( offroadc, midvunit )
MCFG_MIDWAY_SERIAL_PIC2_YEAR_OFFS(94)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( midvplus, midvcommon )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_TMS3203X_CONFIG(midvplus_config)
MCFG_CPU_PROGRAM_MAP(midvplus_map)
MCFG_TMS3203X_XF1_CB(WRITE8(midvunit_state, midvplus_xf1_w))
MCFG_MACHINE_RESET_OVERRIDE(midvunit_state,midvplus)
MCFG_DEVICE_REMOVE("nvram")

View File

@ -840,20 +840,6 @@ static SLOT_INTERFACE_START( rastersp_scsi_devices )
SLOT_INTERFACE_END
/*************************************
*
* TMS32031
*
*************************************/
static const tms3203x_config tms_config =
{
true // Boot-loader mode
};
/*************************************
*
* Machine driver
@ -868,8 +854,8 @@ static MACHINE_CONFIG_START( rastersp, rastersp_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(rastersp_state,irq_callback)
MCFG_CPU_ADD("dsp", TMS32031, 33330000)
MCFG_TMS3203X_CONFIG(tms_config)
MCFG_CPU_PROGRAM_MAP(dsp_map)
MCFG_TMS3203X_MCBL(true) // Boot-loader mode
/* Devices */
MCFG_TIMER_DRIVER_ADD("tms_timer1", rastersp_state, tms_timer1)

View File

@ -112,6 +112,7 @@ public:
DECLARE_WRITE16_MEMBER(analog_port_latch_w);
DECLARE_READ32_MEMBER(tms_m68k_ram_r);
DECLARE_WRITE32_MEMBER(tms_m68k_ram_w);
DECLARE_WRITE8_MEMBER(tms_iack_w);
DECLARE_WRITE16_MEMBER(tms_reset_w);
DECLARE_WRITE16_MEMBER(tms_irq_w);
DECLARE_WRITE16_MEMBER(tms_control3_w);

View File

@ -124,6 +124,7 @@ public:
DECLARE_WRITE32_MEMBER(offroadc_serial_data_w);
DECLARE_READ32_MEMBER(midvplus_misc_r);
DECLARE_WRITE32_MEMBER(midvplus_misc_w);
DECLARE_WRITE8_MEMBER(midvplus_xf1_w);
DECLARE_READ32_MEMBER(generic_speedup_r);
DECLARE_DRIVER_INIT(crusnu40);
DECLARE_DRIVER_INIT(crusnu21);