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);
        }
Beispiel #2
0
        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);
        }