adsp21xx_device: converted to devcb2 (nw)

This commit is contained in:
Ivan Vangelista 2014-04-22 17:38:46 +00:00
parent 69e99a89f2
commit 06e4798595
9 changed files with 44 additions and 118 deletions

View File

@ -80,8 +80,8 @@ inline void adsp21xx_device::update_mstat()
m_alt = temp; m_alt = temp;
} }
if ((m_mstat ^ m_mstat_prev) & MSTAT_TIMER) if ((m_mstat ^ m_mstat_prev) & MSTAT_TIMER)
if (!m_timer_fired_func.isnull()) if (!m_timer_fired_cb.isnull())
m_timer_fired_func((m_mstat & MSTAT_TIMER) != 0); m_timer_fired_cb((m_mstat & MSTAT_TIMER) != 0);
if (m_mstat & MSTAT_STICKYV) if (m_mstat & MSTAT_STICKYV)
m_astat_clear = ~(CFLAG | NFLAG | ZFLAG); m_astat_clear = ~(CFLAG | NFLAG | ZFLAG);
else 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 0x05: cntr_stack_push(); m_cntr = val & 0x3fff; break;
case 0x06: m_core.sb.s = (INT32)(val << 27) >> 27; break; case 0x06: m_core.sb.s = (INT32)(val << 27) >> 27; break;
case 0x07: m_px = val; break; case 0x07: m_px = val; break;
case 0x09: if (!m_sport_tx_func.isnull()) m_sport_tx_func(0, val); break; case 0x09: if (!m_sport_tx_cb.isnull()) m_sport_tx_cb(0, val, 0xffff); break;
case 0x0b: if (!m_sport_tx_func.isnull()) m_sport_tx_func(1, val); break; case 0x0b: if (!m_sport_tx_cb.isnull()) m_sport_tx_cb(1, val, 0xffff); break;
case 0x0c: case 0x0c:
m_ifc = val; m_ifc = val;
if (m_chip_type >= CHIP_TYPE_ADSP2181) if (m_chip_type >= CHIP_TYPE_ADSP2181)
@ -500,8 +500,8 @@ INT32 adsp21xx_device::read_reg3(int regnum)
case 0x05: return m_cntr; case 0x05: return m_cntr;
case 0x06: return m_core.sb.s; case 0x06: return m_core.sb.s;
case 0x07: return m_px; case 0x07: return m_px;
case 0x08: if (!m_sport_rx_func.isnull()) return m_sport_rx_func(0); 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_func.isnull()) return m_sport_rx_func(1); 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(); case 0x0f: return pc_stack_pop_val();
default: logerror("ADSP %04x: Reading from an invalid register!\n", m_ppc); return 0; default: logerror("ADSP %04x: Reading from an invalid register!\n", m_ppc); return 0;
} }

View File

