add a CanPoke() extension method for memory domains, checks for a null or not implemented Poke Poke delegate, use it to disable Poke on Ram Search and Ram Watch, still todo - hex editor and lua
This commit is contained in:
parent
d200c1be38
commit
7ed8704555
|
@ -1173,10 +1173,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
RemoveMenuItem.Enabled =
|
RemoveMenuItem.Enabled =
|
||||||
AddToRamWatchMenuItem.Enabled =
|
AddToRamWatchMenuItem.Enabled =
|
||||||
PokeAddressMenuItem.Enabled =
|
|
||||||
FreezeAddressMenuItem.Enabled =
|
FreezeAddressMenuItem.Enabled =
|
||||||
SelectedIndices.Any();
|
SelectedIndices.Any();
|
||||||
|
|
||||||
|
PokeAddressMenuItem.Enabled =
|
||||||
|
SelectedIndices.Any() &&
|
||||||
|
SelectedWatches.All(w => w.Domain.CanPoke());
|
||||||
|
|
||||||
UndoMenuItem.Enabled =
|
UndoMenuItem.Enabled =
|
||||||
ClearUndoMenuItem.Enabled =
|
ClearUndoMenuItem.Enabled =
|
||||||
_searches.CanUndo;
|
_searches.CanUndo;
|
||||||
|
@ -1379,13 +1382,15 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
RemoveContextMenuItem.Visible =
|
RemoveContextMenuItem.Visible =
|
||||||
AddToRamWatchContextMenuItem.Visible =
|
AddToRamWatchContextMenuItem.Visible =
|
||||||
PokeContextMenuItem.Visible =
|
|
||||||
FreezeContextMenuItem.Visible =
|
FreezeContextMenuItem.Visible =
|
||||||
ContextMenuSeparator2.Visible =
|
ContextMenuSeparator2.Visible =
|
||||||
|
|
||||||
ViewInHexEditorContextMenuItem.Visible =
|
ViewInHexEditorContextMenuItem.Visible =
|
||||||
SelectedIndices.Any();
|
SelectedIndices.Any();
|
||||||
|
|
||||||
|
PokeContextMenuItem.Enabled =
|
||||||
|
SelectedIndices.Any() &&
|
||||||
|
SelectedWatches.All(w => w.Domain.CanPoke());
|
||||||
|
|
||||||
UnfreezeAllContextMenuItem.Visible = Global.CheatList.ActiveCount > 0;
|
UnfreezeAllContextMenuItem.Visible = Global.CheatList.ActiveCount > 0;
|
||||||
|
|
||||||
ContextMenuSeparator3.Visible = SelectedIndices.Any() || (Global.CheatList.ActiveCount > 0);
|
ContextMenuSeparator3.Visible = SelectedIndices.Any() || (Global.CheatList.ActiveCount > 0);
|
||||||
|
|
|
@ -687,10 +687,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
RemoveWatchMenuItem.Enabled =
|
RemoveWatchMenuItem.Enabled =
|
||||||
MoveUpMenuItem.Enabled =
|
MoveUpMenuItem.Enabled =
|
||||||
MoveDownMenuItem.Enabled =
|
MoveDownMenuItem.Enabled =
|
||||||
PokeAddressMenuItem.Enabled =
|
|
||||||
FreezeAddressMenuItem.Enabled =
|
FreezeAddressMenuItem.Enabled =
|
||||||
SelectedIndices.Any();
|
SelectedIndices.Any();
|
||||||
|
|
||||||
|
PokeAddressMenuItem.Enabled =
|
||||||
|
SelectedIndices.Any() &&
|
||||||
|
SelectedWatches.All(w => w.Domain.CanPoke());
|
||||||
|
|
||||||
PauseMenuItem.Text = _paused ? "Unpause" : "Pause";
|
PauseMenuItem.Text = _paused ? "Unpause" : "Pause";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1008,6 +1011,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Separator6.Visible =
|
Separator6.Visible =
|
||||||
indexes.Count > 0;
|
indexes.Count > 0;
|
||||||
|
|
||||||
|
PokeContextMenuItem.Enabled =
|
||||||
|
SelectedIndices.Any() &&
|
||||||
|
SelectedWatches.All(w => w.Domain.CanPoke());
|
||||||
|
|
||||||
var allCheats = _watches.All(x => Global.CheatList.IsActive(x.Domain, x.Address ?? 0));
|
var allCheats = _watches.All(x => Global.CheatList.IsActive(x.Domain, x.Address ?? 0));
|
||||||
|
|
||||||
if (allCheats)
|
if (allCheats)
|
||||||
|
|
|
@ -52,7 +52,13 @@ namespace BizHawk.Emulation.Common
|
||||||
delegate(long addr, byte val)
|
delegate(long addr, byte val)
|
||||||
{
|
{
|
||||||
if (writable)
|
if (writable)
|
||||||
|
{
|
||||||
data[addr] = val;
|
data[addr] = val;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,6 +163,27 @@ namespace BizHawk.Emulation.Common.IEmulatorExtensions
|
||||||
return (IDisassemblable)core.ServiceProvider.GetService<IDisassemblable>();
|
return (IDisassemblable)core.ServiceProvider.GetService<IDisassemblable>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool CanPoke(this MemoryDomain d)
|
||||||
|
{
|
||||||
|
if (d.PokeByte == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d.PokeByte(0, d.PeekByte(0));
|
||||||
|
}
|
||||||
|
catch (NotImplementedException)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: a better place for these
|
// TODO: a better place for these
|
||||||
public static bool IsImplemented(this MethodInfo info)
|
public static bool IsImplemented(this MethodInfo info)
|
||||||
{
|
{
|
||||||
|
|
|
@ -228,7 +228,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
||||||
|
|
||||||
public MemoryDomain GetDiskPeeker()
|
public MemoryDomain GetDiskPeeker()
|
||||||
{
|
{
|
||||||
return new MemoryDomain("FDS SIDE", diskdrive.NumBytes, MemoryDomain.Endian.Little, diskdrive.PeekData, null); // silent poke fail TODO: don't pass null! Throw a not implemented exception, handle this exception in ram tools
|
return new MemoryDomain("FDS SIDE", diskdrive.NumBytes, MemoryDomain.Endian.Little, diskdrive.PeekData, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetIRQ()
|
void SetIRQ()
|
||||||
|
|
Loading…
Reference in New Issue