AxibugEmuOnline/AxibugEmuOnline.Client/Assets/MyNes.Core/Mapper060.cs
2024-07-03 18:22:22 +08:00

68 lines
1.6 KiB
C#

using System.IO;
namespace MyNes.Core
{
[BoardInfo("Unknown", 60)]
[HassIssues]
internal class Mapper060 : Board
{
private int latch;
private byte menu;
internal override string Issues => MNInterfaceLanguage.IssueMapper60;
internal override void HardReset()
{
base.HardReset();
latch = 0;
menu = 0;
}
internal override void SoftReset()
{
base.SoftReset();
latch = 0;
menu = (byte)((uint)(menu + 1) & 3u);
Switch08KCHR(menu);
Switch16KPRG(menu, PRGArea.Area8000);
Switch16KPRG(menu, PRGArea.AreaC000);
}
internal override void WritePRG(ref ushort address, ref byte data)
{
latch = address & 0x100;
Switch01KNMTFromMirroring(((address & 8) == 8) ? Mirroring.Horz : Mirroring.Vert);
Switch16KPRG((address >> 4) & ~((~address >> 7) & 1), PRGArea.Area8000);
Switch16KPRG((address >> 4) | ((~address >> 7) & 1), PRGArea.AreaC000);
Switch08KCHR(address);
}
internal override void ReadPRG(ref ushort address, out byte data)
{
if (latch == 0)
{
base.ReadPRG(ref address, out data);
}
else
{
data = menu;
}
}
internal override void WriteStateData(ref BinaryWriter stream)
{
base.WriteStateData(ref stream);
stream.Write(latch);
stream.Write(menu);
}
internal override void ReadStateData(ref BinaryReader stream)
{
base.ReadStateData(ref stream);
latch = stream.ReadInt32();
menu = stream.ReadByte();
}
}
}