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); }
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")); } }
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")); } }
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; }
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); }