BizHawk/BizHawk.Emulation/Consoles/PC Engine/MemoryMap.cs

58 lines
2.8 KiB
C#
Raw Normal View History

2011-01-11 02:55:51 +00:00
namespace BizHawk.Emulation.Consoles.TurboGrafx
{
public partial class PCEngine
{
private byte IOBuffer;
private byte ReadMemory(int addr)
2011-01-11 02:55:51 +00:00
{
if (addr < 0xFFFFF) // read ROM
return RomData[addr % RomLength];
2011-01-11 02:55:51 +00:00
if (addr >= 0x1F0000 && addr < 0x1F8000) // read RAM
return Ram[addr & 0x1FFF];
2011-01-11 02:55:51 +00:00
if (addr >= 0x1FE000) // hardware page.
2011-01-11 02:55:51 +00:00
{
2011-03-06 07:26:46 +00:00
if (addr < 0x1FE400) return VDC1.ReadVDC(addr);
if (addr < 0x1FE800) { Cpu.PendingCycles--; return VCE.ReadVCE(addr); }
if (addr < 0x1FEC00) return IOBuffer;
if (addr < 0x1FF000) { IOBuffer = (byte) (Cpu.TimerValue | (IOBuffer & 0x80)); return IOBuffer; }
if (addr >= 0x1FF000 &&
addr < 0x1FF400) { IOBuffer = ReadInput(); return IOBuffer; }
if ((addr & ~1) == 0x1FF400) return IOBuffer;
if (addr == 0x1FF402) { IOBuffer = (byte) (Cpu.IRQControlByte | (IOBuffer & 0xF8)); return IOBuffer; }
if (addr == 0x1FF403) { IOBuffer = (byte) (Cpu.ReadIrqStatus() | (IOBuffer & 0xF8)); return IOBuffer; }
2011-01-11 02:55:51 +00:00
}
Log.Error("MEM", "UNHANDLED READ: {0:X6}", addr);
2011-01-11 02:55:51 +00:00
return 0xFF;
}
private void WriteMemory(int addr, byte value)
2011-01-11 02:55:51 +00:00
{
if (addr >= 0x1F0000 && addr < 0x1F8000) // write RAM.
2011-01-11 02:55:51 +00:00
{
2011-03-17 04:36:46 +00:00
//if (Cpu.debug)
//Log.Note("MEM", "*Mem* Changed {0:X4} from {1:X2} to {2:X2}", addr & 0x1FFF, Ram[addr & 0x1FFF], value);
Ram[addr & 0x1FFF] = value;
2011-01-11 02:55:51 +00:00
}
else if (addr >= 0x1FE000) // hardware page.
2011-01-11 02:55:51 +00:00
{
2011-03-06 07:26:46 +00:00
if (addr < 0x1FE400) VDC1.WriteVDC(addr, value);
else if (addr < 0x1FE800) { Cpu.PendingCycles--; VCE.WriteVCE(addr, value); }
else if (addr < 0x1FEC00) { IOBuffer = value; PSG.WritePSG((byte)addr, value, Cpu.TotalExecutedCycles); }
else if (addr == 0x1FEC00) { IOBuffer = value; Cpu.WriteTimer(value); }
else if (addr == 0x1FEC01) { IOBuffer = value; Cpu.WriteTimerEnable(value); }
else if (addr >= 0x1FF000 &&
addr < 0x1FF400) { IOBuffer = value; WriteInput(value); }
else if (addr == 0x1FF402) { IOBuffer = value; Cpu.WriteIrqControl(value); }
else if (addr == 0x1FF403) { IOBuffer = value; Cpu.WriteIrqStatus(); }
else Log.Error("MEM", "unhandled hardware write [{0:X6}] : {1:X2}", addr, value);
2011-01-11 02:55:51 +00:00
}
else
Log.Error("MEM","UNHANDLED WRITE: {0:X6}:{1:X2}",addr,value);
2011-01-11 02:55:51 +00:00
}
}
}