diff options
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 |
commit | 6c905e556b8b1d1bb490cb49f66ed62d47fd1106 (patch) | |
tree | e588747150f647eb5e20f24933c1a65c9699fb64 | |
parent | 6260d7237376a5ac09ede23864dbf008eb9deb7e (diff) |
spg2xx: Fixed beat count register handling. Fixes non-looping music. [Ryan Holtz]
-rw-r--r-- | src/devices/machine/spg2xx.cpp | 18 |
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--; } } |