BizHawk/BizHawk.Emulation/Consoles/Intellivision/MemoryMap.cs

75 lines
1.9 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Consoles.Intellivision
{
public sealed partial class Intellivision
{
private ushort[] STIC_Registers = new ushort[64];
private ushort[] Scratchpad_RAM = new ushort[240];
private ushort[] PSG_Registers = new ushort[16];
private ushort[] System_RAM = new ushort[352];
private ushort[] Executive_ROM = new ushort[4096];
private ushort[] Graphics_ROM = new ushort[2048];
private ushort[] Graphics_RAM = new ushort[512];
public ushort ReadMemory(ushort addr)
{
switch (addr & 0xF000)
{
case 0x0000:
if (addr >= 0x0100 && addr <= 0x01EF)
return Scratchpad_RAM[addr & 0x00EF];
if (addr >= 0x01F0 && addr <= 0x01FF)
return PSG_Registers[addr & 0x000F];
if (addr >= 0x0200 && addr <= 0x035F)
return System_RAM[addr & 0x015F];
break;
case 0x1000:
return Executive_ROM[addr & 0x0FFF];
case 0x3000:
if (addr >= 0x3000 && addr <= 0x37FF)
return Graphics_ROM[addr & 0x07FF];
if (addr >= 0x3800 && addr <= 0x39FF)
return Graphics_RAM[addr & 0x01FF];
break;
}
throw new NotImplementedException();
}
public void WriteMemory(ushort addr, ushort value)
{
switch (addr & 0xF000)
{
case 0x0000:
if (addr >= 0x0100 && addr <= 0x01EF)
{
Scratchpad_RAM[addr & 0x00EF] = value;
return;
}
if (addr >= 0x01F0 && addr <= 0x01FF)
{
PSG_Registers[addr & 0x000F] = value;
return;
}
if (addr >= 0x0200 && addr <= 0x035F)
{
System_RAM[addr & 0x015F] = value;
return;
}
break;
case 0x3000:
if (addr >= 0x3800 && addr <= 0x39FF)
{
Graphics_RAM[addr & 0x01FF] = value;
return;
}
break;
}
throw new NotImplementedException();
}
}
}