summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ryan Holtz <ryan.holtz@arrowheadgs.com>2018-10-16 06:52:07 +0200
committer Ryan Holtz <ryan.holtz@arrowheadgs.com>2018-10-16 06:52:07 +0200
commit6c905e556b8b1d1bb490cb49f66ed62d47fd1106 (patch)
treee588747150f647eb5e20f24933c1a65c9699fb64
parent6260d7237376a5ac09ede23864dbf008eb9deb7e (diff)
spg2xx: Fixed beat count register handling. Fixes non-looping music. [Ryan Holtz]
-rw-r--r--src/devices/machine/spg2xx.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/devices/machine/spg2xx.cpp b/src/devices/machine/spg2xx.cpp
index d4234b0df93..4c51b699543 100644
--- a/src/devices/machine/spg2xx.cpp
+++ b/src/devices/machine/spg2xx.cpp
@@ -2515,19 +2515,12 @@ void spg2xx_device::audio_frame_tick()
void spg2xx_device::audio_beat_tick()
{
- uint16_t beat_count = m_audio_regs[AUDIO_BEAT_COUNT] & AUDIO_BEAT_COUNT_MASK;
- if (beat_count == 0)
- return;
-
- m_audio_curr_beat_base_count--;
if (m_audio_curr_beat_base_count == 0)
{
LOGMASKED(LOG_BEAT, "Beat base count elapsed, reloading with %d\n", m_audio_regs[AUDIO_BEAT_BASE_COUNT]);
m_audio_curr_beat_base_count = m_audio_regs[AUDIO_BEAT_BASE_COUNT];
- beat_count--;
- m_audio_regs[AUDIO_BEAT_COUNT] = (m_audio_regs[AUDIO_BEAT_COUNT] & ~AUDIO_BEAT_COUNT_MASK) | beat_count;
-
+ uint16_t beat_count = m_audio_regs[AUDIO_BEAT_COUNT] & AUDIO_BEAT_COUNT_MASK;
if (beat_count == 0)
{
if (m_audio_regs[AUDIO_BEAT_COUNT] & AUDIO_BIE_MASK)
@@ -2541,6 +2534,15 @@ void spg2xx_device::audio_beat_tick()
LOGMASKED(LOG_BEAT, "Beat count elapsed but IRQ not enabled\n");
}
}
+ else
+ {
+ beat_count--;
+ m_audio_regs[AUDIO_BEAT_COUNT] = (m_audio_regs[AUDIO_BEAT_COUNT] & ~AUDIO_BEAT_COUNT_MASK) | beat_count;
+ }
+ }
+ else
+ {
+ m_audio_curr_beat_base_count--;
}
}