NESHawk: proper DMC address wrap
This commit is contained in:
parent
9b88ae48e8
commit
934a3ae266
|
@ -957,8 +957,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
sample_buffer_filled = true;
|
||||
sample_address = (ushort)(sample_address + 1);
|
||||
|
||||
//sample address wraps to 0xC000
|
||||
if (sample_address == 0) { sample_address = 0xC000;}
|
||||
//sample address wraps to 0x8000, even though this cannot be reached by write to address reg
|
||||
if (sample_address == 0) { sample_address = 0x8000; }
|
||||
// Console.WriteLine(sample_length);
|
||||
// Console.WriteLine(user_length);
|
||||
|
||||
|
|
|
@ -532,22 +532,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
do_the_reread_2007++;
|
||||
}
|
||||
*/
|
||||
if ((apu.dmc.sample_address & 0x401F) != 0x4016)
|
||||
if ((apu.dmc.sample_address & 0x1F) != 0x16)
|
||||
{
|
||||
do_the_reread_cont_1++;
|
||||
}
|
||||
|
||||
if ((apu.dmc.sample_address & 0x401F) == 0x4016)
|
||||
if ((apu.dmc.sample_address & 0x1F) == 0x16)
|
||||
{
|
||||
reread_opp_4016++;
|
||||
}
|
||||
|
||||
if ((apu.dmc.sample_address & 0x401F) != 0x4017)
|
||||
if ((apu.dmc.sample_address & 0x1F) != 0x17)
|
||||
{
|
||||
do_the_reread_cont_2++;
|
||||
}
|
||||
|
||||
if ((apu.dmc.sample_address & 0x401F) == 0x4017)
|
||||
if ((apu.dmc.sample_address & 0x1F) == 0x17)
|
||||
{
|
||||
reread_opp_4017++;
|
||||
}
|
||||
|
@ -582,7 +582,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
cpu.IRQ = _irq_apu || Board.IrqSignal;
|
||||
|
||||
// DMC was started in the APU, but in this case it only lasts 1 cycle and is then aborted, so put this here
|
||||
// TODO: should this clock controllers?
|
||||
// NOTE: for some famicoms, this will also clock controllers, this will need to be handled if emulating additional models
|
||||
if (apu.dmc.fill_glitch_2_end)
|
||||
{
|
||||
apu.dmc_dma_countdown = -1;
|
||||
|
|
Loading…
Reference in New Issue