forked from sin365/AxibugEmuOnline
68 lines
1.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|