Exemplo n.º 1
0
        public byte BaseReadMemory(ushort addr)
        {
            addr = (ushort)(addr & 0x1FFF);
            if ((addr & 0x1080) == 0)
            {
                return(_tia.ReadMemory(addr, false));
            }

            if ((addr & 0x1080) == 0x0080)
            {
                return(M6532.ReadMemory(addr, false));
            }

            return(Rom[addr & 0x0FFF]);
        }
Exemplo n.º 2
0
        internal byte BaseReadMemory(ushort addr)
        {
            addr = (ushort)(addr & 0x1FFF);
            if ((addr & 0x1080) == 0)
            {
                return(_tia.ReadMemory(addr, false));
            }

            if ((addr & 0x1080) == 0x0080)
            {
                _tia.BusState = _m6532.ReadMemory(addr, false);
                return(_m6532.ReadMemory(addr, false));
            }

            _tia.BusState = Rom[addr & 0x0FFF];
            return(Rom[addr & 0x0FFF]);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 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;
        }
Exemplo n.º 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);
        }