using System; using System.IO; using System.Diagnostics; namespace BizHawk.Emulation.Consoles.Nintendo { public class Mapper115 : MMC3Board_Base { public override bool Configure(NES.EDetectionOrigin origin) { //analyze board type switch (Cart.board_type) { case "MAPPER115": break; default: return false; } BaseSetup(); return true; } public override void SyncState(Serializer ser) { base.SyncState(ser); ser.Sync("prg_mode", ref prg_mode); ser.Sync("prg_page", ref prg_page); ser.Sync("chr_block_or", ref chr_block_or); } bool prg_mode; int prg_page, chr_block_or; public override void WriteWRAM(int addr, byte value) { base.WriteWRAM(addr, value); switch (addr & 1) { case 0: prg_mode = value.Bit(7); prg_page = (value & 0xF) * 2; break; case 1: chr_block_or = (value & 0x1)<<8; break; } } protected override int Get_PRGBank_8K(int addr) { int bank_8k = mapper.Get_PRGBank_8K(addr); if (prg_mode == false) return bank_8k; else if (addr < 0x4000) { return (addr >> 13) + prg_page; } else return bank_8k; } protected override int Get_CHRBank_1K(int addr) { int bank_1k = base.Get_CHRBank_1K(addr); return bank_1k | chr_block_or; } } }