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;
|
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 MemoryDomain() { }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|
|
@ -243,27 +243,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
if (data == IntPtr.Zero)
|
if (data == IntPtr.Zero)
|
||||||
throw new Exception("libmeteor_getmemoryarea() returned NULL??");
|
throw new Exception("libmeteor_getmemoryarea() returned NULL??");
|
||||||
|
|
||||||
MemoryDomain md = new MemoryDomain(name, size, MemoryDomain.Endian.Little,
|
MemoryDomain md = MemoryDomain.FromIntPtr(name, size, MemoryDomain.Endian.Little, data);
|
||||||
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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
_MemoryDomains.Add(md);
|
_MemoryDomains.Add(md);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -689,7 +689,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
#region MemoryDomains
|
#region MemoryDomains
|
||||||
|
|
||||||
unsafe void CreateMemoryDomain(LibGambatte.MemoryAreas which, string name)
|
void CreateMemoryDomain(LibGambatte.MemoryAreas which, string name)
|
||||||
{
|
{
|
||||||
IntPtr data = IntPtr.Zero;
|
IntPtr data = IntPtr.Zero;
|
||||||
int length = 0;
|
int length = 0;
|
||||||
|
@ -702,21 +702,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
if (data == IntPtr.Zero && length > 0)
|
if (data == IntPtr.Zero && length > 0)
|
||||||
throw new Exception("bad return from gambatte_getmemoryarea()");
|
throw new Exception("bad return from gambatte_getmemoryarea()");
|
||||||
|
|
||||||
byte* ptr = (byte*)data;
|
_MemoryDomains.Add(MemoryDomain.FromIntPtr(name, length, MemoryDomain.Endian.Little, 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;
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitMemoryDomains()
|
void InitMemoryDomains()
|
||||||
|
|
|
@ -582,23 +582,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
||||||
if (area == IntPtr.Zero || pname == IntPtr.Zero || size == 0)
|
if (area == IntPtr.Zero || pname == IntPtr.Zero || size == 0)
|
||||||
continue;
|
continue;
|
||||||
string name = Marshal.PtrToStringAnsi(pname);
|
string name = Marshal.PtrToStringAnsi(pname);
|
||||||
byte* p = (byte*)area;
|
|
||||||
|
|
||||||
mm.Add(new MemoryDomain(name, size, MemoryDomain.Endian.Unknown,
|
mm.Add(MemoryDomain.FromIntPtr(name, size, MemoryDomain.Endian.Unknown, area));
|
||||||
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;
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MemoryDomains = new MemoryDomainList(mm, 0);
|
MemoryDomains = new MemoryDomainList(mm, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -315,23 +315,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
continue;
|
continue;
|
||||||
string sname = Marshal.PtrToStringAnsi(name);
|
string sname = Marshal.PtrToStringAnsi(name);
|
||||||
byte *p = (byte*)data;
|
mmd.Add(MemoryDomain.FromIntPtr(sname, size, MemoryDomain.Endian.Little, 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;
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
MemoryDomains = new MemoryDomainList(mmd, 0);
|
MemoryDomains = new MemoryDomainList(mmd, 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue