diff --git a/BizHawk.Emulation/BizHawk.Emulation.csproj b/BizHawk.Emulation/BizHawk.Emulation.csproj index 66f10c07cb..1016721fcc 100644 --- a/BizHawk.Emulation/BizHawk.Emulation.csproj +++ b/BizHawk.Emulation/BizHawk.Emulation.csproj @@ -125,6 +125,7 @@ + diff --git a/BizHawk.Emulation/Consoles/Nintendo/Docs/compatibility.txt b/BizHawk.Emulation/Consoles/Nintendo/Docs/compatibility.txt index 47cbdf17ef..92d16c20fa 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/Docs/compatibility.txt +++ b/BizHawk.Emulation/Consoles/Nintendo/Docs/compatibility.txt @@ -95,12 +95,12 @@ Open bus and bus conflict emulation is not considered complete or thorough in an 164 Pirate Junk - Started 165 Pirate Junk 180 Misc (J) Complete (but we don't implement the crazy climber controller) -182 MMC3Variant Nothing +182 MMC3Variant Decent 184 Sunsoft-1 Complete 185 Misc (J) Complete 189 MMC3Variant Nothing -191 Pirate Junk -192 Pirate Junk +191 Pirate Junk (mmc3 variant) +192 Pirate Junk (mmc3 variant) 193 Unlicensed Junk - Started 194 Pirate Junk 200 Multicart Junk diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper182.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper182.cs new file mode 100644 index 0000000000..27694aa9b7 --- /dev/null +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/Mapper182.cs @@ -0,0 +1,65 @@ +using System; +using System.IO; +using System.Diagnostics; + +namespace BizHawk.Emulation.Consoles.Nintendo +{ + public class Mapper182 : MMC3Board_Base + { + public override bool Configure(NES.EDetectionOrigin origin) + { + //analyze board type + switch (Cart.board_type) + { + case "MAPPER182": + break; + default: + return false; + } + + BaseSetup(); + + return true; + } + + public override void WritePRG(int addr, byte value) + { + addr += 0x8000; + switch (addr & 0xE001) + { + case 0x8000: break; //? + case 0x8001: base.WritePRG(0xA000,value); break; + case 0xA000: + value = (byte)scramble_A000(value); + base.WritePRG(0x8000,value); + break; + case 0xA001: break; //? + case 0xC000: base.WritePRG(0x8001, value); break; + case 0xC001: + base.WritePRG(0xC000, value); + base.WritePRG(0xC001, value); + break; + default: + base.WritePRG(addr, value); + break; + } + } + + static byte[] scramble_table = new byte[] { 0, 3, 1, 5, 6, 7, 2, 4 }; + static int scramble_A000(byte val) + { + return (val & ~0x7) | scramble_table[val & 0x7]; + } + + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + } + + public override void WriteWRAM(int addr, byte value) + { + base.WriteWRAM(addr, value); + } + + } +} \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs index 1bd77f08f6..dcc368227b 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/iNES.cs @@ -106,6 +106,7 @@ static string ClassifyTable = @" 79 -1 -1 -1 -1 AVE-NINA-06; Blackjack (U) 113 -1 -1 -1 -1 AVE-NINA-06; ??? 115 -1 -1 -1 -1 MAPPER115 +182 -1 -1 -1 -1 MAPPER182 232 -1 -1 -1 -1 CAMERICA-ALGQ; Quattro Adventure 240 -1 -1 -1 -1 MAPPER240 ";