BizHawk/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Farid-UNROM-8-in-1.cs

72 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Cores.Nintendo.NES
{
public sealed class Farid_UNROM_8_in_1 : NES.NESBoardBase
{
// http://forums.nesdev.com/viewtopic.php?f=9&t=11099
// state
int c; // clock bit for the second 74'161
int e; // /load for second 74'161. guaranteed to be 0 on powerup
int prginner;
int prgouter; // guaranteed to be 0 on powerup
public override bool Configure(NES.EDetectionOrigin origin)
{
switch (Cart.board_type)
{
case "UNIF_FARID_UNROM_8-IN-1":
AssertPrg(1024);
AssertChr(0);
break;
default:
return false;
}
Cart.vram_size = 8;
SetMirrorType(Cart.pad_h, Cart.pad_v);
return true;
}
public override void WritePRG(int addr, byte value)
{
prginner = value & 7;
int newc = value >> 7;
int newe = value >> 3 & 1;
if (newc > c && e == 0) // latch e and outer
{
e = newe;
prgouter = value >> 4 & 7;
}
c = newc;
}
public override byte ReadPRG(int addr)
{
int bnk = addr >= 0x4000 ? 7 : prginner;
bnk |= prgouter << 3;
return ROM[bnk << 14 | addr & 0x3fff];
}
public override void SyncState(BizHawk.Common.Serializer ser)
{
base.SyncState(ser);
ser.Sync("c", ref c);
ser.Sync("e", ref e);
ser.Sync("prginner", ref prginner);
ser.Sync("prgouter", ref prgouter);
}
public override void NESSoftReset()
{
e = 0;
prgouter = 0;
}
}
}