mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
adsp21xx_device: converted to devcb2 (nw)
This commit is contained in:
parent
69e99a89f2
commit
06e4798595
@ -80,8 +80,8 @@ inline void adsp21xx_device::update_mstat()
|
||||
m_alt = temp;
|
||||
}
|
||||
if ((m_mstat ^ m_mstat_prev) & MSTAT_TIMER)
|
||||
if (!m_timer_fired_func.isnull())
|
||||
m_timer_fired_func((m_mstat & MSTAT_TIMER) != 0);
|
||||
if (!m_timer_fired_cb.isnull())
|
||||
m_timer_fired_cb((m_mstat & MSTAT_TIMER) != 0);
|
||||
if (m_mstat & MSTAT_STICKYV)
|
||||
m_astat_clear = ~(CFLAG | NFLAG | ZFLAG);
|
||||
else
|
||||
@ -419,8 +419,8 @@ void adsp21xx_device::write_reg3(int regnum, INT32 val)
|
||||
case 0x05: cntr_stack_push(); m_cntr = val & 0x3fff; break;
|
||||
case 0x06: m_core.sb.s = (INT32)(val << 27) >> 27; break;
|
||||
case 0x07: m_px = val; break;
|
||||
case 0x09: if (!m_sport_tx_func.isnull()) m_sport_tx_func(0, val); break;
|
||||
case 0x0b: if (!m_sport_tx_func.isnull()) m_sport_tx_func(1, val); break;
|
||||
case 0x09: if (!m_sport_tx_cb.isnull()) m_sport_tx_cb(0, val, 0xffff); break;
|
||||
case 0x0b: if (!m_sport_tx_cb.isnull()) m_sport_tx_cb(1, val, 0xffff); break;
|
||||
case 0x0c:
|
||||
m_ifc = val;
|
||||
if (m_chip_type >= CHIP_TYPE_ADSP2181)
|
||||
@ -500,8 +500,8 @@ INT32 adsp21xx_device::read_reg3(int regnum)
|
||||
case 0x05: return m_cntr;
|
||||
case 0x06: return m_core.sb.s;
|
||||
case 0x07: return m_px;
|
||||
case 0x08: if (!m_sport_rx_func.isnull()) return m_sport_rx_func(0); else return 0;
|
||||
case 0x0a: if (!m_sport_rx_func.isnull()) return m_sport_rx_func(1); else return 0;
|
||||
case 0x08: if (!m_sport_rx_cb.isnull()) return m_sport_rx_cb(0); else return 0;
|
||||
case 0x0a: if (!m_sport_rx_cb.isnull()) return m_sport_rx_cb(1); else return 0;
|
||||
case 0x0f: return pc_stack_pop_val();
|
||||
default: logerror("ADSP %04x: Reading from an invalid register!\n", m_ppc); return 0;
|
||||
}
|
||||
|
@ -154,7 +154,10 @@ adsp21xx_device::adsp21xx_device(const machine_config &mconfig, device_type type
|
||||
m_icount(0),
|
||||
m_mstat_mask((m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x7f : 0x0f),
|
||||
m_imask_mask((m_chip_type >= CHIP_TYPE_ADSP2181) ? 0x3ff :
|
||||
(m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x3f : 0x0f)
|
||||
(m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x3f : 0x0f),
|
||||
m_sport_rx_cb(*this),
|
||||
m_sport_tx_cb(*this),
|
||||
m_timer_fired_cb(*this)
|
||||
{
|
||||
// initialize remaining state
|
||||
memset(&m_core, 0, sizeof(m_core));
|
||||
@ -291,18 +294,6 @@ adsp21xx_device::~adsp21xx_device()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// static_set_config - set the configuration
|
||||
// structure
|
||||
//-------------------------------------------------
|
||||
|
||||
void adsp21xx_device::static_set_config(device_t &device, const adsp21xx_config &config)
|
||||
{
|
||||
adsp21xx_device &adsp = downcast<adsp21xx_device &>(device);
|
||||
static_cast<adsp21xx_config &>(adsp) = config;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// load_boot_data - load the boot data from an
|
||||
// 8-bit ROM
|
||||
@ -411,9 +402,9 @@ UINT16 adsp2181_device::idma_data_r()
|
||||
|
||||
void adsp21xx_device::device_start()
|
||||
{
|
||||
m_sport_rx_func.resolve(m_sport_rx_callback, *this);
|
||||
m_sport_tx_func.resolve(m_sport_tx_callback, *this);
|
||||
m_timer_fired_func.resolve(m_timer_fired, *this);
|
||||
m_sport_rx_cb.resolve();
|
||||
m_sport_tx_cb.resolve();
|
||||
m_timer_fired_cb.resolve();
|
||||
|
||||
// get our address spaces
|
||||
m_program = &space(AS_PROGRAM);
|
||||
|
@ -183,29 +183,22 @@ enum
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ADSP21XX_CONFIG(_config) \
|
||||
adsp21xx_device::static_set_config(*device, _config);
|
||||
#define MCFG_ADSP21XX_SPORT_RX_CB(_devcb) \
|
||||
devcb = &adsp21xx_device::set_sport_rx_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_ADSP21XX_SPORT_TX_CB(_devcb) \
|
||||
devcb = &adsp21xx_device::set_sport_tx_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_ADSP21XX_TIMER_FIRED_CB(_devcb) \
|
||||
devcb = &adsp21xx_device::set_timer_fired_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class adsp21xx_device;
|
||||
|
||||
// ======================> adsp21xx_config
|
||||
|
||||
struct adsp21xx_config
|
||||
{
|
||||
devcb_read32 m_sport_rx_callback; // callback for serial receive
|
||||
devcb_write32 m_sport_tx_callback; // callback for serial transmit
|
||||
devcb_write_line m_timer_fired; // callback for timer fired
|
||||
};
|
||||
|
||||
// ======================> adsp21xx_device
|
||||
|
||||
class adsp21xx_device : public cpu_device,
|
||||
public adsp21xx_config
|
||||
class adsp21xx_device : public cpu_device
|
||||
{
|
||||
protected:
|
||||
enum
|
||||
@ -224,7 +217,9 @@ protected:
|
||||
|
||||
public:
|
||||
// inline configuration helpers
|
||||
static void static_set_config(device_t &device, const adsp21xx_config &config);
|
||||
template<class _Object> static devcb2_base &set_sport_rx_callback(device_t &device, _Object object) { return downcast<adsp21xx_device &>(device).m_sport_rx_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_sport_tx_callback(device_t &device, _Object object) { return downcast<adsp21xx_device &>(device).m_sport_tx_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_timer_fired_callback(device_t &device, _Object object) { return downcast<adsp21xx_device &>(device).m_timer_fired_cb.set_callback(object); }
|
||||
|
||||
// public interfaces
|
||||
void load_boot_data(UINT8 *srcdata, UINT32 *dstdata);
|
||||
@ -461,9 +456,9 @@ protected:
|
||||
UINT16 m_mask_table[0x4000];
|
||||
UINT16 m_reverse_table[0x4000];
|
||||
|
||||
devcb_resolved_read32 m_sport_rx_func;
|
||||
devcb_resolved_write32 m_sport_tx_func;
|
||||
devcb_resolved_write_line m_timer_fired_func;
|
||||
devcb2_read32 m_sport_rx_cb; // callback for serial receive
|
||||
devcb2_write32 m_sport_tx_cb; // callback for serial transmit
|
||||
devcb2_write_line m_timer_fired_cb; // callback for timer fired
|
||||
|
||||
// debugging
|
||||
#if ADSP_TRACK_HOTSPOTS
|
||||
|
@ -432,22 +432,6 @@ static ADDRESS_MAP_START( denver_io_map, AS_IO, 16, dcs_audio_device )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* CPU configuration
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const adsp21xx_config adsp_config =
|
||||
{
|
||||
DEVCB_NULL, /* callback for serial receive */
|
||||
DEVCB_DEVICE_MEMBER32(DEVICE_SELF_OWNER, dcs_audio_device, sound_tx_callback), /* callback for serial transmit */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, dcs_audio_device,timer_enable_callback) /* callback for timer fired */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Original DCS Machine Drivers
|
||||
@ -457,7 +441,8 @@ static const adsp21xx_config adsp_config =
|
||||
/* Basic DCS system with ADSP-2105 and 2k of SRAM (T-unit, V-unit, Killer Instinct) */
|
||||
MACHINE_CONFIG_FRAGMENT( dcs_audio_2k )
|
||||
MCFG_CPU_ADD("dcs", ADSP2105, XTAL_10MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(dcs_audio_device, sound_tx_callback)) /* callback for serial transmit */
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(dcs_audio_device,timer_enable_callback)) /* callback for timer fired */
|
||||
MCFG_CPU_PROGRAM_MAP(dcs_2k_program_map)
|
||||
MCFG_CPU_DATA_MAP(dcs_2k_data_map)
|
||||
|
||||
@ -502,7 +487,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( dcs2_audio_2115 )
|
||||
MCFG_CPU_ADD("dcs2", ADSP2115, XTAL_16MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(dcs_audio_device, sound_tx_callback)) /* callback for serial transmit */
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(dcs_audio_device,timer_enable_callback)) /* callback for timer fired */
|
||||
MCFG_CPU_PROGRAM_MAP(dcs2_2115_program_map)
|
||||
MCFG_CPU_DATA_MAP(dcs2_2115_data_map)
|
||||
|
||||
@ -523,7 +509,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_DERIVED( dcs2_audio_2104, dcs2_audio_2115 )
|
||||
MCFG_CPU_REPLACE("dcs2", ADSP2104, XTAL_16MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(dcs_audio_device, sound_tx_callback)) /* callback for serial transmit */
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(dcs_audio_device,timer_enable_callback)) /* callback for timer fired */
|
||||
MCFG_CPU_PROGRAM_MAP(dcs2_2104_program_map)
|
||||
MCFG_CPU_DATA_MAP(dcs2_2104_data_map)
|
||||
MACHINE_CONFIG_END
|
||||
@ -538,7 +525,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( dcs2_audio_dsio )
|
||||
MCFG_CPU_ADD("dsio", ADSP2181, XTAL_32MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(dcs_audio_device, sound_tx_callback)) /* callback for serial transmit */
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(dcs_audio_device,timer_enable_callback)) /* callback for timer fired */
|
||||
MCFG_CPU_PROGRAM_MAP(dsio_program_map)
|
||||
MCFG_CPU_DATA_MAP(dsio_data_map)
|
||||
MCFG_CPU_IO_MAP(dsio_io_map)
|
||||
@ -565,7 +553,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( dcs2_audio_denver )
|
||||
MCFG_CPU_ADD("denver", ADSP2181, XTAL_33_333MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(dcs_audio_device, sound_tx_callback)) /* callback for serial transmit */
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(dcs_audio_device,timer_enable_callback)) /* callback for timer fired */
|
||||
MCFG_CPU_PROGRAM_MAP(denver_program_map)
|
||||
MCFG_CPU_DATA_MAP(denver_data_map)
|
||||
MCFG_CPU_IO_MAP(denver_io_map)
|
||||
|
@ -949,13 +949,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const adsp21xx_config adsp_config =
|
||||
{
|
||||
DEVCB_NULL, /* callback for serial receive */
|
||||
DEVCB_DRIVER_MEMBER32(gaelco3d_state, adsp_tx_callback), /* callback for serial transmit */
|
||||
DEVCB_NULL /* callback for timer fired */
|
||||
};
|
||||
|
||||
static const tms3203x_config tms_config =
|
||||
{
|
||||
true,
|
||||
@ -977,7 +970,7 @@ static MACHINE_CONFIG_START( gaelco3d, gaelco3d_state )
|
||||
MCFG_CPU_PROGRAM_MAP(tms_map)
|
||||
|
||||
MCFG_CPU_ADD("adsp", ADSP2115, 16000000)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(gaelco3d_state, adsp_tx_callback))
|
||||
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(adsp_data_map)
|
||||
|
||||
|
@ -1279,29 +1279,6 @@ static INPUT_PORTS_START( hdrivair )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* CPU configuration
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const adsp21xx_config ds3sdsp_config =
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER32(harddriv_state, hdds3sdsp_serial_rx_callback), /* callback for serial receive */
|
||||
DEVCB_DRIVER_MEMBER32(harddriv_state, hdds3sdsp_serial_tx_callback), /* callback for serial transmit */
|
||||
DEVCB_DRIVER_LINE_MEMBER(harddriv_state, hdds3sdsp_timer_enable_callback) /* callback for timer fired */
|
||||
};
|
||||
|
||||
static const adsp21xx_config ds3xdsp_config =
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER32(harddriv_state, hdds3xdsp_serial_rx_callback), /* callback for serial receive */
|
||||
DEVCB_DRIVER_MEMBER32(harddriv_state, hdds3xdsp_serial_tx_callback), /* callback for serial transmit */
|
||||
DEVCB_DRIVER_LINE_MEMBER(harddriv_state, hdds3xdsp_timer_enable_callback) /* callback for timer fired */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main board pieces
|
||||
@ -1421,13 +1398,17 @@ static MACHINE_CONFIG_FRAGMENT( ds3 )
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(60000))
|
||||
|
||||
MCFG_CPU_ADD("ds3sdsp", ADSP2105, XTAL_10MHz)
|
||||
MCFG_ADSP21XX_CONFIG(ds3sdsp_config)
|
||||
MCFG_ADSP21XX_SPORT_RX_CB(READ32(harddriv_state, hdds3sdsp_serial_rx_callback))
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(harddriv_state, hdds3sdsp_serial_tx_callback))
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(harddriv_state, hdds3sdsp_timer_enable_callback))
|
||||
MCFG_CPU_PROGRAM_MAP(ds3sdsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(ds3sdsp_data_map)
|
||||
MCFG_TIMER_DRIVER_ADD("ds3sdsp_timer", harddriv_state, ds3sdsp_internal_timer_callback)
|
||||
|
||||
MCFG_CPU_ADD("ds3xdsp", ADSP2105, XTAL_10MHz)
|
||||
MCFG_ADSP21XX_CONFIG(ds3xdsp_config)
|
||||
MCFG_ADSP21XX_SPORT_RX_CB(READ32(harddriv_state, hdds3xdsp_serial_rx_callback))
|
||||
MCFG_ADSP21XX_SPORT_TX_CB(WRITE32(harddriv_state, hdds3xdsp_serial_tx_callback))
|
||||
MCFG_ADSP21XX_TIMER_FIRED_CB(WRITELINE(harddriv_state, hdds3xdsp_timer_enable_callback))
|
||||
MCFG_CPU_PROGRAM_MAP(ds3xdsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(ds3xdsp_data_map)
|
||||
MCFG_TIMER_DRIVER_ADD("ds3xdsp_timer", harddriv_state, ds3xdsp_internal_timer_callback)
|
||||
|
@ -888,13 +888,6 @@ static const mips3_config config =
|
||||
};
|
||||
#endif
|
||||
|
||||
static const adsp21xx_config adsp_config =
|
||||
{
|
||||
DEVCB_NULL, /* callback for serial receive */
|
||||
DEVCB_NULL,//sound_tx_callback, /* callback for serial transmit */
|
||||
DEVCB_NULL,//timer_enable_callback /* callback for timer fired */
|
||||
};
|
||||
|
||||
static const voodoo_config voodoo_1_intf =
|
||||
{
|
||||
2, // fbmem;
|
||||
@ -928,7 +921,6 @@ static MACHINE_CONFIG_START( magictg, magictg_state )
|
||||
MCFG_CPU_PROGRAM_MAP(magictg_map)
|
||||
|
||||
MCFG_CPU_ADD("adsp", ADSP2181, 16000000)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(adsp_data_map)
|
||||
MCFG_CPU_IO_MAP(adsp_io_map)
|
||||
|
@ -688,13 +688,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const adsp21xx_config adsp_config =
|
||||
{
|
||||
DEVCB_NULL, /* callback for serial receive */
|
||||
DEVCB_NULL, /* callback for serial transmit */
|
||||
DEVCB_NULL, /* callback for timer fired */
|
||||
};
|
||||
|
||||
static const tms34010_config gsp_config =
|
||||
{
|
||||
TRUE, /* halt on reset */
|
||||
@ -718,7 +711,6 @@ static MACHINE_CONFIG_START( metalmx, metalmx_state )
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
|
||||
MCFG_CPU_ADD("adsp", ADSP2105, XTAL_10MHz)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(adsp_data_map)
|
||||
|
||||
|
@ -1146,12 +1146,6 @@ static ADDRESS_MAP_START( adsp_io_map, AS_IO, 16, stv_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static const adsp21xx_config adsp_config =
|
||||
{
|
||||
DEVCB_NULL, /* callback for serial receive */
|
||||
DEVCB_NULL,//sound_tx_callback, /* callback for serial transmit */
|
||||
DEVCB_NULL,//timer_enable_callback /* callback for timer fired */
|
||||
};
|
||||
|
||||
MACHINE_RESET_MEMBER(stv_state,batmanfr)
|
||||
{
|
||||
@ -1174,7 +1168,6 @@ MACHINE_RESET_MEMBER(stv_state,batmanfr)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( batmanfr, stv )
|
||||
MCFG_CPU_ADD("adsp", ADSP2181, 16000000)
|
||||
MCFG_ADSP21XX_CONFIG(adsp_config)
|
||||
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(adsp_data_map)
|
||||
MCFG_CPU_IO_MAP(adsp_io_map)
|
||||
|
Loading…
Reference in New Issue
Block a user