diff options
author | Aaron Giles <aaron@aarongiles.com> | 2021-04-04 15:08:37 -0700 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2021-04-04 15:08:37 -0700 |
commit | 17e0ffb32bf0140943bb3f51e1764a23beec5c07 (patch) | |
tree | 3d4d996892cf8c97aa3c997bffa36ed6b9e9d740 | |
parent | 47e9aa7d6bbef2f96e63cded271fa54f8c9e6836 (diff) |
ymfm: Don't pre-mask status bits with the status mask; apply instead at time of consumption. Fixes missing music in kickball.
-rw-r--r-- | src/devices/sound/ymfm.cpp | 4 | ||||
-rw-r--r-- | src/devices/sound/ymfm.h | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/devices/sound/ymfm.cpp b/src/devices/sound/ymfm.cpp index 1e7427d260f..7c32b1a2eab 100644 --- a/src/devices/sound/ymfm.cpp +++ b/src/devices/sound/ymfm.cpp @@ -3103,7 +3103,7 @@ void ymfm_engine_base<RegisterType>::write(u16 regnum, u8 data) template<class RegisterType> u8 ymfm_engine_base<RegisterType>::status() const { - u8 result = m_status & ~STATUS_BUSY; + u8 result = m_status & ~STATUS_BUSY & ~m_regs.status_mask(); if (m_device.machine().time() < m_busy_end) result |= STATUS_BUSY; return result; @@ -3210,7 +3210,7 @@ TIMER_CALLBACK_MEMBER(ymfm_engine_base<RegisterType>::check_interrupts) { // update the state u8 old_state = m_irq_state; - m_irq_state = ((m_status & m_irq_mask) != 0); + m_irq_state = ((m_status & m_irq_mask & ~m_regs.status_mask()) != 0); // set the IRQ status bit if (m_irq_state) diff --git a/src/devices/sound/ymfm.h b/src/devices/sound/ymfm.h index 9f3c6d86fbf..8ab0ddc9d03 100644 --- a/src/devices/sound/ymfm.h +++ b/src/devices/sound/ymfm.h @@ -801,8 +801,8 @@ public: u32 irq_reset() const { return byte(0x04, 7, 1); } u32 reset_timer_b() const { return byte(0x04, 7, 1) | byte(0x04, 5, 1); } u32 reset_timer_a() const { return byte(0x04, 7, 1) | byte(0x04, 6, 1); } - u32 enable_timer_b() const { return byte(0x04, 5, 1) ^ 1; } - u32 enable_timer_a() const { return byte(0x04, 6, 1) ^ 1; } + u32 enable_timer_b() const { return 1; } + u32 enable_timer_a() const { return 1; } u32 load_timer_b() const { return byte(0x04, 1, 1); } u32 load_timer_a() const { return byte(0x04, 0, 1); } u32 csm() const { return IsOpl3Plus ? 0 : byte(0x08, 7, 1); } @@ -1300,7 +1300,7 @@ public: // set/reset bits in the status register, updating the IRQ status u8 set_reset_status(u8 set, u8 reset) { - m_status = (m_status | set) & ~reset & ~m_regs.status_mask(); + m_status = (m_status | set) & ~reset; schedule_check_interrupts(); return m_status; } |