using System.IO; namespace MyNes.Core { [BoardInfo("Caltron 6-in-1", 41)] internal class Mapper041 : Board { private bool enableReg; private int vromReg; internal override void HardReset() { base.HardReset(); vromReg = 0; enableReg = true; } internal override void WriteSRM(ref ushort address, ref byte data) { if (address <= 26623) { Switch32KPRG(address & 7, PRGArea.Area8000); enableReg = (address & 4) == 4; vromReg = (vromReg & 3) | ((address >> 1) & 0xC); Switch08KCHR(vromReg); Switch01KNMTFromMirroring(((address & 0x20) == 32) ? Mirroring.Horz : Mirroring.Vert); } else { base.WriteSRM(ref address, ref data); } } internal override void WritePRG(ref ushort address, ref byte data) { if (enableReg) { vromReg = (vromReg & 0xC) | (data & 3); Switch08KCHR(vromReg); } } internal override void WriteStateData(ref BinaryWriter stream) { base.WriteStateData(ref stream); stream.Write(enableReg); stream.Write(vromReg); } internal override void ReadStateData(ref BinaryReader stream) { base.ReadStateData(ref stream); enableReg = stream.ReadBoolean(); vromReg = stream.ReadInt32(); } } }