diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/JALECO_JF_05_06_07.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/JALECO_JF_05_06_07.cs index 2bd1085b2b..599ff50416 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/JALECO_JF_05_06_07.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/JALECO_JF_05_06_07.cs @@ -17,64 +17,63 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public sealed class JALECO_JF_05_06_07 : NES.NESBoardBase { bool hibit, lowbit; + int prg_byte_mask; + int chr; + int chr_mask_8k; public override bool Configure(NES.EDetectionOrigin origin) { switch (Cart.board_type) { case "MAPPER087": + AssertPrg(8, 16, 32); + AssertChr(8, 16, 32); + AssertVram(0); + Cart.wram_size = 0; break; case "JALECO-JF-05": case "JALECO-JF-06": - AssertPrg(16); AssertChr(16); AssertVram(0); AssertWram(0); - break; + case "TAITO-74*139/74": case "JALECO-JF-07": - AssertPrg(32); AssertChr(16); AssertVram(0); AssertWram(0); + case "JALECO-JF-08": + case "KONAMI-74*139/74": + case "JALECO-JF-10": + AssertPrg(16, 32); AssertChr(16, 32); AssertVram(0); AssertWram(0); break; default: return false; } - SetMirrorType(NES.NESBoardBase.EMirrorType.Vertical); + prg_byte_mask = Cart.prg_size * 1024 - 1; + chr_mask_8k = Cart.chr_size / 8 - 1; + SetMirrorType(Cart.pad_h, Cart.pad_v); + return true; } public override void SyncState(Serializer ser) { base.SyncState(ser); - ser.Sync("hibit", ref hibit); - ser.Sync("lowbit", ref lowbit); + ser.Sync("chr", ref chr); } public override void WriteWRAM(int addr, byte value) { - hibit = value.Bit(0); - lowbit = value.Bit(1); + // 2 bits, but flipped + chr = value << 1 & 2 | value >> 1 & 1; + chr &= chr_mask_8k; } public override byte ReadPPU(int addr) { if (addr < 0x2000) - { - if (lowbit) - { - if (hibit) - return VROM[addr + 0x6000]; - return VROM[addr + 0x2000]; - } - else - { - if (hibit) - return VROM[addr + 0x4000]; - return VROM[addr]; - } - } - return base.ReadPPU(addr); + return VROM[addr | chr << 13]; + else + return base.ReadPPU(addr); } public override byte ReadPRG(int addr) { - if (addr > 0x4000) addr -= 0x4000; - return base.ReadPRG(addr); + return ROM[addr & prg_byte_mask]; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper101.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper101.cs index 02f1be7ccd..70cb903b1c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper101.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper101.cs @@ -2,7 +2,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { - //Urusei Yatsura - Lum no Wedding Bell (J) + // Mapper 101: + // bad dumps of Urusei - Lum no Wedding Bell (J) + // good dumps of this rom are on Mapper087; only bad dumps with CHR banks out of order go here + // nothing else uses this, other than hypothetical homebrews which might prefer it to CxROM + // because of no bus conflicts public sealed class Mapper101 : NES.NESBoardBase { //configuration @@ -23,7 +27,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES switch (Cart.board_type) { case "MAPPER101": - AssertPrg(32); AssertWram(0); AssertVram(0); AssertBattery(false); + AssertPrg(16, 32); AssertVram(0); + Cart.wram_size = 0; + Cart.wram_battery = false; + AssertChr(8, 16, 32, 64, 128, 256, 512, 1024, 2048); break; default: return false;