BizHawk/BizHawk.Emulation/Consoles/Nintendo/NES/Boards/MMC3_family/TQROM.cs

71 lines
1.5 KiB
C#
Raw Normal View History

using System;
using System.IO;
using System.Diagnostics;
namespace BizHawk.Emulation.Consoles.Nintendo
{
//aka mapper 119
//just high speed and pinbot with an MMC3 and some custom logic to select between chr rom and chr ram
[NES.INESBoardImplPriority]
public class TQSROM : MMC3Board_Base
{
public override bool Configure(NES.EDetectionOrigin origin)
{
//analyze board type
switch (Cart.board_type)
{
case "NES-TQROM": //high speed and pinbot
AssertPrg(128); AssertChr(64); AssertVram(8); AssertWram(0);
break;
default:
return false;
}
BaseSetup();
return true;
}
public override byte ReadPPU(int addr)
{
if (addr < 0x2000)
{
int bank_1k = mmc3.Get_CHRBank_1K(addr);
int use_ram = (bank_1k >> 6) & 1;
if (use_ram == 1)
{
addr = ((bank_1k&0x3f) << 10) | (addr & 0x3FF);
addr &= 0x1FFF;
return VRAM[addr];
}
else return base.ReadPPU(addr);
}
else
return base.ReadPPU(addr);
}
public override void WritePPU(int addr, byte value)
{
if (addr < 0x2000)
{
int bank_1k = mmc3.Get_CHRBank_1K(addr);
int use_ram = (bank_1k >> 6) & 1;
if (use_ram == 1)
{
addr = ((bank_1k & 0x3f) << 10) | (addr & 0x3FF);
addr &= 0x1FFF;
VRAM[addr] = value;
}
//else
// if this address is mapped to chrrom and not chrram, the write just does nothing
//base.WritePPU(addr, value);
}
else
base.WritePPU(addr, value);
}
}
}