forked from sin365/AxibugEmuOnline
89 lines
1.9 KiB
C#
89 lines
1.9 KiB
C#
using System.IO;
|
|
|
|
namespace MyNes.Core
|
|
{
|
|
[BoardInfo("Sachen Poker", 243)]
|
|
[HassIssues]
|
|
internal class Mapper243 : Board
|
|
{
|
|
private int addr;
|
|
|
|
private int chr_reg;
|
|
|
|
internal override string Issues => MNInterfaceLanguage.IssueMapper243;
|
|
|
|
internal override void HardReset()
|
|
{
|
|
base.HardReset();
|
|
addr = (chr_reg = 0);
|
|
}
|
|
|
|
internal override void WriteEX(ref ushort address, ref byte data)
|
|
{
|
|
if (address >= 20480 || address < 16416)
|
|
{
|
|
return;
|
|
}
|
|
switch (address & 0x4101)
|
|
{
|
|
case 16640:
|
|
addr = data & 7;
|
|
break;
|
|
case 16641:
|
|
switch (addr)
|
|
{
|
|
case 2:
|
|
chr_reg = ((data << 3) & 8) | (chr_reg & 7);
|
|
Switch08KCHR(chr_reg);
|
|
break;
|
|
case 4:
|
|
chr_reg = (data & 1) | (chr_reg & 0xE);
|
|
Switch08KCHR(chr_reg);
|
|
break;
|
|
case 5:
|
|
Switch32KPRG(data & 7, PRGArea.Area8000);
|
|
break;
|
|
case 6:
|
|
chr_reg = ((data & 3) << 1) | (chr_reg & 9);
|
|
Switch08KCHR(chr_reg);
|
|
break;
|
|
case 7:
|
|
switch ((data >> 1) & 3)
|
|
{
|
|
case 0:
|
|
Switch01KNMTFromMirroring(Mirroring.Horz);
|
|
break;
|
|
case 1:
|
|
Switch01KNMTFromMirroring(Mirroring.Vert);
|
|
break;
|
|
case 2:
|
|
Switch01KNMT(14);
|
|
break;
|
|
case 3:
|
|
Switch01KNMTFromMirroring(Mirroring.OneScB);
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
internal override void WriteStateData(ref BinaryWriter stream)
|
|
{
|
|
base.WriteStateData(ref stream);
|
|
stream.Write(addr);
|
|
stream.Write(chr_reg);
|
|
}
|
|
|
|
internal override void ReadStateData(ref BinaryReader stream)
|
|
{
|
|
base.ReadStateData(ref stream);
|
|
addr = stream.ReadInt32();
|
|
chr_reg = stream.ReadInt32();
|
|
}
|
|
}
|
|
}
|