memory domain: minor refactor and cleanup
This commit is contained in:
parent
20f78a579f
commit
ceae8d71b5
|
@ -25,6 +25,41 @@ namespace BizHawk.Emulation.Common
|
|||
PokeByte = pokeByte;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// create a memorydomain that references an unmanaged memory block
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="size"></param>
|
||||
/// <param name="endian"></param>
|
||||
/// <param name="data">must remain valid as long as the MemoryDomain exists!</param>
|
||||
/// <returns></returns>
|
||||
public unsafe static MemoryDomain FromIntPtr(string name, int size, Endian endian, IntPtr data)
|
||||
{
|
||||
if (data == IntPtr.Zero)
|
||||
throw new ArgumentNullException("data");
|
||||
if (size <= 0)
|
||||
throw new ArgumentOutOfRangeException("size");
|
||||
byte *p = (byte*) data;
|
||||
return new MemoryDomain
|
||||
(
|
||||
name,
|
||||
size,
|
||||
endian,
|
||||
delegate(int addr)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
return p[addr];
|
||||
},
|
||||
delegate(int addr, byte val)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
p[addr] = val;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public MemoryDomain() { }
|
||||
|
||||
public override string ToString()
|
||||
|
|
|
@ -243,27 +243,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
if (data == IntPtr.Zero)
|
||||
throw new Exception("libmeteor_getmemoryarea() returned NULL??");
|
||||
|
||||
MemoryDomain md = new MemoryDomain(name, size, MemoryDomain.Endian.Little,
|
||||
delegate(int addr)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
byte* d = (byte*)data;
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new IndexOutOfRangeException();
|
||||
return d[addr];
|
||||
}
|
||||
},
|
||||
delegate(int addr, byte val)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
byte* d = (byte*)data;
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new IndexOutOfRangeException();
|
||||
d[addr] = val;
|
||||
}
|
||||
});
|
||||
MemoryDomain md = MemoryDomain.FromIntPtr(name, size, MemoryDomain.Endian.Little, data);
|
||||
_MemoryDomains.Add(md);
|
||||
}
|
||||
|
||||
|
|
|
@ -689,7 +689,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
|
||||
#region MemoryDomains
|
||||
|
||||
unsafe void CreateMemoryDomain(LibGambatte.MemoryAreas which, string name)
|
||||
void CreateMemoryDomain(LibGambatte.MemoryAreas which, string name)
|
||||
{
|
||||
IntPtr data = IntPtr.Zero;
|
||||
int length = 0;
|
||||
|
@ -702,21 +702,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
if (data == IntPtr.Zero && length > 0)
|
||||
throw new Exception("bad return from gambatte_getmemoryarea()");
|
||||
|
||||
byte* ptr = (byte*)data;
|
||||
|
||||
_MemoryDomains.Add(new MemoryDomain(name, length, MemoryDomain.Endian.Little,
|
||||
delegate(int addr)
|
||||
{
|
||||
if (addr < 0 || addr >= length)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
return ptr[addr];
|
||||
},
|
||||
delegate(int addr, byte val)
|
||||
{
|
||||
if (addr < 0 || addr >= length)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
ptr[addr] = val;
|
||||
}));
|
||||
_MemoryDomains.Add(MemoryDomain.FromIntPtr(name, length, MemoryDomain.Endian.Little, data));
|
||||
}
|
||||
|
||||
void InitMemoryDomains()
|
||||
|
|
|
@ -582,23 +582,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
if (area == IntPtr.Zero || pname == IntPtr.Zero || size == 0)
|
||||
continue;
|
||||
string name = Marshal.PtrToStringAnsi(pname);
|
||||
byte* p = (byte*)area;
|
||||
|
||||
mm.Add(new MemoryDomain(name, size, MemoryDomain.Endian.Unknown,
|
||||
delegate(int addr)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
return p[addr];
|
||||
},
|
||||
delegate(int addr, byte val)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
p[addr] = val;
|
||||
}));
|
||||
mm.Add(MemoryDomain.FromIntPtr(name, size, MemoryDomain.Endian.Unknown, area));
|
||||
}
|
||||
|
||||
MemoryDomains = new MemoryDomainList(mm, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -315,23 +315,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan
|
|||
if (size == 0)
|
||||
continue;
|
||||
string sname = Marshal.PtrToStringAnsi(name);
|
||||
byte *p = (byte*)data;
|
||||
mmd.Add(new MemoryDomain(
|
||||
sname,
|
||||
size,
|
||||
MemoryDomain.Endian.Little,
|
||||
delegate(int addr)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
return p[addr];
|
||||
},
|
||||
delegate(int addr, byte value)
|
||||
{
|
||||
if (addr < 0 || addr >= size)
|
||||
throw new ArgumentOutOfRangeException();
|
||||
p[addr] = value;
|
||||
}));
|
||||
mmd.Add(MemoryDomain.FromIntPtr(sname, size, MemoryDomain.Endian.Little, data));
|
||||
}
|
||||
MemoryDomains = new MemoryDomainList(mmd, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue