using System; using System.Collections.Generic; using System.Linq; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Sega.GGHawkLink { public partial class GGHawkLink { private IMemoryDomains MemoryDomains; public void SetupMemoryDomains() { var domains = new List { new MemoryDomainDelegate( "Main RAM L", L.SystemRam.Length, MemoryDomain.Endian.Little, addr => L.SystemRam[addr], (addr, value) => L.SystemRam[addr] = value, 1), new MemoryDomainDelegate( "Main RAM R", R.SystemRam.Length, MemoryDomain.Endian.Little, addr => R.SystemRam[addr], (addr, value) => R.SystemRam[addr] = value, 1), new MemoryDomainDelegate( "System Bus L", 0X10000, MemoryDomain.Endian.Little, addr => PeekSystemBusL(addr), (addr, value) => PokeSystemBusL(addr, value), 1), new MemoryDomainDelegate( "System Bus R", 0X10000, MemoryDomain.Endian.Little, addr => PeekSystemBusR(addr), (addr, value) => PokeSystemBusR(addr, value), 1), new MemoryDomainDelegate( "ROM L", L.RomData.Length, MemoryDomain.Endian.Little, addr => L.RomData[addr], (addr, value) => L.RomData[addr] = value, 1), new MemoryDomainDelegate( "ROM R", R.RomData.Length, MemoryDomain.Endian.Little, addr => R.RomData[addr], (addr, value) => R.RomData[addr] = value, 1), new MemoryDomainDelegate( "VRAM L", L.Vdp.VRAM.Length, MemoryDomain.Endian.Little, addr => L.Vdp.VRAM[addr], (addr, value) => L.Vdp.VRAM[addr] = value, 1), new MemoryDomainDelegate( "VRAM R", R.Vdp.VRAM.Length, MemoryDomain.Endian.Little, addr => R.Vdp.VRAM[addr], (addr, value) => R.Vdp.VRAM[addr] = value, 1) }; if (L.SaveRAM != null) { var CartRamL = new MemoryDomainByteArray("Cart RAM L", MemoryDomain.Endian.Little, L.SaveRAM, true, 1); domains.Add(CartRamL); } if (R.SaveRAM != null) { var CartRamR = new MemoryDomainByteArray("Cart RAM R", MemoryDomain.Endian.Little, R.SaveRAM, true, 1); domains.Add(CartRamR); } MemoryDomains = new MemoryDomainList(domains); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } private byte PeekSystemBusL(long addr) { ushort addr2 = (ushort)(addr & 0xFFFF); return L.ReadMemory(addr2); } private byte PeekSystemBusR(long addr) { ushort addr2 = (ushort)(addr & 0xFFFF); return R.ReadMemory(addr2); } private void PokeSystemBusL(long addr, byte value) { ushort addr2 = (ushort)(addr & 0xFFFF); L.WriteMemory(addr2, value); } private void PokeSystemBusR(long addr, byte value) { ushort addr2 = (ushort)(addr & 0xFFFF); R.WriteMemory(addr2, value); } } }