@ -154,7 +154,10 @@ adsp21xx_device::adsp21xx_device(const machine_config &mconfig, device_type type
m_icount(0), m_icount(0),
m_mstat_mask((m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x7f : 0x0f), m_mstat_mask((m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x7f : 0x0f),
m_imask_mask((m_chip_type >= CHIP_TYPE_ADSP2181) ? 0x3ff : 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 // initialize remaining state
memset(&m_core, 0, sizeof(m_core)); 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 // load_boot_data - load the boot data from an
// 8-bit ROM // 8-bit ROM
@ -411,9 +402,9 @@ UINT16 adsp2181_device::idma_data_r()
void adsp21xx_device::device_start() void adsp21xx_device::device_start()
{ {
m_sport_rx_func.resolve(m_sport_rx_callback, *this); m_sport_rx_cb.resolve();
m_sport_tx_func.resolve(m_sport_tx_callback, *this); m_sport_tx_cb.resolve();
m_timer_fired_func.resolve(m_timer_fired, *this); m_timer_fired_cb.resolve();
// get our address spaces // get our address spaces
m_program = &space(AS_PROGRAM); m_program = &space(AS_PROGRAM);

View File

@ -183,29 +183,22 @@ enum
// INTERFACE CONFIGURATION MACROS // INTERFACE CONFIGURATION MACROS
//************************************************************************** //**************************************************************************
#define MCFG_ADSP21XX_CONFIG(_config) \ #define MCFG_ADSP21XX_SPORT_RX_CB(_devcb) \
adsp21xx_device::static_set_config(*device, _config); 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 // 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 // ======================> adsp21xx_device
class adsp21xx_device : public cpu_device, class adsp21xx_device : public cpu_device
public adsp21xx_config
{ {
protected: protected:
enum enum
@ -224,7 +217,9 @@ protected:
public: public:
// inline configuration helpers // 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 // public interfaces
void load_boot_data(UINT8 *srcdata, UINT32 *dstdata); void load_boot_data(UINT8 *srcdata, UINT32 *dstdata);
@ -461,9 +456,9 @@ protected:
UINT16 m_mask_table[0x4000]; UINT16 m_mask_table[0x4000];
UINT16 m_reverse_table[0x4000]; UINT16 m_reverse_table[0x4000];
devcb_resolved_read32 m_sport_rx_func; devcb2_read32 m_sport_rx_cb; // callback for serial receive
devcb_resolved_write32 m_sport_tx_func; devcb2_write32 m_sport_tx_cb; // callback for serial transmit
devcb_resolved_write_line m_timer_fired_func; devcb2_write_line m_timer_fired_cb; // callback for timer fired
// debugging // debugging
#if ADSP_TRACK_HOTSPOTS #if ADSP_TRACK_HOTSPOTS

View File

@ -432,22 +432,6 @@ static ADDRESS_MAP_START( denver_io_map, AS_IO, 16, dcs_audio_device )
ADDRESS_MAP_END 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 * 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) */ /* Basic DCS system with ADSP-2105 and 2k of SRAM (T-unit, V-unit, Killer Instinct) */
MACHINE_CONFIG_FRAGMENT( dcs_audio_2k ) MACHINE_CONFIG_FRAGMENT( dcs_audio_2k )
MCFG_CPU_ADD("dcs", ADSP2105, XTAL_10MHz) 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_PROGRAM_MAP(dcs_2k_program_map)
MCFG_CPU_DATA_MAP(dcs_2k_data_map) MCFG_CPU_DATA_MAP(dcs_2k_data_map)
@ -502,7 +487,8 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( dcs2_audio_2115 ) MACHINE_CONFIG_FRAGMENT( dcs2_audio_2115 )
MCFG_CPU_ADD("dcs2", ADSP2115, XTAL_16MHz) 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_PROGRAM_MAP(dcs2_2115_program_map)
MCFG_CPU_DATA_MAP(dcs2_2115_data_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 ) MACHINE_CONFIG_DERIVED( dcs2_audio_2104, dcs2_audio_2115 )
MCFG_CPU_REPLACE("dcs2", ADSP2104, XTAL_16MHz) 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_PROGRAM_MAP(dcs2_2104_program_map)
MCFG_CPU_DATA_MAP(dcs2_2104_data_map) MCFG_CPU_DATA_MAP(dcs2_2104_data_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -538,7 +525,8 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( dcs2_audio_dsio ) MACHINE_CONFIG_FRAGMENT( dcs2_audio_dsio )
MCFG_CPU_ADD("dsio", ADSP2181, XTAL_32MHz) 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_PROGRAM_MAP(dsio_program_map)
MCFG_CPU_DATA_MAP(dsio_data_map) MCFG_CPU_DATA_MAP(dsio_data_map)
MCFG_CPU_IO_MAP(dsio_io_map) MCFG_CPU_IO_MAP(dsio_io_map)
@ -565,7 +553,8 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( dcs2_audio_denver ) MACHINE_CONFIG_FRAGMENT( dcs2_audio_denver )
MCFG_CPU_ADD("denver", ADSP2181, XTAL_33_333MHz) 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_PROGRAM_MAP(denver_program_map)
MCFG_CPU_DATA_MAP(denver_data_map) MCFG_CPU_DATA_MAP(denver_data_map)
MCFG_CPU_IO_MAP(denver_io_map) MCFG_CPU_IO_MAP(denver_io_map)

View File

@ -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 = static const tms3203x_config tms_config =
{ {
true, true,
@ -977,7 +970,7 @@ static MACHINE_CONFIG_START( gaelco3d, gaelco3d_state )
MCFG_CPU_PROGRAM_MAP(tms_map) MCFG_CPU_PROGRAM_MAP(tms_map)
MCFG_CPU_ADD("adsp", ADSP2115, 16000000) 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_PROGRAM_MAP(adsp_program_map)
MCFG_CPU_DATA_MAP(adsp_data_map) MCFG_CPU_DATA_MAP(adsp_data_map)

View File

@ -1279,29 +1279,6 @@ static INPUT_PORTS_START( hdrivair )
INPUT_PORTS_END 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 * Main board pieces
@ -1421,13 +1398,17 @@ static MACHINE_CONFIG_FRAGMENT( ds3 )
MCFG_QUANTUM_TIME(attotime::from_hz(60000)) MCFG_QUANTUM_TIME(attotime::from_hz(60000))
MCFG_CPU_ADD("ds3sdsp", ADSP2105, XTAL_10MHz) 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_PROGRAM_MAP(ds3sdsp_program_map)
MCFG_CPU_DATA_MAP(ds3sdsp_data_map) MCFG_CPU_DATA_MAP(ds3sdsp_data_map)
MCFG_TIMER_DRIVER_ADD("ds3sdsp_timer", harddriv_state, ds3sdsp_internal_timer_callback) MCFG_TIMER_DRIVER_ADD("ds3sdsp_timer", harddriv_state, ds3sdsp_internal_timer_callback)
MCFG_CPU_ADD("ds3xdsp", ADSP2105, XTAL_10MHz) 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_PROGRAM_MAP(ds3xdsp_program_map)
MCFG_CPU_DATA_MAP(ds3xdsp_data_map) MCFG_CPU_DATA_MAP(ds3xdsp_data_map)
MCFG_TIMER_DRIVER_ADD("ds3xdsp_timer", harddriv_state, ds3xdsp_internal_timer_callback) MCFG_TIMER_DRIVER_ADD("ds3xdsp_timer", harddriv_state, ds3xdsp_internal_timer_callback)

View File

@ -888,13 +888,6 @@ static const mips3_config config =
}; };
#endif #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 = static const voodoo_config voodoo_1_intf =
{ {
2, // fbmem; 2, // fbmem;
@ -928,7 +921,6 @@ static MACHINE_CONFIG_START( magictg, magictg_state )
MCFG_CPU_PROGRAM_MAP(magictg_map) MCFG_CPU_PROGRAM_MAP(magictg_map)
MCFG_CPU_ADD("adsp", ADSP2181, 16000000) MCFG_CPU_ADD("adsp", ADSP2181, 16000000)
MCFG_ADSP21XX_CONFIG(adsp_config)
MCFG_CPU_PROGRAM_MAP(adsp_program_map) MCFG_CPU_PROGRAM_MAP(adsp_program_map)
MCFG_CPU_DATA_MAP(adsp_data_map) MCFG_CPU_DATA_MAP(adsp_data_map)
MCFG_CPU_IO_MAP(adsp_io_map) MCFG_CPU_IO_MAP(adsp_io_map)

View File

@ -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 = static const tms34010_config gsp_config =
{ {
TRUE, /* halt on reset */ TRUE, /* halt on reset */
@ -718,7 +711,6 @@ static MACHINE_CONFIG_START( metalmx, metalmx_state )
MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_ADD("adsp", ADSP2105, XTAL_10MHz) MCFG_CPU_ADD("adsp", ADSP2105, XTAL_10MHz)
MCFG_ADSP21XX_CONFIG(adsp_config)
MCFG_CPU_PROGRAM_MAP(adsp_program_map) MCFG_CPU_PROGRAM_MAP(adsp_program_map)
MCFG_CPU_DATA_MAP(adsp_data_map) MCFG_CPU_DATA_MAP(adsp_data_map)

View File

@ -1146,12 +1146,6 @@ static ADDRESS_MAP_START( adsp_io_map, AS_IO, 16, stv_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_END 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) MACHINE_RESET_MEMBER(stv_state,batmanfr)
{ {
@ -1174,7 +1168,6 @@ MACHINE_RESET_MEMBER(stv_state,batmanfr)
static MACHINE_CONFIG_DERIVED( batmanfr, stv ) static MACHINE_CONFIG_DERIVED( batmanfr, stv )
MCFG_CPU_ADD("adsp", ADSP2181, 16000000) MCFG_CPU_ADD("adsp", ADSP2181, 16000000)
MCFG_ADSP21XX_CONFIG(adsp_config)
MCFG_CPU_PROGRAM_MAP(adsp_program_map) MCFG_CPU_PROGRAM_MAP(adsp_program_map)
MCFG_CPU_DATA_MAP(adsp_data_map) MCFG_CPU_DATA_MAP(adsp_data_map)
MCFG_CPU_IO_MAP(adsp_io_map) MCFG_CPU_IO_MAP(adsp_io_map)