using System.IO; namespace MyNes.Core { [BoardInfo("FDS-Port - Alt. Levels", 50)] internal class Mapper050 : Board { private int prg_page; private int irq_counter; private bool irq_enabled; internal override void HardReset() { base.HardReset(); Switch08KPRG(15, PRGArea.Area6000); Switch08KPRG(8, PRGArea.Area8000); Switch08KPRG(9, PRGArea.AreaA000); Switch08KPRG(11, PRGArea.AreaE000); } internal override void WriteEX(ref ushort address, ref byte data) { switch (address & 0x4120) { case 16416: prg_page = (data & 8) | ((data & 1) << 2) | ((data >> 1) & 3); Switch08KPRG(prg_page, PRGArea.AreaC000); break; case 16672: irq_enabled = (data & 1) == 1; if (!irq_enabled) { irq_counter = 0; NesEmu.IRQFlags &= -9; } break; } } internal override void OnCPUClock() { if (irq_enabled) { irq_counter++; if (irq_counter == 4096) { NesEmu.IRQFlags |= 8; irq_counter = 0; } } } internal override void WriteStateData(ref BinaryWriter stream) { base.WriteStateData(ref stream); stream.Write(prg_page); stream.Write(irq_counter); stream.Write(irq_enabled); } internal override void ReadStateData(ref BinaryReader stream) { base.ReadStateData(ref stream); prg_page = stream.ReadInt32(); irq_counter = stream.ReadInt32(); irq_enabled = stream.ReadBoolean(); } } }