2017-05-24 23:36:34 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2017-06-16 20:44:57 +00:00
|
|
|
|
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",
|
2017-07-16 15:56:02 +00:00
|
|
|
|
0x20,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
MemoryDomain.Endian.Little,
|
2017-07-16 15:56:02 +00:00
|
|
|
|
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(
|
2017-07-05 20:14:27 +00:00
|
|
|
|
"6532 RAM",
|
|
|
|
|
RAM_6532.Length,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
MemoryDomain.Endian.Little,
|
2017-07-05 20:14:27 +00:00
|
|
|
|
addr => RAM_6532[addr],
|
|
|
|
|
(addr, value) => RAM_6532[addr] = value,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
1),
|
|
|
|
|
new MemoryDomainDelegate(
|
|
|
|
|
"Ram Block 0",
|
2017-07-29 22:05:23 +00:00
|
|
|
|
0xC0,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
MemoryDomain.Endian.Little,
|
2017-07-23 14:07:01 +00:00
|
|
|
|
addr => RAM[addr+0x840],
|
2017-07-29 22:06:25 +00:00
|
|
|
|
(addr, value) => RAM[addr+0x840] = value,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
1
|
|
|
|
|
),
|
|
|
|
|
new MemoryDomainDelegate(
|
|
|
|
|
"Ram Block 1",
|
2017-07-29 22:05:23 +00:00
|
|
|
|
0xC0,
|
2017-05-24 23:36:34 +00:00
|
|
|
|
MemoryDomain.Endian.Little,
|
2017-07-23 14:07:01 +00:00
|
|
|
|
addr => RAM[addr+0x940],
|
2017-07-29 22:06:25 +00:00
|
|
|
|
(addr, value) => RAM[addr+0x940] = 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
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|