diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs index b64305e6ee..aa0fc83340 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs @@ -447,16 +447,28 @@ namespace BizHawk.Emulation.Consoles.Nintendo private void SetupMemoryDomains() { - var domains = new List(6); - var MainMemoryDomain = new MemoryDomain("Main RAM", ram.Length, Endian.Little, - addr => ram[addr & 0x07FF], (addr, value) => ram[addr & 0x07FF] = value); - //System bus - //PPU 2000-3FFF - //APU 4000-5FFF - //WRAM 6000-7FFF - //PRG RAM 8000-FFFF + var domains = new List(); + var WRAM = new MemoryDomain("WRAM", ram.Length, Endian.Little, + addr => ram[addr & ram.Length], (addr, value) => ram[addr &ram.Length] = value); + var MainMemory = new MemoryDomain("System Bus", 0x10000, Endian.Little, + addr => ReadMemory((ushort)addr), (addr, value) => WriteMemory((ushort)addr, value)); + var PPUBus = new MemoryDomain("PPU Bus", 0x4000, Endian.Little, + addr => ppu.ppubus_read(addr), (addr, value) => ppu.ppubus_write(addr, value)); + //TODO: board PRG, PRAM & SaveRAM, or whatever useful things from the board - domains.Add(MainMemoryDomain); + + + domains.Add(WRAM); + domains.Add(MainMemory); + domains.Add(PPUBus); + + if (board.SaveRam != null) + { + var BatteryRam = new MemoryDomain("Battery RAM", board.SaveRam.Length, Endian.Little, + addr => board.SaveRam[addr & board.SaveRam.Length], (addr, value) => board.SaveRam[addr & SaveRam.Length] = value); + domains.Add(BatteryRam); + } + memoryDomains = domains.AsReadOnly(); } diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.cs index d53a63f21e..f094d62086 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.cs @@ -14,13 +14,13 @@ namespace BizHawk.Emulation.Consoles.Nintendo public partial class PPU { //when the ppu issues a write it goes through here and into the game board - void ppubus_write(int addr, byte value) + public void ppubus_write(int addr, byte value) { nes.board.WritePPU(addr, value); } //when the ppu issues a read it goes through here and into the game board - byte ppubus_read(int addr) + public byte ppubus_read(int addr) { return nes.board.ReadPPU(addr); }