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

59 lines
1.6 KiB
C#

using System.IO;
namespace MyNes.Core
{
[BoardInfo("Unknown", 53)]
[HassIssues]
internal class Mapper053 : Board
{
private byte[] regs = new byte[2];
private bool epromFirst;
internal override string Issues => MNInterfaceLanguage.IssueMapper53;
internal override void HardReset()
{
base.HardReset();
regs = new byte[2];
epromFirst = true;
Switch08KPRG(0, PRGArea.Area6000);
}
internal override void WritePRG(ref ushort address, ref byte data)
{
regs[1] = data;
UpdatePrg();
}
internal override void WriteSRM(ref ushort address, ref byte data)
{
regs[0] = data;
UpdatePrg();
Switch01KNMTFromMirroring(((data & 0x20) == 32) ? Mirroring.Horz : Mirroring.Vert);
}
private void UpdatePrg()
{
int num = (regs[0] << 3) & 0x78;
Switch08KPRG(((num << 1) | 0xF) + (epromFirst ? 4 : 0), PRGArea.Area6000);
Switch16KPRG(((regs[0] & 0x10) == 16) ? ((num | (regs[1] & 7)) + (epromFirst ? 2 : 0)) : ((!epromFirst) ? 128 : 0), PRGArea.Area8000);
Switch16KPRG(((regs[0] & 0x10) == 16) ? ((num | 7) + (epromFirst ? 2 : 0)) : (epromFirst ? 1 : 129), PRGArea.AreaC000);
}
internal override void WriteStateData(ref BinaryWriter stream)
{
base.WriteStateData(ref stream);
stream.Write(regs);
stream.Write(epromFirst);
}
internal override void ReadStateData(ref BinaryReader stream)
{
base.ReadStateData(ref stream);
stream.Read(regs, 0, 2);
epromFirst = stream.ReadBoolean();
}
}
}