private void SetupMemoryDomains()
        {
            var domains = new List<MemoryDomain>(3);
            var MainMemoryDomain = new MemoryDomainByteArray("Main RAM", MemoryDomain.Endian.Little, Ram, true, 1);
            var VRamDomain = new MemoryDomainByteArray("Video RAM", MemoryDomain.Endian.Little, VDP.VRAM, true, 1);
            var SystemBusDomain = new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little,
                (addr) =>
                {
                    if (addr < 0 || addr >= 65536)
                    {
                        throw new ArgumentOutOfRangeException();
                    }

                    return Cpu.ReadMemory((ushort)addr);
                },
                (addr, value) =>
                {
                    if (addr < 0 || addr >= 65536)
                    {
                        throw new ArgumentOutOfRangeException();
                    }

                    Cpu.WriteMemory((ushort)addr, value);
                }, 1);

            domains.Add(MainMemoryDomain);
            domains.Add(VRamDomain);
            domains.Add(SystemBusDomain);
            memoryDomains = new MemoryDomainList(domains);
            (ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(memoryDomains);
        }
Ejemplo n.º 2
0
        private void SetupMemoryDomains()
        {
            var domains = new List<MemoryDomain>();
            var RAM = new MemoryDomainByteArray("RAM", MemoryDomain.Endian.Little, ram, true, 1);
            var SystemBus = new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little,
                addr => PeekMemory((ushort)addr), (addr, value) => ApplySystemBusPoke((int)addr, value), 1);
            var PPUBus = new MemoryDomainDelegate("PPU Bus", 0x4000, MemoryDomain.Endian.Little,
                addr => ppu.ppubus_peek((int)addr), (addr, value) => ppu.ppubus_write((int)addr, value), 1);
            var CIRAMdomain = new MemoryDomainByteArray("CIRAM (nametables)", MemoryDomain.Endian.Little, CIRAM, true, 1);
            var OAMdoman = new MemoryDomainByteArray("OAM", MemoryDomain.Endian.Unknown, ppu.OAM, true, 1);

            domains.Add(RAM);
            domains.Add(SystemBus);
            domains.Add(PPUBus);
            domains.Add(CIRAMdomain);
            domains.Add(OAMdoman);

            if (!(Board is FDS) && Board.SaveRam != null)
            {
                var BatteryRam = new MemoryDomainByteArray("Battery RAM", MemoryDomain.Endian.Little, Board.SaveRam, true, 1);
                domains.Add(BatteryRam);
            }

            if (Board.ROM != null)
            {
                var PRGROM = new MemoryDomainByteArray("PRG ROM", MemoryDomain.Endian.Little, Board.ROM, true, 1);
                domains.Add(PRGROM);
            }

            if (Board.VROM != null)
            {
                var CHRROM = new MemoryDomainByteArray("CHR VROM", MemoryDomain.Endian.Little, Board.VROM, true, 1);
                domains.Add(CHRROM);
            }

            if (Board.VRAM != null)
            {
                var VRAM = new MemoryDomainByteArray("VRAM", MemoryDomain.Endian.Little, Board.VRAM, true, 1);
                domains.Add(VRAM);
            }

            if (Board.WRAM != null)
            {
                var WRAM = new MemoryDomainByteArray("WRAM", MemoryDomain.Endian.Little, Board.WRAM, true, 1);
                domains.Add(WRAM);
            }

            // if there were more boards with special ram sets, we'd want to do something more general
            if (Board is FDS)
            {
                domains.Add((Board as FDS).GetDiskPeeker());
            }
            else if (Board is ExROM)
            {
                domains.Add((Board as ExROM).GetExRAM());
            }

            _memoryDomains = new MemoryDomainList(domains);
            (ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(_memoryDomains);
        }
Ejemplo n.º 3
0
        void SetupMemoryDomains()
        {
            var domains = new List<MemoryDomain>(3);
            var MainMemoryDomain = new MemoryDomainByteArray("Main RAM", MemoryDomain.Endian.Little, SystemRam, true, 1);
            var VRamDomain = new MemoryDomainByteArray("Video RAM", MemoryDomain.Endian.Little, Vdp.VRAM, true, 1);

            var ROMDomain = new MemoryDomainByteArray("ROM", MemoryDomain.Endian.Little, RomData, true, 1);

            var SystemBusDomain = new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little,
                (addr) =>
                {
                    if (addr < 0 || addr >= 65536)
                    {
                        throw new ArgumentOutOfRangeException();
                    }

                    return Cpu.ReadMemory((ushort)addr);
                },
                (addr, value) =>
                {
                    if (addr < 0 || addr >= 65536)
                    {
                        throw new ArgumentOutOfRangeException();
                    }

                    Cpu.WriteMemory((ushort)addr, value);
                }, 1);

            domains.Add(MainMemoryDomain);
            domains.Add(VRamDomain);
            domains.Add(ROMDomain);
            domains.Add(SystemBusDomain);

            if (SaveRAM != null)
            {
                var SaveRamDomain = new MemoryDomainDelegate("Save RAM", SaveRAM.Length, MemoryDomain.Endian.Little,
                    addr => SaveRAM[addr],
                    (addr, value) => { SaveRAM[addr] = value; SaveRamModified = true; }, 1);
                domains.Add(SaveRamDomain);
            }

            if (ExtRam != null)
            {
                var ExtRamDomain = new MemoryDomainByteArray("Cart (Volatile) RAM", MemoryDomain.Endian.Little, ExtRam, true, 1);
                domains.Add(ExtRamDomain);
            }

            MemoryDomains = new MemoryDomainList(domains);
            (ServiceProvider as BasicServiceProvider).Register<IMemoryDomains>(MemoryDomains);
        }