GBHawk: Fix Airaki

This commit is contained in:
alyosha-tas 2018-05-12 18:33:11 -04:00
parent e8145af463
commit 073d36e40f
2 changed files with 27 additions and 6 deletions

View File

@ -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);

View File

@ -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))
{