diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs index 6bbbc5fcf0f..cc2f9494d8e 100644 --- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs +++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs @@ -1506,7 +1506,15 @@ private void MemoryDomainsMenuItem_DropDownOpened(object sender, EventArgs e) Checked = _domain.Name == _romDomain.Name, }; - MemoryDomainsMenuItem.DropDownItems.Add(new ToolStripSeparator()); + var n = MemoryDomains.Count - 1; + if (MemoryDomains[n] is RegistersMemoryDomain) + { + MemoryDomainsMenuItem.DropDownItems.Insert(n, new ToolStripSeparator()); + } + else + { + MemoryDomainsMenuItem.DropDownItems.Add(new ToolStripSeparator()); + } MemoryDomainsMenuItem.DropDownItems.Add(romMenuItem); romMenuItem.Click += (o, ev) => SetMemoryDomain(_romDomain.Name); diff --git a/src/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs b/src/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs index 88e6c05b9ac..f6607acb670 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs @@ -193,7 +193,7 @@ private void RamWatchNewWatch_Load(object sender, EventArgs e) { default: case Mode.New: - SelectedWidth = MemoryDomains.First().WordSize; + SelectedWidth = MemoryDomains[0].WordSize; break; case Mode.Duplicate: case Mode.Edit: diff --git a/src/BizHawk.Emulation.Common/Base Implementations/MemoryDomainList.cs b/src/BizHawk.Emulation.Common/Base Implementations/MemoryDomainList.cs index fb046ddc652..effa309b24a 100644 --- a/src/BizHawk.Emulation.Common/Base Implementations/MemoryDomainList.cs +++ b/src/BizHawk.Emulation.Common/Base Implementations/MemoryDomainList.cs @@ -20,8 +20,10 @@ public bool Has(string name) return this.Any(md => md.Name == name); } - public MemoryDomainList(IList domains) - : base(domains) + public MemoryDomainList(IList domains, IDebuggable/*?*/ debuggableCore = null) + : base(debuggableCore is null + ? domains + : domains.Append(new RegistersMemoryDomain(debuggableCore)).ToArray()) { } diff --git a/src/BizHawk.Emulation.Common/Base Implementations/RegistersMemoryDomain.cs b/src/BizHawk.Emulation.Common/Base Implementations/RegistersMemoryDomain.cs new file mode 100644 index 00000000000..ab0d9d014f8 --- /dev/null +++ b/src/BizHawk.Emulation.Common/Base Implementations/RegistersMemoryDomain.cs @@ -0,0 +1,115 @@ +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; + +using BizHawk.Common.StringExtensions; + +using LookupEntry = (string RegName, byte RegWidthBytes, byte ByteOffset); + +namespace BizHawk.Emulation.Common +{ + public sealed class RegistersMemoryDomain : MemoryDomain + { + private const string ERR_FMT_STR_INVALID_ADDR = "invalid address, must be in 0..<{0}"; + + private static ImmutableArray GenLookup(IDictionary regs) + { + List entries = new(); + foreach (var (name, val) in regs) + { + var widthBytes = unchecked((byte) (val.BitSize / 8)); + if (val.BitSize % 8 is not 0) widthBytes++; + byte i = widthBytes; + while (i > 0) entries.Add((RegName: name, RegWidthBytes: widthBytes, ByteOffset: --i)); + } + while (entries.Count % sizeof(uint) is not 0) entries.Add((string.Empty, 0, 0)); // padding for Hex Editor + return entries.ToImmutableArray(); + } + + private readonly IDebuggable _debuggableCore; + + private readonly ImmutableArray _lookup; + + public RegistersMemoryDomain(IDebuggable debuggableCore) + { + _debuggableCore = debuggableCore; + var regs = _debuggableCore.GetCpuFlagsAndRegisters(); + _lookup = GenLookup(regs); + EndianType = Endian.Big; + var cpuName = regs.Keys.CommonPrefix(); + Name = cpuName.Length is 0 ? "CPU registers" : $"{new string(cpuName)/*trailing space*/}registers"; + Size = _lookup.Sum(static entry => entry.RegWidthBytes); + WordSize = sizeof(byte); + Writable = !debuggableCore.GetType().GetMethod("SetCpuRegister").CustomAttributes + .Any(ad => ad.AttributeType == typeof(FeatureNotImplementedAttribute)); + } + + public override byte PeekByte(long addr) + { + if (addr < 0 || _lookup.Length <= addr) throw new ArgumentOutOfRangeException(paramName: nameof(addr), addr, message: string.Format(ERR_FMT_STR_INVALID_ADDR, _lookup.Length)); + var (name, width, offset) = _lookup[unchecked((int) addr)]; + if (width is 0) return default; // padding for Hex Editor + var toReturn = unchecked((uint) _debuggableCore.GetCpuFlagsAndRegisters()[name].Value); + toReturn >>= 8 * offset; + return unchecked((byte) toReturn); + } + + public override void PokeByte(long addr, byte val) + { + if (addr < 0 || _lookup.Length <= addr) throw new ArgumentOutOfRangeException(paramName: nameof(addr), addr, message: string.Format(ERR_FMT_STR_INVALID_ADDR, _lookup.Length)); + var (name, width, offset) = _lookup[unchecked((int) addr)]; + if (width is 0) return; // padding for Hex Editor + switch (width) + { + case 8 or 7 or 6 or 5: + throw new NotSupportedException($"{nameof(IDebuggable)}.{nameof(IDebuggable.SetCpuRegister)} does not support poking registers wider than 32 bits"); + case 4 or 3: + { + var toWrite = unchecked((uint) _debuggableCore.GetCpuFlagsAndRegisters()[name].Value); + switch (offset) + { + case 3: + toWrite &= 0x00FF_FFFFU; + toWrite |= unchecked((ushort) (val << 24)); + break; + case 2: + toWrite &= 0xFF00_FFFFU; + toWrite |= unchecked((ushort) (val << 16)); + break; + case 1: + toWrite &= 0xFFFF_00FFU; + toWrite |= unchecked((ushort) (val << 8)); + break; + default: + toWrite &= 0xFFFF_FF00U; + toWrite |= val; + break; + } + _debuggableCore.SetCpuRegister(name, unchecked((int) toWrite)); + break; + } + case 2: + { + var toWrite = unchecked((ushort) _debuggableCore.GetCpuFlagsAndRegisters()[name].Value); + if (offset is 1) + { + toWrite &= 0x00FF; + toWrite |= unchecked((ushort) (val << 8)); + } + else + { + toWrite &= 0xFF00; + toWrite |= val; + } + _debuggableCore.SetCpuRegister(name, toWrite); + break; + } + case 1: + _debuggableCore.SetCpuRegister(name, val); + break; + default: + throw new InvalidOperationException(); + } + } + } +} diff --git a/src/BizHawk.Emulation.Common/Interfaces/Services/IMemoryDomains.cs b/src/BizHawk.Emulation.Common/Interfaces/Services/IMemoryDomains.cs index aa963949551..a69e7b17481 100644 --- a/src/BizHawk.Emulation.Common/Interfaces/Services/IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Common/Interfaces/Services/IMemoryDomains.cs @@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Common /// If this service is available the client will expose many RAM related tools such as the Hex Editor, RAM Search/Watch, and Cheats /// In addition, this is an essential service for effective LUA scripting, and many other tools /// - public interface IMemoryDomains : IEnumerable, IEmulatorService + public interface IMemoryDomains : IReadOnlyList, IEmulatorService { MemoryDomain? this[string name] { get; } diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs index 60dfbefcda4..43c57ab3955 100644 --- a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs @@ -40,7 +40,7 @@ private void InitMemoryDomains() LibEmu83.TI83_WriteMemory(Context, (ushort)addr, val); }, 1)); - MemoryDomains = new MemoryDomainList(_memoryDomains); + MemoryDomains = new MemoryDomainList(_memoryDomains, this); _serviceProvider.Register(MemoryDomains); } } diff --git a/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs index 2e3c5195a7a..fc515e41b1c 100644 --- a/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs @@ -31,7 +31,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs index abe55a6c9d3..fc4029010a3 100644 --- a/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs @@ -33,7 +33,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); (ServiceProvider as BasicServiceProvider).Register(memoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IMemoryDomains.cs index 7827d8afd8c..2a48a4a3698 100644 --- a/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IMemoryDomains.cs @@ -52,7 +52,7 @@ private void SetupMemoryDomains() domains.Add(systemBusDomain); - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs index e063931d7e4..c03b631bc94 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs @@ -47,7 +47,7 @@ private void SetupMemoryDomains() domains.AddRange(_board.CartPort.CreateMemoryDomains()); } - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); ((BasicServiceProvider)ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs index f37bb168667..c0a72ecfcf2 100644 --- a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs @@ -33,7 +33,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); (ServiceProvider as BasicServiceProvider).Register(memoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IMemoryDomains.cs index 9d796fdfa0c..cc92f9a104b 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IMemoryDomains.cs @@ -47,7 +47,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - MemoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + MemoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); ((BasicServiceProvider)ServiceProvider).Register(MemoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IMemoryDomains.cs index 42369d2cc8b..099ff9b99aa 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IMemoryDomains.cs @@ -62,7 +62,7 @@ public void SetupMemoryDomains() 1) }; - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IMemoryDomains.cs index a0ce5e9ae10..e29fd15dc33 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IMemoryDomains.cs @@ -30,7 +30,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); ((BasicServiceProvider)ServiceProvider).Register(_memoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs index f28aceabc23..fa0cb9821e8 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs @@ -41,7 +41,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()) { MainMemory = domains[0] }; + _memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this) { MainMemory = domains[0] }; ((BasicServiceProvider)ServiceProvider).Register(_memoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IMemoryDomains.cs index 3606d69e0a2..c8e9b27b72c 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IMemoryDomains.cs @@ -35,7 +35,7 @@ public void SetupMemoryDomains() 1), }; - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IMemoryDomains.cs index 23d1ff33c9b..99702b3a4f5 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IMemoryDomains.cs @@ -60,7 +60,7 @@ private void SetupMemoryDomains() ) }; - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); ((BasicServiceProvider) ServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IMemoryDomains.cs index af966bf76db..f3d2ad4ba6d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IMemoryDomains.cs @@ -54,7 +54,7 @@ public void SetupMemoryDomains() domains.Add(CartRam); } - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.IMemoryDomains.cs index 0e4804416c0..3381a01e0d1 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.IMemoryDomains.cs @@ -58,7 +58,7 @@ private void SetMemoryDomains() mm.Add(Api.exe.GetPagesDomain()); - _memoryDomains = new(mm); + _memoryDomains = new(mm, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); _memoryDomains.MainMemory = _memoryDomains[_isSGB ? "SGB WRAM" : "WRAM"]; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IMemoryDomains.cs index 15aa186163f..f375039d098 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IMemoryDomains.cs @@ -52,7 +52,7 @@ private void CreateMemoryDomains(int romsize) }, 4) }; - _memoryDomains = new(mm); + _memoryDomains = new(mm, this); WireMemoryDomainPointers(); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IMemoryDomains.cs index ec26712605d..45422814ccc 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IMemoryDomains.cs @@ -67,7 +67,7 @@ public void SetupMemoryDomains() domains.Add(CartRam); } - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs index 19dfb15e990..b6d526835c0 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs @@ -96,7 +96,7 @@ public void SetupMemoryDomains() domains.Add(cartRamR); } - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.IMemoryDomains.cs index 7441f030971..5adb6701e96 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.IMemoryDomains.cs @@ -137,7 +137,7 @@ public void SetupMemoryDomains() domains.Add(cartRamR); } - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.IMemoryDomains.cs index b0eb4dda3cd..7145dcbfa12 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.IMemoryDomains.cs @@ -178,7 +178,7 @@ public void SetupMemoryDomains() domains.Add(cartRamD); } - MemoryDomains = new MemoryDomainList(domains); + MemoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IMemoryDomains.cs index 05e8d97005a..25578ee5945 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IMemoryDomains.cs @@ -49,7 +49,7 @@ private void InitMemoryDomains() CreateMemoryDomain(LibGambatte.MemoryAreas.cartram, "CartRAM"); - MemoryDomains = new MemoryDomainList(_memoryDomains); + MemoryDomains = new MemoryDomainList(_memoryDomains, this); _serviceProvider.Register(MemoryDomains); } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs index 23981348be2..b77c964c630 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs @@ -107,7 +107,7 @@ private void InitMemoryDomains() pokeByte, 4 )); - MemoryDomains = new MemoryDomainList(_memoryDomains); + MemoryDomains = new MemoryDomainList(_memoryDomains, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs index b606640f4a4..bc805f4d371 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs @@ -72,7 +72,7 @@ private void SetupMemoryDomains() if (!_memoryDomainsSetup) { - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); (ServiceProvider as BasicServiceProvider).Register(_memoryDomains); _memoryDomainsSetup = true; } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.IMemoryDomains.cs index e99d5f2867e..2379a38b7ef 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.IMemoryDomains.cs @@ -42,7 +42,7 @@ private void InitMemoryDomains() QN.qn_poke_prgbus(Context, (int)addr, val); }, 1)); - _memoryDomains = new MemoryDomainList(mm); + _memoryDomains = new MemoryDomainList(mm, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IMemoryDomains.cs index 417600c7f97..fc84bcbf95c 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IMemoryDomains.cs @@ -76,7 +76,7 @@ private void SetupMemoryDomains(byte[] romData, byte[] sgbRomData) _memoryDomainList.Add(Api.GetPagesDomain()); - _memoryDomains = new MemoryDomainList(_memoryDomainList); + _memoryDomains = new MemoryDomainList(_memoryDomainList, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs index 144adca6233..69a3315dc85 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs @@ -54,7 +54,7 @@ private void InitMemoryDomains() LibSameboy.sameboy_cpuwrite(SameboyState, (ushort)addr, val); }, 1)); - MemoryDomains = new MemoryDomainList(_memoryDomains); + MemoryDomains = new MemoryDomainList(_memoryDomains, this); ((MemoryDomainList)MemoryDomains).MainMemory = MemoryDomains["WRAM"]; _serviceProvider.Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IMemoryDomains.cs index 3b9ae269ffb..4855ce36a6e 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IMemoryDomains.cs @@ -48,7 +48,7 @@ private void SetupMemoryDomains() domains.AddRange(_byteArrayDomains.Values); domains.AddRange(_ushortArrayDomains.Values); - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); _memoryDomains.SystemBus = cpuBusDomain; _memoryDomains.MainMemory = _byteArrayDomains["Main Memory"]; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IMemoryDomains.cs index a13885a9308..a9726ad438d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IMemoryDomains.cs @@ -81,7 +81,7 @@ public void SetupMemoryDomains() domains.Add(cartRamR); } - _memoryDomains = new MemoryDomainList(domains); + _memoryDomains = new MemoryDomainList(domains, this); ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IMemoryDomains.cs index a3d9ec5f256..674b9be90e5 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IMemoryDomains.cs @@ -38,7 +38,7 @@ private void SetupMemoryDomains() SyncAllByteArrayDomains(); - MemoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + MemoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList(), this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); _memoryDomainsInit = true; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IMemoryDomains.cs index 16ad217c1df..447d7cbeafb 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IMemoryDomains.cs @@ -197,7 +197,7 @@ private unsafe void SetMemoryDomains() } mm.Add(_elf.GetPagesDomain()); - _memoryDomains = new MemoryDomainList(mm) { SystemBus = systemBus }; + _memoryDomains = new MemoryDomainList(mm, this) { SystemBus = systemBus }; ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs index 77387335719..f544ddb3b79 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs @@ -152,7 +152,7 @@ private void SetMemoryDomains() (a, v) => { OctoshockDll.shock_PokeMemory(psx, (uint)a, v); }, 4)); - MemoryDomains = new MemoryDomainList(mmd); + MemoryDomains = new MemoryDomainList(mmd, this); (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IMemoryDomains.cs index c888bd3bccb..ab3e1614a40 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IMemoryDomains.cs @@ -26,7 +26,7 @@ private void InitIMemoryDomains() mmd.Add(new MemoryDomainIntPtr(sName, MemoryDomain.Endian.Little, data, size, true, 1)); } - ((BasicServiceProvider) ServiceProvider).Register(new MemoryDomainList(mmd)); + ((BasicServiceProvider) ServiceProvider).Register(new MemoryDomainList(mmd, this)); } } }