From 5ba74c631c4c4b1ec5f011968037e63a232f5a84 Mon Sep 17 00:00:00 2001 From: adelikat Date: Mon, 1 Sep 2014 18:43:41 +0000 Subject: [PATCH] Remove MemoryDomains from IEmulator into a new Interface, IMemoryDomains, Add this interface to existing cores, except null emulator (and removed memory domain related code from it). Refactored EmuHawk for ram tools to use an instance of IMemoryDomains rather than IEmulator, don't expose ram tools unless the core implements IMemoryDomains. Still a few misc todos, and probably some cleanup --- .../lua/EmuLuaLibrary.MainMemory.cs | 15 +++++++- .../lua/EmuLuaLibrary.Memory.cs | 35 +++++++++++++++---- .../lua/EmuLuaLibrary.NES.cs | 4 +-- BizHawk.Client.Common/lua/LuaMemoryBase.cs | 18 ++++++++++ BizHawk.Client.Common/tools/CheatList.cs | 2 +- .../tools/RamSearchEngine.cs | 31 ++++++++-------- BizHawk.Client.Common/tools/WatchList.cs | 12 ++++--- BizHawk.Client.EmuHawk/MainForm.Events.cs | 10 ++++-- BizHawk.Client.EmuHawk/MainForm.Hotkey.cs | 16 +++++++-- .../tools/Cheats/CheatEdit.cs | 16 +++++---- BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs | 14 +++++++- .../tools/GB/GBGameGenie.cs | 3 +- .../tools/Genesis/GenGameGenie.cs | 3 +- .../tools/HexEditor/HexEditor.cs | 25 ++++++++----- .../tools/NES/NESGameGenie.cs | 3 +- BizHawk.Client.EmuHawk/tools/PCE/PCECDL.cs | 6 ++-- .../tools/SNES/SNESGameGenie.cs | 5 +-- .../tools/TAStudio/TAStudio.ListView.cs | 5 --- BizHawk.Client.EmuHawk/tools/ToolBox.cs | 12 ++++++- BizHawk.Client.EmuHawk/tools/ToolHelpers.cs | 23 +++++++----- .../tools/Watch/RamSearch.cs | 33 ++++++++++------- .../tools/Watch/RamWatch.cs | 18 ++++++++-- .../tools/Watch/WatchEditor.cs | 15 ++++---- .../BizHawk.Emulation.Common.csproj | 1 + BizHawk.Emulation.Common/Extensions.cs | 5 +++ .../Base Implementations/NullEmulator.cs | 9 +---- .../Interfaces/IEmulator.cs | 10 ------ .../Interfaces/IMemoryDomains.cs | 15 ++++++++ BizHawk.Emulation.Cores/Calculator/TI83.cs | 2 +- .../Computers/Commodore64/C64.cs | 2 +- .../Consoles/Atari/2600/Atari2600.cs | 2 +- .../Consoles/Atari/7800/Atari7800.cs | 2 +- .../Consoles/Coleco/ColecoVision.cs | 2 +- .../Consoles/Intellivision/Intellivision.cs | 2 +- .../Consoles/Nintendo/GBA/Meteor.cs | 2 +- .../Consoles/Nintendo/GBA/VBANext.cs | 2 +- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 2 +- .../Consoles/Nintendo/N64/N64.cs | 2 +- .../Consoles/Nintendo/NES/NES.cs | 2 +- .../Consoles/Nintendo/QuickNES/QuickNES.cs | 2 +- .../Consoles/Nintendo/SNES/LibsnesCore.cs | 2 +- .../Consoles/Nintendo/SNES9X/Snes9x.cs | 2 +- .../Consoles/PC Engine/PCEngine.cs | 2 +- .../Consoles/Sega/Genesis/Genesis.cs | 2 +- .../Consoles/Sega/SMS/SMS.cs | 2 +- .../Consoles/Sega/Saturn/Yabause.cs | 2 +- .../Consoles/Sega/gpgx/GPGX.cs | 2 +- .../Consoles/Sony/PSP/PSP.cs | 2 +- .../Consoles/Sony/PSX/Octoshock.cs | 2 +- .../Consoles/WonderSwan/WonderSwan.cs | 2 +- 50 files changed, 272 insertions(+), 136 deletions(-) create mode 100644 BizHawk.Emulation.Common/Interfaces/IMemoryDomains.cs diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.MainMemory.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.MainMemory.cs index fa71790e58..9817ee615d 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.MainMemory.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.MainMemory.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using LuaInterface; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.Common { @@ -19,7 +20,19 @@ namespace BizHawk.Client.Common protected override MemoryDomain Domain { - get { return Global.Emulator.MemoryDomains.MainMemory; } + get + { + if (Global.Emulator.HasMemoryDomains()) + { + return (Global.Emulator as IMemoryDomains).MemoryDomains.MainMemory; + } + else + { + var error = string.Format("Error: {0} does not implement memory domains", Global.Emulator.Attributes().CoreName); + Log(error); + throw new NotImplementedException(error); + } + } } #region Unique Library Methods diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs index 1c9e001c0a..8d03578b1f 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using LuaInterface; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.Common { @@ -14,20 +15,40 @@ namespace BizHawk.Client.Common public MemoryLuaLibrary(Lua lua) : base(lua) { - _currentMemoryDomain = Global.Emulator.MemoryDomains.IndexOf(Global.Emulator.MemoryDomains.MainMemory); + if (Global.Emulator.HasMemoryDomains()) + { + var domains = (Global.Emulator as IMemoryDomains).MemoryDomains; + _currentMemoryDomain = domains.IndexOf(domains.MainMemory); + } } public MemoryLuaLibrary(Lua lua, Action logOutputCallback) : base(lua, logOutputCallback) { - _currentMemoryDomain = Global.Emulator.MemoryDomains.IndexOf(Global.Emulator.MemoryDomains.MainMemory); + if (Global.Emulator.HasMemoryDomains()) + { + var domains = (Global.Emulator as IMemoryDomains).MemoryDomains; + _currentMemoryDomain = domains.IndexOf(domains.MainMemory); + } } public override string Name { get { return "memory"; } } protected override MemoryDomain Domain { - get { return Global.Emulator.MemoryDomains[_currentMemoryDomain]; } + get + { + if (Global.Emulator.HasMemoryDomains()) // IMemoryDomains TODO: don't register memory libraries if core is not IMemoryDomains + { + return (Global.Emulator as IMemoryDomains).MemoryDomains[_currentMemoryDomain]; + } + else + { + var error = string.Format("Error: {0} does not implement memory domains", Global.Emulator.Attributes().CoreName); + Log(error); + throw new NotImplementedException(error); + } + } } #region Unique Library Methods @@ -39,9 +60,9 @@ namespace BizHawk.Client.Common public LuaTable GetMemoryDomainList() { var table = Lua.NewTable(); - for (int i = 0; i < Global.Emulator.MemoryDomains.Count; i++) + for (int i = 0; i < DomainList.Count; i++) { - table[i] = Global.Emulator.MemoryDomains[i].Name; + table[i] = DomainList[i].Name; } return table; @@ -71,9 +92,9 @@ namespace BizHawk.Client.Common )] public bool UseMemoryDomain(string domain) { - for (var i = 0; i < Global.Emulator.MemoryDomains.Count; i++) + for (var i = 0; i < DomainList.Count; i++) { - if (Global.Emulator.MemoryDomains[i].Name == domain) + if (DomainList[i].Name == domain) { _currentMemoryDomain = i; return true; diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.NES.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.NES.cs index deeb363653..6f4cd43b7a 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.NES.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.NES.cs @@ -3,10 +3,10 @@ using System.ComponentModel; using System.Linq; using LuaInterface; +using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.NES; using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; - namespace BizHawk.Client.Common { [Description("Functions related specifically to Nes Cores")] @@ -34,7 +34,7 @@ namespace BizHawk.Client.Common { var decoder = new NESGameGenieDecoder(code); var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains["System Bus"], + (Global.Emulator as IMemoryDomains).MemoryDomains["System Bus"], decoder.Address, Watch.WatchSize.Byte, Watch.DisplayType.Hex, diff --git a/BizHawk.Client.Common/lua/LuaMemoryBase.cs b/BizHawk.Client.Common/lua/LuaMemoryBase.cs index 5f6382019d..6df6e4565f 100644 --- a/BizHawk.Client.Common/lua/LuaMemoryBase.cs +++ b/BizHawk.Client.Common/lua/LuaMemoryBase.cs @@ -1,6 +1,7 @@ using System; using LuaInterface; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.Common { @@ -17,6 +18,23 @@ namespace BizHawk.Client.Common protected abstract MemoryDomain Domain { get; } + protected MemoryDomainList DomainList + { + get + { + if (Global.Emulator.HasMemoryDomains()) // IMemoryDomains TODO: don't register memory libraries if core is not IMemoryDomains + { + return (Global.Emulator as IMemoryDomains).MemoryDomains; + } + else + { + var error = string.Format("Error: {0} does not implement memory domains", Global.Emulator.Attributes().CoreName); + Log(error); + throw new NotImplementedException(error); + } + } + } + protected uint ReadUnsignedByte(int addr) { if (addr < Domain.Size) diff --git a/BizHawk.Client.Common/tools/CheatList.cs b/BizHawk.Client.Common/tools/CheatList.cs index ff071c4800..105afa3d8e 100644 --- a/BizHawk.Client.Common/tools/CheatList.cs +++ b/BizHawk.Client.Common/tools/CheatList.cs @@ -456,7 +456,7 @@ namespace BizHawk.Client.Common compare = int.Parse(vals[2], NumberStyles.HexNumber); } - var domain = Global.Emulator.MemoryDomains[vals[3]]; + var domain = (Global.Emulator as IMemoryDomains).MemoryDomains[vals[3]]; // IMemoryDomains TODO var enabled = vals[4] == "1"; var name = vals[5]; diff --git a/BizHawk.Client.Common/tools/RamSearchEngine.cs b/BizHawk.Client.Common/tools/RamSearchEngine.cs index 5ee4e4967a..f0f75b019f 100644 --- a/BizHawk.Client.Common/tools/RamSearchEngine.cs +++ b/BizHawk.Client.Common/tools/RamSearchEngine.cs @@ -19,13 +19,14 @@ namespace BizHawk.Client.Common private ComparisonOperator _operator = ComparisonOperator.Equal; private List _watchList = new List(); - private readonly Settings _settings = new Settings(); + private readonly Settings _settings; private readonly UndoHistory _history = new UndoHistory(true); private bool _keepHistory = true; private bool _isSorted = true; // Tracks whether or not the list is sorted by address, if it is, binary search can be used for finding watches public RamSearchEngine(Settings settings) { + _settings = new Settings((IMemoryDomains)Global.Emulator); _settings.Mode = settings.Mode; _settings.Domain = settings.Domain; _settings.Size = settings.Size; @@ -1160,6 +1161,20 @@ namespace BizHawk.Client.Common public class Settings { + public Settings(IMemoryDomains core) + { + BigEndian = core.MemoryDomains.MainMemory.EndianType == MemoryDomain.Endian.Big; + Size = (Watch.WatchSize)Global.SystemInfo.ByteSize; + Type = Watch.DisplayType.Unsigned; + Mode = core.MemoryDomains.MainMemory.Size > (1024 * 1024) ? + SearchMode.Fast : + SearchMode.Detailed; + + Domain = core.MemoryDomains.MainMemory; + CheckMisAligned = false; + PreviousType = Watch.PreviousType.LastSearch; + } + /*Require restart*/ public enum SearchMode { Fast, Detailed } @@ -1172,20 +1187,6 @@ namespace BizHawk.Client.Common public Watch.DisplayType Type { get; set; } public bool BigEndian { get; set; } public Watch.PreviousType PreviousType { get; set; } - - public Settings() - { - BigEndian = Global.Emulator.MemoryDomains.MainMemory.EndianType == MemoryDomain.Endian.Big; - Size = (Watch.WatchSize)Global.SystemInfo.ByteSize; - Type = Watch.DisplayType.Unsigned; - Mode = Global.Emulator.MemoryDomains.MainMemory.Size > (1024 * 1024) ? - SearchMode.Fast : - SearchMode.Detailed; - - Domain = Global.Emulator.MemoryDomains.MainMemory; - CheckMisAligned = false; - PreviousType = Watch.PreviousType.LastSearch; - } } #endregion diff --git a/BizHawk.Client.Common/tools/WatchList.cs b/BizHawk.Client.Common/tools/WatchList.cs index 6e0414925e..8a56f850cd 100644 --- a/BizHawk.Client.Common/tools/WatchList.cs +++ b/BizHawk.Client.Common/tools/WatchList.cs @@ -12,6 +12,7 @@ namespace BizHawk.Client.Common { public class WatchList : IList { + private readonly IMemoryDomains Core; private List _watchList = new List(); private MemoryDomain _domain; private string _currentFilename = string.Empty; @@ -24,8 +25,9 @@ namespace BizHawk.Client.Common public const string DOMAIN = "DomainColumn"; public const string NOTES = "NotesColumn"; - public WatchList(MemoryDomain domain) + public WatchList(IMemoryDomains core, MemoryDomain domain) { + Core = core; _domain = domain; } @@ -471,7 +473,7 @@ namespace BizHawk.Client.Common // Temporary, rename if kept int addr; - var memDomain = Global.Emulator.MemoryDomains.MainMemory; + var memDomain = Core.MemoryDomains.MainMemory; var temp = line.Substring(0, line.IndexOf('\t')); try @@ -509,7 +511,7 @@ namespace BizHawk.Client.Common startIndex = line.IndexOf('\t') + 1; line = line.Substring(startIndex, line.Length - startIndex); // Domain temp = line.Substring(0, line.IndexOf('\t')); - memDomain = Global.Emulator.MemoryDomains[temp] ?? Global.Emulator.MemoryDomains.MainMemory; + memDomain = Core.MemoryDomains[temp] ?? Core.MemoryDomains.MainMemory; } startIndex = line.IndexOf('\t') + 1; @@ -523,10 +525,10 @@ namespace BizHawk.Client.Common type, notes, bigEndian)); - _domain = Global.Emulator.MemoryDomains[domain]; + _domain = Core.MemoryDomains[domain]; } - Domain = Global.Emulator.MemoryDomains[domain] ?? Global.Emulator.MemoryDomains.MainMemory; + Domain = Core.MemoryDomains[domain] ?? Core.MemoryDomains.MainMemory; _currentFilename = path; } diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 0d3707790a..21f273778d 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -1101,13 +1101,17 @@ namespace BizHawk.Client.EmuHawk VirtualPadMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Virtual Pad"].Bindings; TraceLoggerMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Trace Logger"].Bindings; TraceLoggerMenuItem.Enabled = Global.Emulator.CoreComm.CpuTraceAvailable; + + TAStudioMenuItem.Enabled = + VirtualPadMenuItem.Enabled = + !(Global.Emulator is NullEmulator); + CheatsMenuItem.Enabled = HexEditorMenuItem.Enabled = RamSearchMenuItem.Enabled = RamWatchMenuItem.Enabled = - TAStudioMenuItem.Enabled = - VirtualPadMenuItem.Enabled = - !(Global.Emulator is NullEmulator); + Global.Emulator.HasMemoryDomains(); + batchRunnerToolStripMenuItem.Visible = VersionInfo.DeveloperBuild; TAStudioMenuItem.Visible = VersionInfo.DeveloperBuild; diff --git a/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs index 8be6bdc912..9d2367f03b 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs @@ -1,4 +1,5 @@ using BizHawk.Client.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.EmuHawk { @@ -287,10 +288,16 @@ namespace BizHawk.Client.EmuHawk GlobalWin.Tools.LoadRamWatch(true); break; case "Ram Search": - GlobalWin.Tools.Load(); + if (Global.Emulator.HasMemoryDomains()) + { + GlobalWin.Tools.Load(); + } break; case "Hex Editor": - GlobalWin.Tools.Load(); + if (Global.Emulator.HasMemoryDomains()) + { + GlobalWin.Tools.Load(); + } break; case "Trace Logger": GlobalWin.Tools.LoadTraceLogger(); @@ -299,7 +306,10 @@ namespace BizHawk.Client.EmuHawk OpenLuaConsole(); break; case "Cheats": - GlobalWin.Tools.Load(); + if (Global.Emulator.HasMemoryDomains()) + { + GlobalWin.Tools.Load(); + } break; case "TAStudio": GlobalWin.Tools.Load(); diff --git a/BizHawk.Client.EmuHawk/tools/Cheats/CheatEdit.cs b/BizHawk.Client.EmuHawk/tools/Cheats/CheatEdit.cs index b1308eb175..0d1e2b8c84 100644 --- a/BizHawk.Client.EmuHawk/tools/Cheats/CheatEdit.cs +++ b/BizHawk.Client.EmuHawk/tools/Cheats/CheatEdit.cs @@ -9,6 +9,8 @@ namespace BizHawk.Client.EmuHawk { public partial class CheatEdit : UserControl { + public IMemoryDomains Core { get; set; } + public CheatEdit() { InitializeComponent(); @@ -32,10 +34,10 @@ namespace BizHawk.Client.EmuHawk if (Global.Emulator != null) // the designer needs this check { DomainDropDown.Items.Clear(); - DomainDropDown.Items.AddRange(Global.Emulator.MemoryDomains + DomainDropDown.Items.AddRange(Core.MemoryDomains .Select(d => d.ToString()) .ToArray()); - DomainDropDown.SelectedItem = Global.Emulator.MemoryDomains.MainMemory.ToString(); + DomainDropDown.SelectedItem = Core.MemoryDomains.MainMemory.ToString(); } SetFormToDefault(); @@ -89,7 +91,7 @@ namespace BizHawk.Client.EmuHawk if (Global.Emulator != null) { - AddressBox.SetHexProperties(Global.Emulator.MemoryDomains.MainMemory.Size); + AddressBox.SetHexProperties(Core.MemoryDomains.MainMemory.Size); } ValueBox.ByteSize = @@ -112,7 +114,7 @@ namespace BizHawk.Client.EmuHawk SetTypeSelected(Watch.DisplayType.Hex); CheckFormState(); - CompareBox.Text = String.Empty; // TODO: A needed hack until WatchValueBox.ToRawInt() becomes nullable + CompareBox.Text = string.Empty; // TODO: A needed hack until WatchValueBox.ToRawInt() becomes nullable _loading = false; } @@ -200,7 +202,7 @@ namespace BizHawk.Client.EmuHawk { if (!_loading) { - var domain = Global.Emulator.MemoryDomains[DomainDropDown.SelectedItem.ToString()]; + var domain = Core.MemoryDomains[DomainDropDown.SelectedItem.ToString()]; AddressBox.SetHexProperties(domain.Size); } } @@ -276,13 +278,13 @@ namespace BizHawk.Client.EmuHawk { get { - var domain = Global.Emulator.MemoryDomains[DomainDropDown.SelectedItem.ToString()]; + var domain = Core.MemoryDomains[DomainDropDown.SelectedItem.ToString()]; var address = AddressBox.ToRawInt().Value; //var address = AddressBox.ToRawInt() ?? 0; if (address < domain.Size) { var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains[DomainDropDown.SelectedItem.ToString()], + Core.MemoryDomains[DomainDropDown.SelectedItem.ToString()], AddressBox.ToRawInt().Value, GetCurrentSize(), Watch.StringToDisplayType(DisplayTypeDropDown.SelectedItem.ToString()), diff --git a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs index df15df3eda..daff9a81fd 100644 --- a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs +++ b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.cs @@ -6,10 +6,12 @@ using System.IO; using System.Linq; using System.Windows.Forms; -using BizHawk.Client.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.Sega.Genesis; +using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.ToolExtensions; using BizHawk.Client.EmuHawk.WinFormExtensions; @@ -45,11 +47,16 @@ namespace BizHawk.Client.EmuHawk private string _sortedColumn = string.Empty; private bool _sortReverse; + private readonly IMemoryDomains Core; + public bool UpdateBefore { get { return false; } } public Cheats() { + Core = (IMemoryDomains)Global.Emulator; // Cast is intentional in order to get a cast excpetion rather than a null reference exception later InitializeComponent(); + CheatEditor.Core = Core; + Closing += (o, e) => { if (AskSaveChanges()) @@ -83,6 +90,11 @@ namespace BizHawk.Client.EmuHawk public void Restart() { + if (!Global.Emulator.HasMemoryDomains()) + { + Close(); + } + StartNewList(); } diff --git a/BizHawk.Client.EmuHawk/tools/GB/GBGameGenie.cs b/BizHawk.Client.EmuHawk/tools/GB/GBGameGenie.cs index 3df605a67d..734b5c9d0b 100644 --- a/BizHawk.Client.EmuHawk/tools/GB/GBGameGenie.cs +++ b/BizHawk.Client.EmuHawk/tools/GB/GBGameGenie.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Text.RegularExpressions; using System.Windows.Forms; +using BizHawk.Emulation.Common; using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk @@ -295,7 +296,7 @@ namespace BizHawk.Client.EmuHawk } var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains["System Bus"], + (Global.Emulator as IMemoryDomains).MemoryDomains["System Bus"], address, Watch.WatchSize.Byte, Watch.DisplayType.Hex, diff --git a/BizHawk.Client.EmuHawk/tools/Genesis/GenGameGenie.cs b/BizHawk.Client.EmuHawk/tools/Genesis/GenGameGenie.cs index 3fd6f5d453..5b4143c303 100644 --- a/BizHawk.Client.EmuHawk/tools/Genesis/GenGameGenie.cs +++ b/BizHawk.Client.EmuHawk/tools/Genesis/GenGameGenie.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Text.RegularExpressions; using System.Windows.Forms; +using BizHawk.Emulation.Common; using BizHawk.Client.Common; #pragma warning disable 675 //TOOD: fix the potential problem this is masking @@ -356,7 +357,7 @@ namespace BizHawk.Client.EmuHawk } var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains["MD CART"], + (Global.Emulator as IMemoryDomains).MemoryDomains["MD CART"], // IMemoryDomains TODO: don't expose this dialog unless the core implements IMemoryDomains address, Watch.WatchSize.Word, Watch.DisplayType.Hex, diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs index d8c6953d6e..1041d26610 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs @@ -13,6 +13,7 @@ using BizHawk.Common.NumberExtensions; using BizHawk.Common.StringExtensions; using BizHawk.Common.IOExtensions; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; @@ -55,8 +56,11 @@ namespace BizHawk.Client.EmuHawk private bool _bigEndian; private int _dataSize; + private readonly MemoryDomainList MemoryDomains; + public HexEditor() { + MemoryDomains = ((IMemoryDomains)Global.Emulator).MemoryDomains; // The cast is intentional, we want a specific cast error, not an eventual null reference error InitializeComponent(); AddressesLabel.BackColor = Color.Transparent; LoadConfigSettings(); @@ -119,6 +123,11 @@ namespace BizHawk.Client.EmuHawk public void Restart() { + if (!Global.Emulator.HasMemoryDomains()) + { + Close(); + } + if (!IsHandleCreated || IsDisposed) { return; @@ -311,11 +320,11 @@ namespace BizHawk.Client.EmuHawk } } - private static int? GetDomainInt(string name) + private int? GetDomainInt(string name) { - for (var i = 0; i < Global.Emulator.MemoryDomains.Count; i++) + for (var i = 0; i < MemoryDomains.Count; i++) { - if (Global.Emulator.MemoryDomains[i].Name == name) + if (MemoryDomains[i].Name == name) { return i; } @@ -628,9 +637,9 @@ namespace BizHawk.Client.EmuHawk // THIS IS HORRIBLE. SetMemoryDomain(_romDomain); } - else if (pos < Global.Emulator.MemoryDomains.Count) + else if (pos < MemoryDomains.Count) { - SetMemoryDomain(Global.Emulator.MemoryDomains[pos]); + SetMemoryDomain(MemoryDomains[pos]); } SetHeader(); @@ -650,11 +659,11 @@ namespace BizHawk.Client.EmuHawk { MemoryDomainsMenuItem.DropDownItems.Clear(); - for (var i = 0; i < Global.Emulator.MemoryDomains.Count; i++) + for (var i = 0; i < MemoryDomains.Count; i++) { - if (Global.Emulator.MemoryDomains[i].Size > 0) + if (MemoryDomains[i].Size > 0) { - var str = Global.Emulator.MemoryDomains[i].ToString(); + var str = MemoryDomains[i].ToString(); var item = new ToolStripMenuItem { Text = str }; { var temp = i; diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.cs b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.cs index f5be5d3d11..9f2a06eca8 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; +using BizHawk.Emulation.Common; using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk @@ -230,7 +231,7 @@ namespace BizHawk.Client.EmuHawk if (!string.IsNullOrWhiteSpace(AddressBox.Text) && !string.IsNullOrWhiteSpace(ValueBox.Text)) { var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains["System Bus"], + (Global.Emulator as IMemoryDomains).MemoryDomains["System Bus"], // IMemoryDomains TODO: Don't expose this dialog if core does not implement IMemoryDomains AddressBox.ToRawInt().Value, Watch.WatchSize.Byte, Watch.DisplayType.Hex, diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCECDL.cs b/BizHawk.Client.EmuHawk/tools/PCE/PCECDL.cs index 8db47173a4..a408e12efa 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCECDL.cs +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCECDL.cs @@ -4,9 +4,11 @@ using System.Drawing; using System.IO; using System.Windows.Forms; -using BizHawk.Client.Common; +using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Components.H6280; using BizHawk.Emulation.Cores.PCEngine; + +using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.ToolExtensions; namespace BizHawk.Client.EmuHawk @@ -302,7 +304,7 @@ namespace BizHawk.Client.EmuHawk { using (var fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write)) { - _cdl.Disassemble(fs, Global.Emulator.MemoryDomains); + _cdl.Disassemble(fs, (Global.Emulator as IMemoryDomains).MemoryDomains); // IMemoryDomains TODO: don't expose this dialog unless core implmements IMemoryDomains } } } diff --git a/BizHawk.Client.EmuHawk/tools/SNES/SNESGameGenie.cs b/BizHawk.Client.EmuHawk/tools/SNES/SNESGameGenie.cs index 846ff12197..1c62362a30 100644 --- a/BizHawk.Client.EmuHawk/tools/SNES/SNESGameGenie.cs +++ b/BizHawk.Client.EmuHawk/tools/SNES/SNESGameGenie.cs @@ -4,8 +4,9 @@ using System.Globalization; using System.Text.RegularExpressions; using System.Windows.Forms; -using BizHawk.Client.Common; +using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.SNES; +using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { @@ -274,7 +275,7 @@ namespace BizHawk.Client.EmuHawk } var watch = Watch.GenerateWatch( - Global.Emulator.MemoryDomains["BUS"], + (Global.Emulator as IMemoryDomains).MemoryDomains["BUS"], // IMemoryDomains TODO: don't expose this dialog if not implementing this interface address, Watch.WatchSize.Byte, Watch.DisplayType.Hex, diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs index 5994dd28e6..026f25ca58 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs @@ -67,11 +67,6 @@ namespace BizHawk.Client.EmuHawk var record = _currentTasMovie[index]; - if (!(record.Lagged ?? false)) - { - int zzz = 0; - } - if (columnName == FrameColumnName) { if (Global.Emulator.Frame == index) diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.cs b/BizHawk.Client.EmuHawk/tools/ToolBox.cs index 994862e05b..31b21cabba 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.cs @@ -3,7 +3,8 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; -using BizHawk.Client.Common; + +using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Emulation.Cores.Calculators; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; using BizHawk.Emulation.Cores.Nintendo.GBA; @@ -12,6 +13,8 @@ using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.PCEngine; using BizHawk.Emulation.Cores.Sega.MasterSystem; +using BizHawk.Client.Common; + namespace BizHawk.Client.EmuHawk { public partial class ToolBox : Form, IToolForm @@ -51,6 +54,12 @@ namespace BizHawk.Client.EmuHawk private void SetTools() { + HexEditorToolbarItem.Visible = + RamWatchToolbarItem.Visible = + RamSearchToolbarItem.Visible = + CheatsToolBarItem.Visible = + Global.Emulator.HasMemoryDomains(); + NesPPUToolbarItem.Visible = NesDebuggerToolbarItem.Visible = NesNameTableToolbarItem.Visible = @@ -70,6 +79,7 @@ namespace BizHawk.Client.EmuHawk PceCdlToolbarItem.Visible = PceBgViewerToolbarItem.Visible = PceTileToolbarItem.Visible = + PceSoundDebuggerButton.Visible = Global.Emulator is PCEngine; GBGameGenieToolbarItem.Visible = diff --git a/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs b/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs index a3b9076fe9..4ccfcf384d 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolHelpers.cs @@ -4,8 +4,10 @@ using System.IO; using System.Linq; using System.Windows.Forms; -using BizHawk.Client.Common; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + +using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; namespace BizHawk.Client.EmuHawk @@ -207,16 +209,19 @@ namespace BizHawk.Client.EmuHawk public static void UpdateCheatRelatedTools(object sender, CheatCollection.CheatListEventArgs e) { - GlobalWin.Tools.UpdateValues(); - GlobalWin.Tools.UpdateValues(); - GlobalWin.Tools.UpdateValues(); - - if (GlobalWin.Tools.Has()) + if (Global.Emulator.HasMemoryDomains()) { - GlobalWin.Tools.Cheats.UpdateDialog(); - } + GlobalWin.Tools.UpdateValues(); + GlobalWin.Tools.UpdateValues(); + GlobalWin.Tools.UpdateValues(); - GlobalWin.MainForm.UpdateCheatStatus(); + if (GlobalWin.Tools.Has()) + { + GlobalWin.Tools.Cheats.UpdateDialog(); + } + + GlobalWin.MainForm.UpdateCheatStatus(); + } } public static void ViewInHexEditor(MemoryDomain domain, IEnumerable addresses, Watch.WatchSize size) diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs index 4fa7283583..6ec2bb14f8 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs @@ -11,8 +11,11 @@ using System.Windows.Forms; using BizHawk.Common.StringExtensions; using BizHawk.Common.NumberExtensions; -using BizHawk.Client.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + +using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; @@ -47,6 +50,8 @@ namespace BizHawk.Client.EmuHawk private bool _dropdownDontfire; // Used as a hack to get around lame .net dropdowns, there's no way to set their index without firing the selectedindexchanged event! + private readonly IMemoryDomains Core; + public const int MaxDetailedSize = 1024 * 1024; // 1mb, semi-arbituary decision, sets the size to check for and automatically switch to fast mode for the user public const int MaxSupportedSize = 1024 * 1024 * 64; // 64mb, semi-arbituary decision, sets the maximum size ram search will support (as it will crash beyond this) @@ -64,6 +69,7 @@ namespace BizHawk.Client.EmuHawk public RamSearch() { + Core = (IMemoryDomains)Global.Emulator; // Cast is intentional, better to get a cast exception than a more amibious null reference exception later SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); @@ -76,7 +82,7 @@ namespace BizHawk.Client.EmuHawk _sortedColumn = string.Empty; _sortReverse = false; - _settings = new RamSearchEngine.Settings(); + _settings = new RamSearchEngine.Settings(Core); _searches = new RamSearchEngine(_settings); TopMost = Global.Config.RamSearchSettings.TopMost; @@ -118,7 +124,7 @@ namespace BizHawk.Client.EmuHawk SpecificValueBox.Type = _settings.Type; MessageLabel.Text = string.Empty; - SpecificAddressBox.MaxLength = (Global.Emulator.MemoryDomains.MainMemory.Size - 1).NumHexDigits(); + SpecificAddressBox.MaxLength = (Core.MemoryDomains.MainMemory.Size - 1).NumHexDigits(); HardSetSizeDropDown(_settings.Size); PopulateTypeDropDown(); HardSetDisplayTypeDropDown(_settings.Type); @@ -283,7 +289,12 @@ namespace BizHawk.Client.EmuHawk return; } - _settings.Domain = Global.Emulator.MemoryDomains.MainMemory; + if (!Global.Emulator.HasMemoryDomains()) + { + Close(); + } + + _settings.Domain = Core.MemoryDomains.MainMemory; MessageLabel.Text = "Search restarted"; DoDomainSizeCheck(); NewSearch(); @@ -576,7 +587,7 @@ namespace BizHawk.Client.EmuHawk private void SetMemoryDomain(string name) { - _settings.Domain = Global.Emulator.MemoryDomains[name]; + _settings.Domain = Core.MemoryDomains[name]; SetReboot(true); SpecificAddressBox.MaxLength = (_settings.Domain.Size - 1).NumHexDigits(); DoDomainSizeCheck(); @@ -833,7 +844,7 @@ namespace BizHawk.Client.EmuHawk _currentFileName = file.FullName; } - var watches = new WatchList(_settings.Domain); + var watches = new WatchList(Core, _settings.Domain); watches.Load(file.FullName, append); var watchList = watches.Where(x => !x.IsSeparator); @@ -989,7 +1000,7 @@ namespace BizHawk.Client.EmuHawk { if (!string.IsNullOrWhiteSpace(_currentFileName)) { - var watches = new WatchList(_settings.Domain) { CurrentFileName = _currentFileName }; + var watches = new WatchList(Core, _settings.Domain) { CurrentFileName = _currentFileName }; for (var i = 0; i < _searches.Count; i++) { watches.Add(_searches[i]); @@ -1017,7 +1028,7 @@ namespace BizHawk.Client.EmuHawk private void SaveAsMenuItem_Click(object sender, EventArgs e) { - var watches = new WatchList(_settings.Domain) { CurrentFileName = _currentFileName }; + var watches = new WatchList(Core, _settings.Domain) { CurrentFileName = _currentFileName }; for (var i = 0; i < _searches.Count; i++) { watches.Add(_searches[i]); @@ -1056,7 +1067,7 @@ namespace BizHawk.Client.EmuHawk { MemoryDomainsSubMenu.DropDownItems.Clear(); MemoryDomainsSubMenu.DropDownItems.AddRange( - Global.Emulator.MemoryDomains.MenuItems(SetMemoryDomain, _searches.Domain.Name, MaxSupportedSize) + Core.MemoryDomains.MenuItems(SetMemoryDomain, _searches.Domain.Name, MaxSupportedSize) .ToArray()); } @@ -1370,9 +1381,7 @@ namespace BizHawk.Client.EmuHawk { "DiffColumn", -1 }, }; - - - _settings = new RamSearchEngine.Settings(); + _settings = new RamSearchEngine.Settings(Core); if (_settings.Mode == RamSearchEngine.Settings.SearchMode.Fast) { SetToFastMode(); diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs index 8f7940d46f..17d48ae6a1 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs @@ -7,6 +7,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; @@ -26,7 +29,9 @@ namespace BizHawk.Client.EmuHawk { WatchList.NOTES, 128 }, }; - private readonly WatchList _watches = new WatchList(Global.Emulator.MemoryDomains.MainMemory); + private readonly WatchList _watches; + private readonly IMemoryDomains Core; + private int _defaultWidth; private int _defaultHeight; @@ -36,6 +41,8 @@ namespace BizHawk.Client.EmuHawk public RamWatch() { + Core = (IMemoryDomains)Global.Emulator; // Cast is intentional, better to get a cast exception than a null reference exception later + _watches = new WatchList(Core, Core.MemoryDomains.MainMemory); InitializeComponent(); WatchListView.QueryItemText += WatchListView_QueryItemText; WatchListView.QueryItemBkColor += WatchListView_QueryItemBkColor; @@ -188,6 +195,11 @@ namespace BizHawk.Client.EmuHawk return; } + if (!Global.Emulator.HasMemoryDomains()) + { + Close(); + } + if (!string.IsNullOrWhiteSpace(_watches.CurrentFileName)) { _watches.Reload(); @@ -556,7 +568,7 @@ namespace BizHawk.Client.EmuHawk private void SetMemoryDomain(string name) { - _watches.Domain = Global.Emulator.MemoryDomains[name]; + _watches.Domain = Core.MemoryDomains[name]; SetPlatformAndMemoryDomainLabel(); Update(); } @@ -737,7 +749,7 @@ namespace BizHawk.Client.EmuHawk { MemoryDomainsSubMenu.DropDownItems.Clear(); MemoryDomainsSubMenu.DropDownItems.AddRange( - Global.Emulator.MemoryDomains.MenuItems(SetMemoryDomain, _watches.Domain.Name) + Core.MemoryDomains.MenuItems(SetMemoryDomain, _watches.Domain.Name) .ToArray()); } diff --git a/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs b/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs index 03482d688e..f072f13a1f 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/WatchEditor.cs @@ -14,6 +14,8 @@ namespace BizHawk.Client.EmuHawk public enum Mode { New, Duplicate, Edit }; private readonly List _watchList = new List(); + private readonly IMemoryDomains Core; + private Mode _mode = Mode.New; private bool _loading = true; @@ -26,6 +28,7 @@ namespace BizHawk.Client.EmuHawk public WatchEditor() { + Core = (IMemoryDomains)Global.Emulator; _changedDisplayType = false; InitializeComponent(); } @@ -100,10 +103,10 @@ namespace BizHawk.Client.EmuHawk _mode = mode; DomainDropDown.Items.Clear(); - DomainDropDown.Items.AddRange(Global.Emulator.MemoryDomains + DomainDropDown.Items.AddRange(Core.MemoryDomains .Select(d => d.ToString()) .ToArray()); - DomainDropDown.SelectedItem = Global.Emulator.MemoryDomains.MainMemory.ToString(); + DomainDropDown.SelectedItem = Core.MemoryDomains.MainMemory.ToString(); SetTitle(); } @@ -129,7 +132,7 @@ namespace BizHawk.Client.EmuHawk { if (!_loading) { - var domain = Global.Emulator.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()); + var domain = Core.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()); if (domain != null) { AddressBox.SetHexProperties(domain.Size); @@ -188,8 +191,8 @@ namespace BizHawk.Client.EmuHawk } } - var domain = Global.Emulator.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()) ?? - Global.Emulator.MemoryDomains.MainMemory; + var domain = Core.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()) ?? + Core.MemoryDomains.MainMemory; BigEndianCheckBox.Checked = domain.EndianType == MemoryDomain.Endian.Big; } @@ -209,7 +212,7 @@ namespace BizHawk.Client.EmuHawk { default: case Mode.New: - var domain = Global.Emulator.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()); + var domain = Core.MemoryDomains.FirstOrDefault(d => d.Name == DomainDropDown.SelectedItem.ToString()); var address = AddressBox.ToRawInt() ?? 0; var notes = NotesBox.Text; var type = Watch.StringToDisplayType(DisplayTypeDropDown.SelectedItem.ToString()); diff --git a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj index 037e7b02e1..d06e81c69b 100644 --- a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj +++ b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj @@ -62,6 +62,7 @@ + diff --git a/BizHawk.Emulation.Common/Extensions.cs b/BizHawk.Emulation.Common/Extensions.cs index cbb005ce29..acf5257526 100644 --- a/BizHawk.Emulation.Common/Extensions.cs +++ b/BizHawk.Emulation.Common/Extensions.cs @@ -8,5 +8,10 @@ namespace BizHawk.Emulation.Common.IEmulatorExtensions { return (CoreAttributes)Attribute.GetCustomAttribute(core.GetType(), typeof(CoreAttributes)); } + + public static bool HasMemoryDomains(this IEmulator core) + { + return core is IMemoryDomains; + } } } diff --git a/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs index 323b7c82d9..c4982ba049 100644 --- a/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs @@ -26,12 +26,6 @@ namespace BizHawk.Emulation.Common public NullEmulator(CoreComm comm) { CoreComm = comm; - var domains = new MemoryDomainList( - new List - { - new MemoryDomain("Main RAM", 1, MemoryDomain.Endian.Little, addr => 0, (a, v) => { }) - }); - memoryDomains = new MemoryDomainList(domains); var d = DateTime.Now; xmas = d.Month == 12 && d.Day >= 17 && d.Day <= 27; @@ -89,8 +83,7 @@ namespace BizHawk.Emulation.Common public int BufferWidth { get { return 256; } } public int BufferHeight { get { return 192; } } public int BackgroundColor { get { return 0; } } - private readonly MemoryDomainList memoryDomains; - public MemoryDomainList MemoryDomains { get { return memoryDomains; } } + public void Dispose() { } public Dictionary GetCpuFlagsAndRegisters() diff --git a/BizHawk.Emulation.Common/Interfaces/IEmulator.cs b/BizHawk.Emulation.Common/Interfaces/IEmulator.cs index 92b112d2b6..fbdc8f6dd7 100644 --- a/BizHawk.Emulation.Common/Interfaces/IEmulator.cs +++ b/BizHawk.Emulation.Common/Interfaces/IEmulator.cs @@ -127,16 +127,6 @@ namespace BizHawk.Emulation.Common /// CoreComm CoreComm { get; } - ///The list of all avaialble memory domains - /// A memory domain is a byte array that respresents a distinct part of the emulated system. - /// By convention the Main Memory is the 1st domain in the list - // All cores sould implement a System Bus domain that represents the standard "Open bus" range for that system, - /// and a Main Memory which is typically the WRAM space (for instance, on NES - 0000-07FF), - /// Other chips, and ram spaces can be added as well. - /// Subdomains of another domain are also welcome. - /// The MainMemory identifier will be 0 if not set - MemoryDomainList MemoryDomains { get; } - //Debugging /// diff --git a/BizHawk.Emulation.Common/Interfaces/IMemoryDomains.cs b/BizHawk.Emulation.Common/Interfaces/IMemoryDomains.cs new file mode 100644 index 0000000000..04fe0fcb51 --- /dev/null +++ b/BizHawk.Emulation.Common/Interfaces/IMemoryDomains.cs @@ -0,0 +1,15 @@ +namespace BizHawk.Emulation.Common +{ + public interface IMemoryDomains + { + ///The list of all avaialble memory domains + /// A memory domain is a byte array that respresents a distinct part of the emulated system. + /// By convention the Main Memory is the 1st domain in the list + // All cores sould implement a System Bus domain that represents the standard "Open bus" range for that system, + /// and a Main Memory which is typically the WRAM space (for instance, on NES - 0000-07FF), + /// Other chips, and ram spaces can be added as well. + /// Subdomains of another domain are also welcome. + /// The MainMemory identifier will be 0 if not set + MemoryDomainList MemoryDomains { get; } + } +} diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.cs b/BizHawk.Emulation.Cores/Calculator/TI83.cs index 6b8e175ba4..7f51fd2f0e 100644 --- a/BizHawk.Emulation.Cores/Calculator/TI83.cs +++ b/BizHawk.Emulation.Cores/Calculator/TI83.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.Calculators isPorted: false, isReleased: true )] - public class TI83 : IEmulator + public class TI83 : IEmulator, IMemoryDomains { //hardware private readonly Z80A cpu = new Z80A(); diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs index 79127a1bee..8febd93cad 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs @@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 isPorted: false, isReleased: false )] - sealed public partial class C64 : IEmulator + sealed public partial class C64 : IEmulator, IMemoryDomains { // internal variables private bool _islag = true; diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs index 56f68612c0..48b597e1e1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs @@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 isPorted: false, isReleased: true )] - public partial class Atari2600 : IEmulator + public partial class Atari2600 : IEmulator, IMemoryDomains { private readonly GameInfo _game; private bool _islag = true; diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs b/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs index 2aeebeee42..e5f60bbf89 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/7800/Atari7800.cs @@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari7800 portedVersion: "v1.5", portedUrl: "http://emu7800.sourceforge.net/" )] - public partial class Atari7800 : IEmulator + public partial class Atari7800 : IEmulator, IMemoryDomains { // TODO: // some things don't work when you try to plug in a 2600 game diff --git a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs index c3030a5741..90e2b072f2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs +++ b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision isPorted: false, isReleased: true )] - public sealed partial class ColecoVision : IEmulator + public sealed partial class ColecoVision : IEmulator, IMemoryDomains { // ROM public byte[] RomData; diff --git a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs index 7ba915c20f..14e19fd572 100644 --- a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs +++ b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs @@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Intellivision isPorted: false, isReleased: false )] - public sealed partial class Intellivision : IEmulator + public sealed partial class Intellivision : IEmulator, IMemoryDomains { byte[] Rom; GameInfo Game; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/Meteor.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/Meteor.cs index e2e2150495..842b9440dd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/Meteor.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/Meteor.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA isPorted: true, isReleased: false )] - public class GBA : IEmulator, IVideoProvider, ISyncSoundProvider, IGBAGPUViewable + public class GBA : IEmulator, IVideoProvider, ISyncSoundProvider, IGBAGPUViewable, IMemoryDomains { public Dictionary GetCpuFlagsAndRegisters() { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs index b5a828df3b..678d63760b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs @@ -14,7 +14,7 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Nintendo.GBA { [CoreAttributes("VBA-Next", "many authors", true, true, "cd508312a29ed8c29dacac1b11c2dce56c338a54", "https://github.com/libretro/vba-next")] - public class VBANext : IEmulator, IVideoProvider, ISyncSoundProvider, IGBAGPUViewable + public class VBANext : IEmulator, IVideoProvider, ISyncSoundProvider, IGBAGPUViewable, IMemoryDomains { IntPtr Core; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 9fdfae42d5..ae2a41f098 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -22,7 +22,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy portedVersion: "SVN 344", portedUrl: "http://gambatte.sourceforge.net/" )] - public class Gameboy : IEmulator, IVideoProvider, ISyncSoundProvider + public class Gameboy : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { #region ALL SAVESTATEABLE STATE GOES HERE diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs index ec9f1a04da..c94f0ba666 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 portedVersion: "2.0", portedUrl: "https://code.google.com/p/mupen64plus/" )] - public class N64 : IEmulator + public class N64 : IEmulator, IMemoryDomains { private readonly N64Input _inputProvider; private readonly N64VideoProvider _videoProvider; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs index 7c5775a6bb..3f571ec56a 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES isPorted: false, isReleased: true )] - public partial class NES : IEmulator + public partial class NES : IEmulator, IMemoryDomains { static readonly bool USE_DATABASE = true; public RomStatus RomStatus; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index 4a746d90e2..4d332f865c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -21,7 +21,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES portedVersion: "0.7.0", portedUrl: "https://github.com/kode54/QuickNES" )] - public class QuickNES : IEmulator, IVideoProvider, ISyncSoundProvider + public class QuickNES : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { #region FPU precision diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index cb698d4c98..9f2d815cf0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -66,7 +66,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES portedVersion: "v87", portedUrl: "http://byuu.org/" )] - public unsafe class LibsnesCore : IEmulator, IVideoProvider + public unsafe class LibsnesCore : IEmulator, IVideoProvider, IMemoryDomains { public bool IsSGB { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs index 3a77c1a160..a67859ce79 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs @@ -10,7 +10,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Nintendo.SNES9X { [CoreAttributes("Snes9x", "FIXME", true, false, "5e0319ab3ef9611250efb18255186d0dc0d7e125", "https://github.com/snes9xgit/snes9x")] - public class Snes9x : IEmulator, IVideoProvider, ISyncSoundProvider + public class Snes9x : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { #region controller diff --git a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs index 1227f5e672..361bdd74b8 100644 --- a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs +++ b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs @@ -22,7 +22,7 @@ namespace BizHawk.Emulation.Cores.PCEngine isPorted: false, isReleased: true )] - public sealed partial class PCEngine : IEmulator + public sealed partial class PCEngine : IEmulator, IMemoryDomains { // ROM public byte[] RomData; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/Genesis/Genesis.cs b/BizHawk.Emulation.Cores/Consoles/Sega/Genesis/Genesis.cs index 4d0cb37cae..29da992a80 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/Genesis/Genesis.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/Genesis/Genesis.cs @@ -21,7 +21,7 @@ namespace BizHawk.Emulation.Cores.Sega.Genesis isPorted: false, isReleased: false )] - public sealed partial class Genesis : IEmulator + public sealed partial class Genesis : IEmulator, IMemoryDomains { private int _lagcount = 0; private bool lagged = true; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs index c26383fb47..73db593134 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs @@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem isPorted: false, isReleased: true )] - public sealed partial class SMS : IEmulator + public sealed partial class SMS : IEmulator, IMemoryDomains { // Constants public const int BankSize = 16384; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Yabause.cs b/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Yabause.cs index 4dedb9da58..1272508b5c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Yabause.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Yabause.cs @@ -23,7 +23,7 @@ namespace BizHawk.Emulation.Cores.Sega.Saturn portedVersion: "9.12", portedUrl: "http://yabause.org" )] - public class Yabause : IEmulator, IVideoProvider, ISyncSoundProvider + public class Yabause : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { public static ControllerDefinition SaturnController = new ControllerDefinition { diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs index b306667230..680361e6a2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs @@ -24,7 +24,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx portedVersion: "r874", portedUrl: "https://code.google.com/p/genplus-gx/" )] - public class GPGX : IEmulator, ISyncSoundProvider, IVideoProvider + public class GPGX : IEmulator, ISyncSoundProvider, IVideoProvider, IMemoryDomains { static GPGX AttachedCore = null; diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs index d6800bc4a7..c92c7ae28b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSP isPorted: true, isReleased: false )] - public class PSP : IEmulator, IVideoProvider, ISyncSoundProvider + public class PSP : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { public static readonly ControllerDefinition PSPController = new ControllerDefinition { diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index 9ee273b3c0..3f5552aa4f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX isPorted: true, isReleased: false )] - public unsafe class Octoshock : IEmulator, IVideoProvider, ISoundProvider + public unsafe class Octoshock : IEmulator, IVideoProvider, ISoundProvider, IMemoryDomains { public string SystemId { get { return "NULL"; } } public static readonly ControllerDefinition NullController = new ControllerDefinition { Name = "Null Controller" }; diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index f156e93c6e..534d73f3d2 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -12,7 +12,7 @@ using System.Runtime.InteropServices; namespace BizHawk.Emulation.Cores.WonderSwan { [CoreAttributes("Cygne/Mednafen", "Dox", true, true, "0.9.34.1", "http://mednafen.sourceforge.net/")] - public class WonderSwan : IEmulator, IVideoProvider, ISyncSoundProvider + public class WonderSwan : IEmulator, IVideoProvider, ISyncSoundProvider, IMemoryDomains { #region Controller