From 073d36e40f23b878e96f769794043e70c8f3a5c9 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 May 2018 18:33:11 -0400 Subject: [PATCH] GBHawk: Fix Airaki --- .../Consoles/Nintendo/GBHawk/Audio.cs | 15 +++++++++++---- .../Consoles/Nintendo/GBHawk/MemoryMap.cs | 18 ++++++++++++++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Audio.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Audio.cs index ad756ec936..b404cf0df3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Audio.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Audio.cs @@ -108,6 +108,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public byte AUD_CTRL_vol_R; public int sequencer_len, sequencer_vol, sequencer_swp, sequencer_tick; + public bool timer_bit_old; public byte sample; @@ -726,12 +727,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk master_audio_clock++; // frame sequencer ticks at a rate of 512 hz (or every time a 13 bit counter rolls over) - sequencer_tick++; + // the sequencer is actually the timer DIV register + // so if it's constantly written to, these values won't update + //sequencer_tick++; - if (sequencer_tick == 8192) + //if (sequencer_tick == 8192) + bool check = Core.double_speed ? Core.timer.divider_reg.Bit(13) : Core.timer.divider_reg.Bit(12); + if (check && !timer_bit_old) { - sequencer_tick = 0; - + //sequencer_tick = 0; + sequencer_vol++; sequencer_vol &= 0x7; sequencer_len++; sequencer_len &= 0x7; sequencer_swp++; sequencer_swp &= 0x7; @@ -883,6 +888,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } } } + timer_bit_old = Core.double_speed ? Core.timer.divider_reg.Bit(13) : Core.timer.divider_reg.Bit(12); } public void power_off() @@ -1028,6 +1034,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("sequencer_vol", ref sequencer_vol); ser.Sync("sequencer_swp", ref sequencer_swp); ser.Sync("sequencer_tick", ref sequencer_tick); + ser.Sync("timer_bit_old", ref timer_bit_old); ser.Sync("master_audio_clock", ref master_audio_clock); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs index 26a3e6e20d..1953dbd410 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs @@ -37,7 +37,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // some of gekkio's tests require these to be accessible during DMA if (addr < 0x4000) { - return mapper.ReadMemory(addr); + if (ppu.DMA_addr < 0x80) + { + return 0xFF; + } + else + { + return mapper.ReadMemory(addr); + } } else if ((addr >= 0xE000) && (addr < 0xF000)) { @@ -265,7 +272,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // some of gekkio's tests require these to be accessible during DMA if (addr < 0x4000) { - return mapper.ReadMemory(addr); + if (ppu.DMA_addr < 0x80) + { + return 0xFF; + } + else + { + return mapper.ReadMemory(addr); + } } else if ((addr >= 0xE000) && (addr < 0xF000)) {