diff --git a/src/emu/sound/ymz280b.c b/src/emu/sound/ymz280b.c index 8f6360474f1..94469331575 100644 --- a/src/emu/sound/ymz280b.c +++ b/src/emu/sound/ymz280b.c @@ -607,9 +607,10 @@ void ymz280b_device::device_start() save_item(NAME(m_irq_enable)); save_item(NAME(m_keyon_enable)); save_item(NAME(m_ext_mem_enable)); - save_item(NAME(m_rom_readback_addr)); - save_item(NAME(m_rom_addr_hi)); - save_item(NAME(m_rom_addr_mid)); + save_item(NAME(m_ext_mem_address)); + save_item(NAME(m_ext_readlatch)); + save_item(NAME(m_ext_mem_address_hi)); + save_item(NAME(m_ext_mem_address_mid)); for (int j = 0; j < 8; j++) { save_item(NAME(m_voice[j].playing), j); @@ -657,7 +658,7 @@ void ymz280b_device::device_reset() m_current_register = 0; m_status_register = 0; - m_rom_readback_addr = 0; + m_ext_mem_address = 0; /* clear other voice parameters */ for (int i = 0; i < 8; i++) @@ -808,25 +809,25 @@ void ymz280b_device::write_to_register(int data) break; case 0x84: /* ROM readback / RAM write (high) */ - m_rom_addr_hi = data << 16; + m_ext_mem_address_hi = data << 16; break; case 0x85: /* ROM readback / RAM write (middle) */ - m_rom_addr_mid = data << 8; + m_ext_mem_address_mid = data << 8; break; case 0x86: /* ROM readback / RAM write (low) -> update latch */ - m_rom_readback_addr = m_rom_addr_hi | m_rom_addr_mid | data; + m_ext_mem_address = m_ext_mem_address_hi | m_ext_mem_address_mid | data; break; case 0x87: /* RAM write */ if (m_ext_mem_enable) { + m_ext_mem_address = (m_ext_mem_address + 1) & 0xffffff; if (!m_ext_write_handler.isnull()) - m_ext_write_handler(m_rom_readback_addr, data); + m_ext_write_handler(m_ext_mem_address, data); else - logerror("YMZ280B attempted RAM write to %X\n", m_rom_readback_addr); - m_rom_readback_addr = (m_rom_readback_addr + 1) & 0xffffff; + logerror("YMZ280B attempted RAM write to %X\n", m_ext_mem_address); } break; @@ -908,9 +909,10 @@ READ8_MEMBER( ymz280b_device::read ) return 0xff; /* read from external memory */ - UINT8 result = ymz280b_read_memory(m_rom_readback_addr); - m_rom_readback_addr = (m_rom_readback_addr + 1) & 0xffffff; - return result; + UINT8 ret = m_ext_readlatch; + m_ext_readlatch = ymz280b_read_memory(m_ext_mem_address); + m_ext_mem_address = (m_ext_mem_address + 1) & 0xffffff; + return ret; } else return compute_status(); @@ -943,9 +945,10 @@ ymz280b_device::ymz280b_device(const machine_config &mconfig, const char *tag, d m_irq_enable(0), m_keyon_enable(0), m_ext_mem_enable(0), - m_rom_addr_hi(0), - m_rom_addr_mid(0), - m_rom_readback_addr(0), + m_ext_mem_address_hi(0), + m_ext_mem_address_mid(0), + m_ext_mem_address(0), + m_ext_readlatch(0), m_irq_handler(*this), m_ext_read_handler(*this), m_ext_write_handler(*this) diff --git a/src/emu/sound/ymz280b.h b/src/emu/sound/ymz280b.h index d1d4bab316a..656ed30ec90 100644 --- a/src/emu/sound/ymz280b.h +++ b/src/emu/sound/ymz280b.h @@ -105,9 +105,10 @@ private: UINT8 m_irq_enable; /* current IRQ enable */ UINT8 m_keyon_enable; /* key on enable */ UINT8 m_ext_mem_enable; /* external memory enable */ - UINT32 m_rom_addr_hi; - UINT32 m_rom_addr_mid; - UINT32 m_rom_readback_addr; /* where the CPU can read the ROM */ + UINT8 m_ext_readlatch; /* external memory prefetched data */ + UINT32 m_ext_mem_address_hi; + UINT32 m_ext_mem_address_mid; + UINT32 m_ext_mem_address; /* where the CPU can read the ROM */ devcb2_write_line m_irq_handler; /* IRQ callback */ devcb2_read8 m_ext_read_handler; /* external RAM read handler */ diff --git a/src/mame/drivers/firebeat.c b/src/mame/drivers/firebeat.c index c66e976929c..0f275206769 100644 --- a/src/mame/drivers/firebeat.c +++ b/src/mame/drivers/firebeat.c @@ -1876,12 +1876,6 @@ ADDRESS_MAP_END READ8_MEMBER(firebeat_state::soundram_r) { - // HACK: firebeat expects first read after setting the address to be dummy. fixes "YMZ test". - if (offset > 0) - { - offset--; - } - if (offset < 0x200000) { return m_flash[1]->read(offset & 0x1fffff);