diff --git a/BizHawk.Emulation/BizHawk.Emulation.csproj b/BizHawk.Emulation/BizHawk.Emulation.csproj index 8c4a218d52..b5760efad5 100644 --- a/BizHawk.Emulation/BizHawk.Emulation.csproj +++ b/BizHawk.Emulation/BizHawk.Emulation.csproj @@ -158,6 +158,7 @@ + diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper101.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper101.cs new file mode 100644 index 0000000000..cb3a15d654 --- /dev/null +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/Mapper101.cs @@ -0,0 +1,57 @@ +using System; +using System.IO; +using System.Diagnostics; + +namespace BizHawk.Emulation.Consoles.Nintendo +{ + //Urusei Yatsura - Lum no Wedding Bell (J) + class Mapper101 : NES.NESBoardBase + { + //configuration + int chr_bank_mask_8k; + + //state + int chr_bank_8k; + + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + ser.Sync("chr_bank_8k", ref chr_bank_8k); + } + + public override bool Configure(NES.EDetectionOrigin origin) + { + //configure + switch (Cart.board_type) + { + case "MAPPER101": + AssertPrg(32); AssertWram(0); AssertVram(0); AssertBattery(false); + break; + default: + return false; + } + + chr_bank_mask_8k = (Cart.chr_size / 8) - 1; + + SetMirrorType(Cart.pad_h, Cart.pad_v); + + return true; + } + + public override byte ReadPPU(int addr) + { + if (addr < 0x2000) + { + int ofs = addr & ((1 << 13) - 1); + addr = (chr_bank_8k << 13) | ofs; + return VROM[addr]; + } + else return base.ReadPPU(addr); + } + + public override void WriteWRAM(int addr, byte value) + { + chr_bank_8k = value & chr_bank_mask_8k; + } + } +}