2019-03-30 21:09:04 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
|
|
|
|
|
|
/*
|
2019-05-26 13:16:53 +00:00
|
|
|
|
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
|
2019-03-30 21:09:04 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Cores.Consoles.Vectrex
|
|
|
|
|
{
|
|
|
|
|
public partial class VectrexHawk
|
|
|
|
|
{
|
|
|
|
|
public byte ReadMemory(ushort addr)
|
|
|
|
|
{
|
2019-06-06 09:14:09 +00:00
|
|
|
|
uint flags = (uint)MemoryCallbackFlags.AccessRead;
|
|
|
|
|
MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus");
|
2019-03-30 21:09:04 +00:00
|
|
|
|
|
2019-04-08 23:57:21 +00:00
|
|
|
|
if (addr < 0x8000)
|
|
|
|
|
{
|
2019-05-26 13:16:53 +00:00
|
|
|
|
return mapper.ReadMemory(addr);
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xC800)
|
|
|
|
|
{
|
|
|
|
|
return 0xFF;
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD000)
|
|
|
|
|
{
|
|
|
|
|
return RAM[(addr-0xC800) & 0x3FF];
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD800)
|
|
|
|
|
{
|
2019-04-21 23:11:45 +00:00
|
|
|
|
return Read_Registers(addr & 0xF);
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xE000)
|
|
|
|
|
{
|
|
|
|
|
return 0xFF;
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xF000)
|
|
|
|
|
{
|
2019-06-17 13:06:37 +00:00
|
|
|
|
return minestorm[addr-0xE000];
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return _bios[addr - 0xF000];
|
|
|
|
|
}
|
2019-03-30 21:09:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void WriteMemory(ushort addr, byte value)
|
|
|
|
|
{
|
2019-06-06 09:14:09 +00:00
|
|
|
|
uint flags = (uint)MemoryCallbackFlags.AccessWrite;
|
|
|
|
|
MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus");
|
2019-04-08 23:57:21 +00:00
|
|
|
|
|
|
|
|
|
if (addr < 0x8000)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xC800)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD000)
|
|
|
|
|
{
|
|
|
|
|
RAM[(addr - 0xC800) & 0x3FF] = value;
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD800)
|
|
|
|
|
{
|
2019-04-21 23:11:45 +00:00
|
|
|
|
Write_Registers(addr & 0xF, value);
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xE000)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xF000)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
2019-03-30 21:09:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte PeekMemory(ushort addr)
|
|
|
|
|
{
|
2019-04-08 23:57:21 +00:00
|
|
|
|
if (addr < 0x8000)
|
|
|
|
|
{
|
2019-06-23 21:46:30 +00:00
|
|
|
|
return mapper.ReadMemory(addr);
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xC800)
|
|
|
|
|
{
|
|
|
|
|
return 0xFF;
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD000)
|
|
|
|
|
{
|
|
|
|
|
return RAM[(addr - 0xC800) & 0x3FF];
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xD800)
|
|
|
|
|
{
|
2019-04-21 23:11:45 +00:00
|
|
|
|
return Read_Registers(addr & 0xF);
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xE000)
|
|
|
|
|
{
|
|
|
|
|
return 0xFF;
|
|
|
|
|
}
|
|
|
|
|
else if (addr < 0xF000)
|
|
|
|
|
{
|
2019-06-17 13:06:37 +00:00
|
|
|
|
return minestorm[addr - 0xE000];
|
2019-04-08 23:57:21 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return _bios[addr - 0xF000];
|
|
|
|
|
}
|
2019-03-30 21:09:04 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|