mgba - add "Combined WRAM" memory domain. fixes #507

This commit is contained in:
zeromus 2015-09-28 23:54:44 -05:00
parent bacd3f6704
commit 3c0e46b5b2
1 changed files with 29 additions and 0 deletions

View File

@ -165,6 +165,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
#region IMemoryDomains
unsafe byte PeekWRAM(IntPtr xwram, long addr) { return *(byte*)xwram.ToPointer();}
unsafe void PokeWRAM(IntPtr xwram, long addr, byte value) { *(byte*)xwram.ToPointer() = value; }
private MemoryDomainList CreateMemoryDomains(int romsize)
{
var s = new LibmGBA.MemoryAreas();
@ -180,6 +183,32 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
mm.Add(MemoryDomain.FromIntPtr("OAM", 1024, l, s.oam, false, 4));
mm.Add(MemoryDomain.FromIntPtr("ROM", romsize, l, s.rom, false, 4));
// special combined ram memory domain
{
var ew = mm[1];
var iw = mm[0];
MemoryDomain cr = new MemoryDomain("Combined WRAM", (256 + 32) * 1024, MemoryDomain.Endian.Little,
delegate(long addr)
{
if (addr < 0 || addr >= (256 + 32) * 1024)
throw new IndexOutOfRangeException();
if (addr >= 256 * 1024)
return PeekWRAM(s.iwram,addr & 32767);
else
return PeekWRAM(s.wram, addr);
},
delegate(long addr, byte val)
{
if (addr < 0 || addr >= (256 + 32) * 1024)
throw new IndexOutOfRangeException();
if (addr >= 256 * 1024)
PokeWRAM(s.iwram, addr & 32767, val);
else
PokeWRAM(s.wram, addr, val);
}, 4);
mm.Add(cr);
}
_gpumem = new GBAGPUMemoryAreas
{
mmio = s.mmio,