BizHawk/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs

122 lines
1.9 KiB
C#

using System;
using BizHawk.Emulation.Common;
/*
0x0000 - 0x7FFF ROM
0x8000 - 0xC7FF Unmapped
0xC800 - 0xCFFF RAM (and shadows)
0xD000 - 0XD7FF 6522 (and shadows)
0xD800 - 0xDFFF 6522 + RAM
0xE000 - 0xEFFF Minestorm
0xF000 - 0xFFFF BIOS
*/
namespace BizHawk.Emulation.Cores.Consoles.Vectrex
{
public partial class VectrexHawk
{
public byte ReadMemory(ushort addr)
{
uint flags = (uint)MemoryCallbackFlags.AccessRead;
MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus");
if (addr < 0x8000)
{
return mapper.ReadMemory(addr);
}
else if (addr < 0xC800)
{
return 0xFF;
}
else if (addr < 0xD000)
{
return RAM[(addr-0xC800) & 0x3FF];
}
else if (addr < 0xD800)
{
return Read_Registers(addr & 0xF);
}
else if (addr < 0xE000)
{
return 0xFF;
}
else if (addr < 0xF000)
{
return minestorm[addr-0xE000];
}
else
{
return _bios[addr - 0xF000];
}
}
public void WriteMemory(ushort addr, byte value)
{
uint flags = (uint)MemoryCallbackFlags.AccessWrite;
MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus");
if (addr < 0x8000)
{
}
else if (addr < 0xC800)
{
}
else if (addr < 0xD000)
{
RAM[(addr - 0xC800) & 0x3FF] = value;
}
else if (addr < 0xD800)
{
Write_Registers(addr & 0xF, value);
}
else if (addr < 0xE000)
{
}
else if (addr < 0xF000)
{
}
else
{
}
}
public byte PeekMemory(ushort addr)
{
if (addr < 0x8000)
{
return mapper.ReadMemory(addr);
}
else if (addr < 0xC800)
{
return 0xFF;
}
else if (addr < 0xD000)
{
return RAM[(addr - 0xC800) & 0x3FF];
}
else if (addr < 0xD800)
{
return Read_Registers(addr & 0xF);
}
else if (addr < 0xE000)
{
return 0xFF;
}
else if (addr < 0xF000)
{
return minestorm[addr - 0xE000];
}
else
{
return _bios[addr - 0xF000];
}
}
}
}