summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit17e0ffb32bf0140943bb3f51e1764a23beec5c07 (patch)
tree3d4d996892cf8c97aa3c997bffa36ed6b9e9d740
parent47e9aa7d6bbef2f96e63cded271fa54f8c9e6836 (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.cpp4
-rw-r--r--src/devices/sound/ymfm.h6
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;
}