summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/sa1111.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/sa1111.cpp')
-rw-r--r--src/devices/machine/sa1111.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/devices/machine/sa1111.cpp b/src/devices/machine/sa1111.cpp
index ac2b018c864..cc33ccd6892 100644
--- a/src/devices/machine/sa1111.cpp
+++ b/src/devices/machine/sa1111.cpp
@@ -483,16 +483,12 @@ TIMER_CALLBACK_MEMBER(sa1111_device::audio_tx_dma_callback)
return;
address_space &space = m_maincpu->space(AS_PROGRAM);
- uint32_t count;
- for (count = 0; count < remaining && count < avail; count++)
- {
- const uint32_t data = space.read_dword(m_audio_regs.sadta);
- LOGMASKED(LOG_AUDIO_DMA, "audio_tx_dma_callback: read data %08x from %08x, pushing to FIFO\n", data, m_audio_regs.sadta);
- audio_tx_fifo_push(data);
- m_audio_regs.sadta += 4;
- }
+ const uint32_t data = space.read_dword(m_audio_regs.sadta);
+ LOGMASKED(LOG_AUDIO_DMA, "audio_tx_dma_callback: read data %08x from %08x, pushing to FIFO\n", data, m_audio_regs.sadta);
+ audio_tx_fifo_push(data);
+ m_audio_regs.sadta += 4;
- m_audio_regs.sadtcc = (remaining - count) << 2;
+ m_audio_regs.sadtcc = (remaining - 1) << 2;
if (!m_audio_regs.sadtcc)
{
static constexpr uint32_t s_start_masks[2] = { (1 << SADTCS_TDSTA_BIT), (1 << SADTCS_TDSTB_BIT) };
@@ -723,7 +719,7 @@ void sa1111_device::audio_tx_fifo_push(uint32_t data)
{
const uint32_t divisor = ((m_sk_regs.skaud & SKAUD_ACD_MASK) >> SKAUD_ACD_BIT) + 1;
const uint32_t pll_clock = clock() * 39;
- attotime clock_period = attotime::from_ticks(divisor * 256, pll_clock);
+ attotime clock_period = attotime::from_ticks(divisor * 96, pll_clock);
m_audio_regs.tx_timer->adjust(clock_period, 0, clock_period);
}
}
@@ -1094,13 +1090,13 @@ void sa1111_device::sadtcs_w(offs_t offset, uint32_t data, uint32_t mem_mask)
if (BIT(data, SADTCS_TDBDA_BIT) || BIT(data, SADTCS_TDSTA_BIT))
{
- LOGMASKED(LOG_AUDIO_DMA, "%s: sadtcs_w: Clearing done A bit, lowering AUDTXA IRQ\n");
+ LOGMASKED(LOG_AUDIO_DMA, "%s: sadtcs_w: Clearing done A bit, lowering AUDTXA IRQ\n", machine().describe_context());
m_audio_regs.sadtcs &= ~(1 << SADTCS_TDBDA_BIT);
set_irq_line(INT_AUDTXA, 0);
}
if (BIT(data, SADTCS_TDBDB_BIT) || BIT(data, SADTCS_TDSTB_BIT))
{
- LOGMASKED(LOG_AUDIO_DMA, "%s: sadtcs_w: Clearing done B bit, lowering AUDTXB IRQ\n");
+ LOGMASKED(LOG_AUDIO_DMA, "%s: sadtcs_w: Clearing done B bit, lowering AUDTXB IRQ\n", machine().describe_context());
m_audio_regs.sadtcs &= ~(1 << SADTCS_TDBDB_BIT);
set_irq_line(INT_AUDTXB, 0);
}