From c6a319763f68d7db7c9d07cfd7f6fd0678ee4922 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Tue, 13 Sep 2016 15:23:05 -0400 Subject: [PATCH] Fix Super mario bros 8 --- .../Consoles/Nintendo/NES/Boards/Mapper222.cs | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs index 82ac877d3a..d249370787 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using BizHawk.Common; +using BizHawk.Common.NumberExtensions; namespace BizHawk.Emulation.Cores.Nintendo.NES { @@ -51,18 +52,32 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES prg[1] = value & prg_bank_mask_8k; break; case 0x7000: - case 0x7001: + //case 0x7001: // this is of course sort of VRC like... except it doesn't work right - irq_time = (256 - value) * 113; + irq_time = value; IRQSignal = false; - irq_counting = false; + irq_counting = true; + if (value == 0) + irq_counting = false; Console.WriteLine("IRQ Set\\Ack: SL {0} val {1}", NES.ppu.ppur.status.sl, value); break; - case 0x7002: - irq_counting = true; - Console.WriteLine("IRQ GO: SL {0} val {1}", NES.ppu.ppur.status.sl, value); - break; + //case 0x7002: + //irq_counting = true; + //Console.WriteLine("IRQ GO: SL {0} val {1}", NES.ppu.ppur.status.sl, value); + //break; + case 0x1000: SetMirrorType(!value.Bit(0) ? EMirrorType.Vertical : EMirrorType.Horizontal);break; + case 0x3000: chr[0] = value & chr_bank_mask_1k; ; break; + case 0x3002: chr[1] = value & chr_bank_mask_1k; ; break; + case 0x4000: chr[2] = value & chr_bank_mask_1k; ; break; + case 0x4002: chr[3] = value & chr_bank_mask_1k; ; break; + case 0x5000: chr[4] = value & chr_bank_mask_1k; ; break; + case 0x5002: chr[5] = value & chr_bank_mask_1k; ; break; + case 0x6000: chr[6] = value & chr_bank_mask_1k; ; break; + case 0x6002: chr[7] = value & chr_bank_mask_1k; ; break; + + } + /* if (addr >= 0x3000 && addr < 0x7000) { int b = (addr >> 11) - 6; @@ -72,7 +87,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES chr[b] = (chr[b] & 0x0f | value << 4) & chr_bank_mask_1k; else chr[b] = (chr[b] & 0xf0 | value & 0x0f) & chr_bank_mask_1k; - } + }*/ } public override byte ReadPRG(int addr) @@ -92,11 +107,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { if (irq_counting) { - irq_time--; - if (irq_time == 0) + irq_time++; + if (irq_time >= 240) { - irq_counting = false; + //irq_counting = false; IRQSignal = true; + //irq_time = 0; Console.WriteLine("IRQ TRIG: SL {0}", NES.ppu.ppur.status.sl); } }