Gameboy - refactor memory domains to use the correct objects instead of the cpu buss

This commit is contained in:
andres.delikat 2011-12-27 02:59:37 +00:00
parent 422e9c6daa
commit 9b2a9a390f
1 changed files with 19 additions and 15 deletions

View File

@ -338,28 +338,32 @@ namespace BizHawk.Emulation.Consoles.Gameboy
(addr, value) => Cpu.WriteMemory((ushort)addr, value)); (addr, value) => Cpu.WriteMemory((ushort)addr, value));
var WRAM0Domain = new MemoryDomain("WRAM Bank 0", 0x2000, Endian.Little, var WRAM0Domain = new MemoryDomain("WRAM Bank 0", 0x2000, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x1FFF) + 0xC000)), addr => WRam[addr & 0x1FFF],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x1FFF) + 0xC000), value)); (addr, value) => WRam[addr & 0x1FFF] = value);
var WRAM1Domain = new MemoryDomain("WRAM Bank 1", 0x2000, Endian.Little, var WRAM1Domain = new MemoryDomain("WRAM Bank 1", 0x2000, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x1FFF) + 0xD000)), addr => WRam[(addr & 0x1FFF) + 0x2000],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x1FFF) + 0xD000), value)); (addr, value) => WRam[addr & 0x1FFF] = value);
var WRAMADomain = new MemoryDomain("WRAM (All)", 0x4000, Endian.Little, var WRAMADomain = new MemoryDomain("WRAM Bank (All)", 0x8000, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x3FFF) + 0xC000)), addr => WRam[addr & 0x7FFF],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x3FFF) + 0xC000), value)); (addr, value) => WRam[addr & 0x7FFF] = value); //adelikat: Do we want to check for GBC vs GB and limit this domain accordingly?
var OAMDomain = new MemoryDomain("SRAM", 0x00A0, Endian.Little,
addr => OAM[addr & 0x9F],
(addr, value) => OAM[addr & 0x9F] = value);
var OAMDomain = new MemoryDomain("OAM", 0x00A0, Endian.Little, var OAMDomain = new MemoryDomain("OAM", 0x00A0, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x009F) + 0xFE00)), addr => OAM[addr & 0x9F],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x009F) + 0xFE00), value)); (addr, value) => OAM[addr & 0x9F] = value);
var HRAMDomain = new MemoryDomain("HRAM", 0x007F, Endian.Little, var HRAMDomain = new MemoryDomain("HRAM", 0x0080, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x007E) + 0xFF80)), addr => HRam[addr & 0x007F],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x007E) + 0xFF80), value)); (addr, value) => HRam[addr & 0x0080] = value);
var VRAMDomain = new MemoryDomain("VRAM", 0x2000, Endian.Little, var VRAMDomain = new MemoryDomain("VRAM", 0x2000, Endian.Little,
addr => Cpu.ReadMemory((ushort)((addr & 0x1FFF) + 0x8000)), addr => VRam[addr & 0x1FFF],
(addr, value) => Cpu.WriteMemory((ushort)((addr & 0x1FFF) + 0x8000), value)); (addr, value) => VRam[addr & 0x1FFF] = value);
domains.Add(WRAM0Domain); domains.Add(WRAM0Domain);
domains.Add(WRAM1Domain); domains.Add(WRAM1Domain);
@ -700,7 +704,7 @@ namespace BizHawk.Emulation.Consoles.Gameboy
{ {
lagged = true; lagged = true;
Controller.UpdateControls(Frame++); Controller.UpdateControls(Frame++);
//Cpu.ExecuteCycles(4096); Cpu.ExecuteCycles(4096);
if (lagged) if (lagged)
{ {