private void InitMemoryDomains() { var ret = new List <MemoryDomain>(); var nmds = LibYabause.libyabause_getmemoryareas_ex(); foreach (var nmd in nmds) { ret.Add(new MemoryDomainIntPtr(nmd.name, MemoryDomain.Endian.Little, nmd.data, nmd.length, true, 4)); } // main memory is in position 2 _memoryDomains = new MemoryDomainList(ret); _memoryDomains.MainMemory = _memoryDomains["Work Ram Low"]; (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(_memoryDomains); }
void InitMemoryDomains() { var ret = new List <MemoryDomain>(); var nmds = LibYabause.libyabause_getmemoryareas_ex(); foreach (var nmd in nmds) { int l = nmd.length; IntPtr d = nmd.data; ret.Add(new MemoryDomain( nmd.name, nmd.length, MemoryDomain.Endian.Little, delegate(int addr) { if (addr < 0 || addr >= l) { throw new ArgumentOutOfRangeException(); } unsafe { byte *p = (byte *)d; return(p[addr]); } }, delegate(int addr, byte val) { if (addr < 0 || addr >= l) { throw new ArgumentOutOfRangeException(); } unsafe { byte *p = (byte *)d; p[addr] = val; } } )); } // fulfill the prophecy of MainMemory always being MemoryDomains[0] var tmp = ret[2]; ret[2] = ret[0]; ret[0] = tmp; MemoryDomains = new MemoryDomainList(ret); }