2017-08-29 13:18:28 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|
|
|
|
{
|
|
|
|
|
public partial class GBHawk
|
|
|
|
|
{
|
|
|
|
|
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(
|
|
|
|
|
"Zero Page RAM",
|
|
|
|
|
ZP_RAM.Length,
|
|
|
|
|
MemoryDomain.Endian.Little,
|
|
|
|
|
addr => ZP_RAM[addr],
|
|
|
|
|
(addr, value) => ZP_RAM[addr] = value,
|
|
|
|
|
1),
|
|
|
|
|
new MemoryDomainDelegate(
|
|
|
|
|
"System Bus",
|
|
|
|
|
0X10000,
|
|
|
|
|
MemoryDomain.Endian.Little,
|
|
|
|
|
addr => PeekSystemBus(addr),
|
|
|
|
|
(addr, value) => PokeSystemBus(addr, value),
|
2017-11-22 19:42:12 +00:00
|
|
|
|
1),
|
|
|
|
|
new MemoryDomainDelegate(
|
|
|
|
|
"ROM",
|
|
|
|
|
_rom.Length,
|
|
|
|
|
MemoryDomain.Endian.Little,
|
|
|
|
|
addr => _rom[addr],
|
|
|
|
|
(addr, value) => ZP_RAM[addr] = value,
|
2017-08-29 13:18:28 +00:00
|
|
|
|
1)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
MemoryDomains = new MemoryDomainList(domains);
|
|
|
|
|
(ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(MemoryDomains);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private byte PeekSystemBus(long addr)
|
|
|
|
|
{
|
|
|
|
|
ushort addr2 = (ushort)(addr & 0xFFFF);
|
2017-11-23 02:38:56 +00:00
|
|
|
|
return PeekMemory(addr2);
|
2017-08-29 13:18:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PokeSystemBus(long addr, byte value)
|
|
|
|
|
{
|
|
|
|
|
ushort addr2 = (ushort)(addr & 0xFFFF);
|
|
|
|
|
WriteMemory(addr2, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|