BizHawk/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IMemoryDomains.cs

88 lines
2.1 KiB
C#
Raw Normal View History

2017-05-24 23:36:34 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
2017-05-24 23:36:34 +00:00
using BizHawk.Emulation.Common;
namespace BizHawk.Emulation.Cores.Atari.A7800Hawk
{
public partial class A7800Hawk
{
private IMemoryDomains MemoryDomains;
public void SetupMemoryDomains()
{
var domains = new List<MemoryDomain>
{
new MemoryDomainDelegate(
"Main RAM",
RAM.Length,
MemoryDomain.Endian.Little,
addr => RAM[addr],
(addr, value) => RAM[addr] = value,
1),
new MemoryDomainDelegate(
"TIA Registers",
0x20,
2017-05-24 23:36:34 +00:00
MemoryDomain.Endian.Little,
addr => tia.ReadMemory((ushort)addr,true),
(addr, value) => tia.WriteMemory((ushort)addr, value, true),
2017-05-24 23:36:34 +00:00
1),
new MemoryDomainDelegate(
"Maria Registers",
Maria_regs.Length,
MemoryDomain.Endian.Little,
addr => Maria_regs[addr],
(addr, value) => Maria_regs[addr] = value,
1),
new MemoryDomainDelegate(
"6532 RAM",
RAM_6532.Length,
2017-05-24 23:36:34 +00:00
MemoryDomain.Endian.Little,
addr => RAM_6532[addr],
(addr, value) => RAM_6532[addr] = value,
2017-05-24 23:36:34 +00:00
1),
new MemoryDomainDelegate(
"Ram Block 0",
0xC0,
2017-05-24 23:36:34 +00:00
MemoryDomain.Endian.Little,
2017-07-23 14:07:01 +00:00
addr => RAM[addr+0x840],
(addr, value) => RAM[addr+0x800] = value,
2017-05-24 23:36:34 +00:00
1
),
new MemoryDomainDelegate(
"Ram Block 1",
0xC0,
2017-05-24 23:36:34 +00:00
MemoryDomain.Endian.Little,
2017-07-23 14:07:01 +00:00
addr => RAM[addr+0x940],
(addr, value) => RAM[addr+0x900] = value,
2017-05-24 23:36:34 +00:00
1
),
new MemoryDomainDelegate(
"System Bus",
0X10000,
MemoryDomain.Endian.Little,
addr => PeekSystemBus(addr),
(addr, value) => PokeSystemBus(addr, value),
1
)
};
MemoryDomains = new MemoryDomainList(domains);
(ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(MemoryDomains);
}
private byte PeekSystemBus(long addr)
{
2017-05-28 00:40:13 +00:00
ushort addr2 = (ushort)(addr & 0xFFFF);
return ReadMemory(addr2);
2017-05-24 23:36:34 +00:00
}
private void PokeSystemBus(long addr, byte value)
{
2017-05-28 00:40:13 +00:00
ushort addr2 = (ushort)(addr & 0xFFFF);
WriteMemory(addr2, value);
2017-05-24 23:36:34 +00:00
}
}
}