コード例 #1
0
        private void SetupMemoryDomains()
        {
            var domains = new List <MemoryDomain>
            {
                new MemoryDomain(
                    "Main RAM",
                    128,
                    MemoryDomain.Endian.Little,
                    addr => Ram[addr],
                    (addr, value) => Ram[addr] = value),
                new MemoryDomain(
                    "TIA",
                    16,
                    MemoryDomain.Endian.Little,
                    addr => _tia.ReadMemory((ushort)addr, true),
                    (addr, value) => this._tia.WriteMemory((ushort)addr, value)),
                new MemoryDomain(
                    "PIA",
                    1024,
                    MemoryDomain.Endian.Little,
                    addr => M6532.ReadMemory((ushort)addr, true),
                    (addr, value) => M6532.WriteMemory((ushort)addr, value)),
                new MemoryDomain(
                    "System Bus",
                    65536,
                    MemoryDomain.Endian.Little,
                    addr => _mapper.PeekMemory((ushort)addr),
                    (addr, value) => _mapper.PokeMemory((ushort)addr, value))
            };

            if (_mapper is mDPC)             // TODO: also mDPCPlus
            {
                domains.Add(new MemoryDomain(
                                "DPC",
                                2048,
                                MemoryDomain.Endian.Little,
                                addr => (_mapper as mDPC).DspData[addr],
                                (addr, value) => (_mapper as mDPC).DspData[addr] = value));
            }

            if (_mapper.HasCartRam)
            {
                domains.Add(new MemoryDomain(
                                "Cart Ram",
                                _mapper.CartRam.Len,
                                MemoryDomain.Endian.Little,
                                addr => _mapper.CartRam[(int)addr],
                                (addr, value) => _mapper.CartRam[(int)addr] = value));
            }

            MemoryDomains = new MemoryDomainList(domains);
            (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(MemoryDomains);
        }
コード例 #2
0
ファイル: Atari2600.Core.cs プロジェクト: stuff2600/RAEmus
        public void BaseWriteMemory(ushort addr, byte value)
        {
            if (addr != LastAddress)
            {
                DistinctAccessCount++;
                LastAddress = addr;
            }

            addr = (ushort)(addr & 0x1FFF);
            if ((addr & 0x1080) == 0)
            {
                _tia.WriteMemory(addr, value);
            }
            else if ((addr & 0x1080) == 0x0080)
            {
                M6532.WriteMemory(addr, value);
            }
            else
            {
                Console.WriteLine("ROM write(?):  " + addr.ToString("x"));
            }
        }
コード例 #3
0
        internal void BaseWriteMemory(ushort addr, byte value)
        {
            _tia.BusState = value;
            if (addr != _lastAddress)
            {
                DistinctAccessCount++;
                _lastAddress = addr;
            }

            addr = (ushort)(addr & 0x1FFF);
            if ((addr & 0x1080) == 0)
            {
                _tia.WriteMemory(addr, value, false);
            }
            else if ((addr & 0x1080) == 0x0080)
            {
                _m6532.WriteMemory(addr, value);
            }
            else
            {
                Console.WriteLine("ROM write(?):  " + addr.ToString("x"));
            }
        }
コード例 #4
0
        private void SetupMemoryDomains()
        {
            var domains = new List <MemoryDomain>
            {
                new MemoryDomainDelegate(
                    "TIA",
                    16,
                    MemoryDomain.Endian.Little,
                    addr => _tia.ReadMemory((ushort)addr, true),
                    (addr, value) => this._tia.WriteMemory((ushort)addr, value, true), 1),
                new MemoryDomainDelegate(
                    "PIA",
                    1024,
                    MemoryDomain.Endian.Little,
                    addr => M6532.ReadMemory((ushort)addr, true),
                    (addr, value) => M6532.WriteMemory((ushort)addr, value), 1),
                new MemoryDomainDelegate(
                    "System Bus",
                    65536,
                    MemoryDomain.Endian.Little,
                    addr => _mapper.PeekMemory((ushort)addr),
                    (addr, value) => _mapper.PokeMemory((ushort)addr, value), 1)
            };

            if (_mapper.HasCartRam)
            {
                domains.Add(new MemoryDomainDelegate(
                                "Cart Ram",
                                _mapper.CartRam.Len,
                                MemoryDomain.Endian.Little,
                                addr => _mapper.CartRam[(int)addr],
                                (addr, value) => _mapper.CartRam[(int)addr] = value, 1));
            }

            SyncAllByteArrayDomains();

            MemoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList());
            (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(MemoryDomains);

            _memoryDomainsInit = true;
        }
コード例 #5
0
        public Atari2600(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings)
        {
            Ram          = new byte[128];
            CoreComm     = comm;
            Settings     = (A2600Settings)settings ?? new A2600Settings();
            SyncSettings = (A2600SyncSettings)syncSettings ?? new A2600SyncSettings();

            var domains = new List <MemoryDomain>
            {
                new MemoryDomain(
                    "Main RAM",
                    128,
                    MemoryDomain.Endian.Little,
                    addr => Ram[addr],
                    (addr, value) => Ram[addr] = value),
                new MemoryDomain(
                    "TIA",
                    16,
                    MemoryDomain.Endian.Little,
                    addr => _tia.ReadMemory((ushort)addr, true),
                    (addr, value) => this._tia.WriteMemory((ushort)addr, value)),
                new MemoryDomain(
                    "PIA",
                    1024,
                    MemoryDomain.Endian.Little,
                    addr => M6532.ReadMemory((ushort)addr, true),
                    (addr, value) => M6532.WriteMemory((ushort)addr, value)),
                new MemoryDomain(
                    "System Bus",
                    8192,
                    MemoryDomain.Endian.Little,
                    addr => _mapper.PeekMemory((ushort)addr),
                    (addr, value) => _mapper.PokeMemory((ushort)addr, value))
            };

            CoreComm.CpuTraceAvailable = true;
            Rom   = rom;
            _game = game;

            if (!game.GetOptionsDict().ContainsKey("m"))
            {
                game.AddOption("m", DetectMapper(rom));
            }

            Console.WriteLine("Game uses mapper " + game.GetOptionsDict()["m"]);
            RebootCore();

            if (_mapper is mDPC)             // TODO: also mDPCPlus
            {
                domains.Add(new MemoryDomain(
                                "DPC",
                                2048,
                                MemoryDomain.Endian.Little,
                                addr => (_mapper as mDPC).DspData[addr],
                                (addr, value) => (_mapper as mDPC).DspData[addr] = value));
            }

            if (_mapper.HasCartRam)
            {
                domains.Add(new MemoryDomain(
                                "Cart Ram",
                                _mapper.CartRam.Len,
                                MemoryDomain.Endian.Little,
                                addr => _mapper.CartRam[addr],
                                (addr, value) => _mapper.CartRam[addr] = value));
            }

            MemoryDomains = new MemoryDomainList(domains);
        }