summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/audio/dcs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/audio/dcs.cpp')
-rw-r--r--src/mame/audio/dcs.cpp73
1 files changed, 37 insertions, 36 deletions
diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp
index af6197c87a8..baa0ccebb22 100644
--- a/src/mame/audio/dcs.cpp
+++ b/src/mame/audio/dcs.cpp
@@ -910,13 +910,16 @@ void dcs_audio_device::install_speedup(void)
{
if (m_polling_offset) {
if (m_rev < REV_DSIO) {
- m_cpu->space(AS_DATA).install_readwrite_handler(m_polling_offset, m_polling_offset, read16_delegate(*this, FUNC(dcs_audio_device::dcs_polling_r)), write16_delegate(*this, FUNC(dcs_audio_device::dcs_polling_w)));
+ m_cpu->space(AS_DATA).install_read_handler(m_polling_offset, m_polling_offset, read16mo_delegate(*this, FUNC(dcs_audio_device::dcs_polling_r)));
+ m_cpu->space(AS_DATA).install_write_handler(m_polling_offset, m_polling_offset, write16s_delegate(*this, FUNC(dcs_audio_device::dcs_polling_w)));
}
else {
// ADSP 2181 (DSIO and DENVER) use program memory
- m_cpu->space(AS_PROGRAM).install_readwrite_handler(m_polling_offset, m_polling_offset, read32_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_r)), write32_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_w)));
+ m_cpu->space(AS_PROGRAM).install_read_handler(m_polling_offset, m_polling_offset, read32mo_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_r)));
+ m_cpu->space(AS_PROGRAM).install_write_handler(m_polling_offset, m_polling_offset, write32s_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_w)));
// DSIO and DENVER poll in two spots. This offset covers all three machines (mwskins, sf2049, roadburn).
- m_cpu->space(AS_PROGRAM).install_readwrite_handler(m_polling_offset + 9, m_polling_offset + 9, read32_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_r)), write32_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_w)));
+ m_cpu->space(AS_PROGRAM).install_read_handler(m_polling_offset + 9, m_polling_offset + 9, read32mo_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_r)));
+ m_cpu->space(AS_PROGRAM).install_write_handler(m_polling_offset + 9, m_polling_offset + 9, write32s_delegate(*this, FUNC(dcs_audio_device::dcs_polling32_w)));
}
}
}
@@ -934,14 +937,14 @@ void dcs_audio_device::set_auto_ack(int state)
*
*************************************/
-READ16_MEMBER( dcs_audio_device::dcs_dataram_r )
+uint16_t dcs_audio_device::dcs_dataram_r(offs_t offset)
{
assert(m_external_program_ram != nullptr);
return m_external_program_ram[offset] >> 8;
}
-WRITE16_MEMBER( dcs_audio_device::dcs_dataram_w )
+void dcs_audio_device::dcs_dataram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
assert(m_external_program_ram != nullptr);
uint16_t val = m_external_program_ram[offset] >> 8;
@@ -950,7 +953,7 @@ WRITE16_MEMBER( dcs_audio_device::dcs_dataram_w )
}
-WRITE16_MEMBER( dcs_audio_device::dcs_data_bank_select_w )
+void dcs_audio_device::dcs_data_bank_select_w(uint16_t data)
{
if (m_rev != REV_DCS1P5)
m_sounddata_bank = data & 0x7ff;
@@ -966,7 +969,7 @@ WRITE16_MEMBER( dcs_audio_device::dcs_data_bank_select_w )
#endif
}
-WRITE16_MEMBER( dcs_audio_device::dcs_data_bank_select2_w )
+void dcs_audio_device::dcs_data_bank_select2_w(uint16_t data)
{
m_sounddata_bank = (m_sounddata_bank & 0x00ff) | ((data & 0x01) << 8) | ((data & 0xfc) << 7);
@@ -1082,7 +1085,7 @@ void dcs_audio_device::sdrc_reset()
*
*************************************/
-READ16_MEMBER( dcs_audio_device::sdrc_r )
+uint16_t dcs_audio_device::sdrc_r(offs_t offset)
{
sdrc_state &sdrc = m_sdrc;
uint16_t result = sdrc.reg[offset];
@@ -1131,7 +1134,7 @@ READ16_MEMBER( dcs_audio_device::sdrc_r )
}
-WRITE16_MEMBER( dcs_audio_device::sdrc_w )
+void dcs_audio_device::sdrc_w(offs_t offset, uint16_t data)
{
sdrc_state &sdrc = m_sdrc;
uint16_t diff = sdrc.reg[offset] ^ data;
@@ -1214,7 +1217,7 @@ void dcs_audio_device::dsio_reset()
}
-READ16_MEMBER( dcs_audio_device::dsio_r )
+uint16_t dcs_audio_device::dsio_r(offs_t offset)
{
dsio_state &dsio = m_dsio;
uint16_t result = dsio.reg[offset];
@@ -1230,7 +1233,7 @@ READ16_MEMBER( dcs_audio_device::dsio_r )
}
-WRITE16_MEMBER( dcs_audio_device::dsio_w )
+void dcs_audio_device::dsio_w(offs_t offset, uint16_t data)
{
dsio_state &dsio = m_dsio;
@@ -1291,7 +1294,7 @@ void dcs_audio_device::denver_alloc_dmadac()
// recompute_sample_rate();
}
-READ16_MEMBER( dcs_audio_device::denver_r )
+uint16_t dcs_audio_device::denver_r(offs_t offset)
{
uint16_t result = m_dsio.reg[offset];
@@ -1307,7 +1310,7 @@ READ16_MEMBER( dcs_audio_device::denver_r )
}
-WRITE16_MEMBER( dcs_audio_device::denver_w )
+void dcs_audio_device::denver_w(offs_t offset, uint16_t data)
{
dsio_state &dsio = m_dsio;
int channels;
@@ -1365,7 +1368,7 @@ WRITE16_MEMBER( dcs_audio_device::denver_w )
*
*************************************/
-WRITE32_MEMBER( dcs_audio_device::dsio_idma_addr_w )
+void dcs_audio_device::dsio_idma_addr_w(uint32_t data)
{
if (LOG_DCS_TRANSFERS)
logerror("%s IDMA_addr = %04X\n", machine().describe_context(), data);
@@ -1375,7 +1378,7 @@ WRITE32_MEMBER( dcs_audio_device::dsio_idma_addr_w )
}
-WRITE32_MEMBER( dcs_audio_device::dsio_idma_data_w )
+void dcs_audio_device::dsio_idma_data_w(offs_t offset, uint32_t data, uint32_t mem_mask)
{
dsio_state &dsio = m_dsio;
// IDMA is to internal memory only
@@ -1405,7 +1408,7 @@ WRITE32_MEMBER( dcs_audio_device::dsio_idma_data_w )
}
-READ32_MEMBER( dcs_audio_device::dsio_idma_data_r )
+uint32_t dcs_audio_device::dsio_idma_data_r()
{
uint32_t result;
// IDMA is to internal memory only
@@ -1495,7 +1498,7 @@ void dcs_audio_device::reset_w(int state)
}
-READ16_MEMBER( dcs_audio_device::latch_status_r )
+uint16_t dcs_audio_device::latch_status_r(address_space &space)
{
int result = 0;
if (IS_INPUT_FULL())
@@ -1510,7 +1513,7 @@ READ16_MEMBER( dcs_audio_device::latch_status_r )
}
-READ16_MEMBER( dcs_audio_device::fifo_input_r )
+uint16_t dcs_audio_device::fifo_input_r()
{
if (!m_fifo_data_r.isnull())
return m_fifo_data_r();
@@ -1566,7 +1569,7 @@ void dcs_audio_device::data_w(uint16_t data)
}
-WRITE16_MEMBER( dcs_audio_device::input_latch_ack_w )
+void dcs_audio_device::input_latch_ack_w(uint16_t data)
{
if (!m_last_input_empty && !m_input_empty_cb.isnull())
m_input_empty_cb(m_last_input_empty = 1);
@@ -1578,20 +1581,20 @@ WRITE16_MEMBER( dcs_audio_device::input_latch_ack_w )
}
-READ16_MEMBER( dcs_audio_device::input_latch_r )
+uint16_t dcs_audio_device::input_latch_r()
{
if (m_auto_ack)
- input_latch_ack_w(space,0,0,0xffff);
+ input_latch_ack_w(0);
if (LOG_DCS_IO)
logerror("%s input_latch_r(%04X)\n", machine().describe_context(), m_input_data);
return m_input_data;
}
-READ32_MEMBER( dcs_audio_device::input_latch32_r )
+uint32_t dcs_audio_device::input_latch32_r()
{
if (m_auto_ack)
- input_latch_ack_w(space,0,0,0xffff);
+ input_latch_ack_w(0);
if (LOG_DCS_IO)
logerror("%s input_latch32_r(%04X)\n", machine().describe_context(), m_input_data);
return m_input_data << 8;
@@ -1619,7 +1622,7 @@ void dcs_audio_device::output_latch_w(uint16_t data)
machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::latch_delayed_w),this), data>>8);
}
-WRITE32_MEMBER( dcs_audio_device::output_latch32_w )
+void dcs_audio_device::output_latch32_w(uint32_t data)
{
m_pre_output_data = data >> 8;
if (LOG_DCS_IO)
@@ -1681,7 +1684,7 @@ TIMER_CALLBACK_MEMBER( dcs_audio_device::output_control_delayed_w )
}
-WRITE16_MEMBER( dcs_audio_device::output_control_w )
+void dcs_audio_device::output_control_w(uint16_t data)
{
if (LOG_DCS_IO)
logerror("%s output_control_w = %04X\n", machine().describe_context(), data);
@@ -1689,7 +1692,7 @@ WRITE16_MEMBER( dcs_audio_device::output_control_w )
}
-READ16_MEMBER( dcs_audio_device::output_control_r )
+uint16_t dcs_audio_device::output_control_r()
{
if (LOG_DCS_IO)
logerror("%s output_control_r = %04X\n", machine().describe_context(), m_output_control);
@@ -1857,7 +1860,7 @@ WRITE_LINE_MEMBER(dcs_audio_device::timer_enable_callback)
0x3c00-0x3fff = Memory Mapped control registers & reserved.
*/
-READ16_MEMBER( dcs_audio_device::adsp_control_r )
+uint16_t dcs_audio_device::adsp_control_r(offs_t offset)
{
uint16_t result = 0xffff;
@@ -1891,7 +1894,7 @@ READ16_MEMBER( dcs_audio_device::adsp_control_r )
}
-WRITE16_MEMBER(dcs_audio_device:: adsp_control_w )
+void dcs_audio_device:: adsp_control_w(offs_t offset, uint16_t data)
{
m_control_regs[offset] = data;
@@ -1972,7 +1975,7 @@ WRITE16_MEMBER(dcs_audio_device:: adsp_control_w )
case IDMA_CONTROL_REG:
if (m_rev == REV_DSIO || m_rev == REV_DENV)
- dsio_idma_addr_w(space, offset, data);
+ dsio_idma_addr_w(data);
break;
}
if (LOG_DCS_IO)
@@ -2136,7 +2139,7 @@ void dcs_audio_device::sound_tx_callback(offs_t offset, uint32_t data)
VERY BASIC & SAFE OPTIMIZATIONS
****************************************************************************/
-READ16_MEMBER( dcs_audio_device::dcs_polling_r )
+uint16_t dcs_audio_device::dcs_polling_r(address_space &space)
{
if (m_polling_count++ > 5)
space.device().execute().eat_cycles(2000);
@@ -2144,19 +2147,19 @@ READ16_MEMBER( dcs_audio_device::dcs_polling_r )
}
-WRITE16_MEMBER( dcs_audio_device::dcs_polling_w )
+void dcs_audio_device::dcs_polling_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
m_polling_count = 0;
COMBINE_DATA(&m_polling_value);
}
-READ32_MEMBER(dcs_audio_device::dcs_polling32_r)
+uint32_t dcs_audio_device::dcs_polling32_r(address_space &space)
{
space.device().execute().eat_cycles(1000);
return m_polling32_value;
}
-WRITE32_MEMBER(dcs_audio_device::dcs_polling32_w)
+void dcs_audio_device::dcs_polling32_w(offs_t offset, uint32_t data, uint32_t mem_mask)
{
m_polling_count = 0;
COMBINE_DATA(&m_polling32_value);
@@ -2356,8 +2359,6 @@ int dcs_audio_device::preprocess_stage_1(uint16_t data)
TIMER_CALLBACK_MEMBER( dcs_audio_device::s2_ack_callback )
{
- address_space &space = m_cpu->space(AS_PROGRAM);
-
/* if the output is full, stall for a usec */
if (IS_OUTPUT_FULL())
{
@@ -2365,7 +2366,7 @@ TIMER_CALLBACK_MEMBER( dcs_audio_device::s2_ack_callback )
return;
}
output_latch_w(param);
- output_control_w(space, 0, (m_output_control & ~0xff00) | 0x0300, 0xffff);
+ output_control_w((m_output_control & ~0xff00) | 0x0300);
}