diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_BMC-Ghostbusters63in1.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_BMC-Ghostbusters63in1.cs index 631d6e08fd..5651c23ca7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_BMC-Ghostbusters63in1.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_BMC-Ghostbusters63in1.cs @@ -1,17 +1,20 @@ using BizHawk.Common; using BizHawk.Common.NumberExtensions; - +using System; + namespace BizHawk.Emulation.Cores.Nintendo.NES { // Adapted from FCEUX src public sealed class UNIF_BMC_Ghostbusters63in1 : NES.NESBoardBase { private ByteBuffer reg = new ByteBuffer(2); - private readonly int[] banks = new [] { 0, 0, 524288, 1048576 }; + private readonly int[] banks = new [] { 0, 0, 524288, 1048576}; private int bank; [MapperProp] - public int Ghostbusters63in1_chip; + public bool Ghostbusters63in1_63set=true; + [MapperProp] + public int Ghostbusters63in1_chip_22_select; public override bool Configure(NES.EDetectionOrigin origin) { @@ -32,7 +35,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { ser.Sync("reg", ref reg); ser.Sync("bank", ref bank); - ser.Sync("bank", ref Ghostbusters63in1_chip); + ser.Sync("bank", ref Ghostbusters63in1_63set); + ser.Sync("bank", ref Ghostbusters63in1_chip_22_select); base.SyncState(ser); } @@ -40,9 +44,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { reg[addr & 1] = value; - //bank = ((reg[0] & 0x80) >> 7) | ((reg[1] & 1) << 1); + bank = ((reg[0] & 0x80) >> 7) | ((reg[1] & 1) << 1); SetMirrorType(reg[0].Bit(6) ? EMirrorType.Vertical : EMirrorType.Horizontal); + Console.WriteLine(reg[0]); + Console.WriteLine(reg[1]); } public override byte ReadPRG(int addr) @@ -53,14 +59,24 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //} if (reg[0].Bit(5)) - { - var offset = (Ghostbusters63in1_chip % 3) * (1024 * 512); + { + var offset=0; + if (Ghostbusters63in1_63set) + offset = banks[bank]; + else + offset = banks[Ghostbusters63in1_chip_22_select]; + int b = (reg[0] & 0x1F); return ROM[offset + (b << 14) + (addr & 0x3FFF)]; } else - { - var offset = (Ghostbusters63in1_chip % 3) * (1024 * 512); + { + var offset = 0; + if (Ghostbusters63in1_63set) + offset = banks[bank]; + else + offset = banks[Ghostbusters63in1_chip_22_select]; + int b = ((reg[0] >> 1) & 0x0F); return ROM[offset + (b << 15) + addr]; }