67 lines
1.5 KiB
C#
67 lines
1.5 KiB
C#
![]() |
using System;
|
||
|
using System.IO;
|
||
|
using System.Diagnostics;
|
||
|
|
||
|
namespace BizHawk.Emulation.Consoles.Nintendo
|
||
|
{
|
||
|
public class NES_QJ : MMC3Board_Base
|
||
|
{
|
||
|
//state
|
||
|
int block;
|
||
|
|
||
|
public override void SyncState(Serializer ser)
|
||
|
{
|
||
|
base.SyncState(ser);
|
||
|
ser.Sync("block", ref block);
|
||
|
}
|
||
|
|
||
|
public override void WritePRG(int addr, byte value)
|
||
|
{
|
||
|
base.WritePRG(addr, value);
|
||
|
SetMirrorType(mmc3.MirrorType); //often redundant, but gets the job done
|
||
|
}
|
||
|
|
||
|
public override bool Configure(NES.EDetectionOrigin origin)
|
||
|
{
|
||
|
//analyze board type
|
||
|
switch (Cart.board_type)
|
||
|
{
|
||
|
case "NES-QJ": //super spike v'ball / nintendo world cup
|
||
|
AssertPrg(256); AssertChr(256); AssertVram(0); AssertWram(0);
|
||
|
AssertBattery(false);
|
||
|
break;
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
BaseSetup();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
protected override int Get_PRGBank_8K(int addr)
|
||
|
{
|
||
|
//base logic will return the mmc reg, which needs to be masked without awareness of the extra block
|
||
|
return (base.Get_PRGBank_8K(addr) & 0xF) + block * 16;
|
||
|
}
|
||
|
|
||
|
protected override int Get_CHRBank_1K(int addr)
|
||
|
{
|
||
|
//base logic will return the mmc reg, which needs to be masked without awareness of the extra block
|
||
|
return (base.Get_CHRBank_1K(addr) & 0x7F) + block * 128;
|
||
|
}
|
||
|
|
||
|
public override byte ReadWRAM(int addr)
|
||
|
{
|
||
|
return (byte)block;
|
||
|
}
|
||
|
public override void WriteWRAM(int addr, byte value)
|
||
|
{
|
||
|
if (mmc3.wram_enable && !mmc3.wram_write_protect)
|
||
|
{
|
||
|
block = value & 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|