Resolve TODO re: memoisation in `GenericDebugger`

This commit is contained in:
YoshiRulz 2023-04-23 17:06:07 +10:00
parent 4b001a48a9
commit c5d6a66e01
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
1 changed files with 51 additions and 78 deletions

View File

@ -21,108 +21,80 @@ namespace BizHawk.Client.EmuHawk
private RegisterValue PCRegister => Debuggable.GetCpuFlagsAndRegisters()[Disassembler.PCRegisterName]; private RegisterValue PCRegister => Debuggable.GetCpuFlagsAndRegisters()[Disassembler.PCRegisterName];
// TODO: be cachey with checks that depend on catching exceptions private bool CanUseMemoryCallbacks = false;
private bool CanUseMemoryCallbacks
{
get
{
if (Debuggable != null)
{
try
{
var result = Debuggable.MemoryCallbacks.HasReads;
return true;
}
catch (NotImplementedException)
{
return false;
}
}
return false; private bool CanDisassemble = false;
private bool CanSetCpu = false;
private bool CanStepInto = false;
private bool CanStepOver = false;
private bool CanStepOut = false;
private void UpdateCapabilitiesProps()
{
try
{
_ = MemoryCallbacks.HasReads;
CanUseMemoryCallbacks = true;
} }
} catch (NotImplementedException)
private bool CanDisassemble
{
get
{ {
if (Disassembler == null) CanUseMemoryCallbacks = false;
{ }
return false;
}
if (Disassembler is null)
{
CanDisassemble = false;
CanSetCpu = false;
}
else
{
try try
{ {
var pc = (uint)PCRegister.Value; _ = (uint) PCRegister.Value;
return true; CanDisassemble = true;
} }
catch (NotImplementedException) catch (NotImplementedException)
{ {
return false; CanDisassemble = false;
} }
}
}
private bool CanSetCpu
{
get
{
try try
{ {
Disassembler.Cpu = Disassembler.Cpu; Disassembler.Cpu = Disassembler.Cpu;
return true; CanSetCpu = true;
} }
catch (NotImplementedException) catch (NotImplementedException)
{ {
return false; CanSetCpu = false;
} }
} }
}
private bool CanStepInto try
{
get
{ {
try CanStepInto = Debuggable.CanStep(StepType.Into);
{
return Debuggable.CanStep(StepType.Into);
}
catch (NotImplementedException)
{
return false;
}
} }
} catch (NotImplementedException)
private bool CanStepOver
{
get
{ {
try CanStepInto = false;
{
return Debuggable.CanStep(StepType.Over);
}
catch (NotImplementedException)
{
return false;
}
} }
} try
private bool CanStepOut
{
get
{ {
try CanStepOver = Debuggable.CanStep(StepType.Over);
{ }
return Debuggable.CanStep(StepType.Out); catch (NotImplementedException)
} {
catch (NotImplementedException) CanStepOver = false;
{ }
return false; try
} {
CanStepOut = Debuggable.CanStep(StepType.Out);
}
catch (NotImplementedException)
{
CanStepOut = false;
} }
} }
@ -136,6 +108,7 @@ namespace BizHawk.Client.EmuHawk
public override void Restart() public override void Restart()
{ {
UpdateCapabilitiesProps();
DisengageDebugger(); DisengageDebugger();
EngageDebugger(); EngageDebugger();
FullUpdate(); FullUpdate();