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

64 lines
1.4 KiB
C#

using System;
using System.IO;
using System.Diagnostics;
namespace BizHawk.Emulation.Consoles.Nintendo
{
//http://wiki.nesdev.com/w/index.php/INES_Mapper_044
public class Mapper049 : MMC3Board_Base
{
public override bool Configure(NES.EDetectionOrigin origin)
{
//analyze board type
switch (Cart.board_type)
{
case "MAPPER049":
break;
default:
return false;
}
BaseSetup();
block = prg = 0;
mode = false;
return true;
}
public override void SyncState(Serializer ser)
{
base.SyncState(ser);
ser.Sync("block", ref block);
ser.Sync("prg", ref prg);
ser.Sync("mode", ref mode);
}
int block, prg;
bool mode;
public override void WriteWRAM(int addr, byte value)
{
if (!mmc3.wram_enable || mmc3.wram_write_protect) return;
mode = value.Bit(0);
prg = (value >> 4) & 3;
block = (value >> 6) & 3;
Console.WriteLine("val={3}, addr={4}, prg={0},mode={1},block={2}", prg, mode, block, value, addr);
base.WriteWRAM(addr, value);
}
protected override int Get_PRGBank_8K(int addr)
{
if (mode)
return (mapper.Get_PRGBank_8K(addr)&0xF) + block * (128 / 8);
int block_offset = addr >> 13;
return prg * 4 + block_offset;
}
protected override int Get_CHRBank_1K(int addr)
{
return (base.Get_CHRBank_1K(addr)&0x7F) + block * 128;
}
}
}