Debugger: Fixed not being able to stop execution after STP instruction
This commit is contained in:
parent
d2463c6c2f
commit
aa3975aa1e
7 changed files with 47 additions and 24 deletions
|
@ -73,6 +73,7 @@
|
|||
<ClInclude Include="GsuRomHandler.h" />
|
||||
<ClInclude Include="GsuTypes.h" />
|
||||
<ClInclude Include="HandShakeMessage.h" />
|
||||
<ClInclude Include="IDebugger.h" />
|
||||
<ClInclude Include="InputDataMessage.h" />
|
||||
<ClInclude Include="InputHud.h" />
|
||||
<ClInclude Include="InternalRegisterTypes.h" />
|
||||
|
|
|
@ -476,6 +476,9 @@
|
|||
<ClInclude Include="RomFinder.h">
|
||||
<Filter>Misc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="IDebugger.h">
|
||||
<Filter>Debugger\Debuggers</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp" />
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "DebugTypes.h"
|
||||
#include "IDebugger.h"
|
||||
|
||||
class Disassembler;
|
||||
class Debugger;
|
||||
|
@ -17,7 +18,7 @@ class MemoryMappings;
|
|||
class BreakpointManager;
|
||||
class Sa1;
|
||||
|
||||
class CpuDebugger
|
||||
class CpuDebugger : public IDebugger
|
||||
{
|
||||
Debugger* _debugger;
|
||||
Disassembler* _disassembler;
|
||||
|
|
|
@ -339,35 +339,41 @@ void Debugger::Run()
|
|||
void Debugger::Step(CpuType cpuType, int32_t stepCount, StepType type)
|
||||
{
|
||||
StepRequest step;
|
||||
|
||||
_cpuDebugger->Run();
|
||||
_spcDebugger->Run();
|
||||
if(_sa1Debugger) {
|
||||
_sa1Debugger->Run();
|
||||
}
|
||||
if(_gsuDebugger) {
|
||||
_gsuDebugger->Run();
|
||||
}
|
||||
IDebugger *debugger = nullptr;
|
||||
|
||||
switch(type) {
|
||||
case StepType::PpuStep: step.PpuStepCount = stepCount; break;
|
||||
case StepType::SpecificScanline: step.BreakScanline = stepCount; break;
|
||||
|
||||
default:
|
||||
case StepType::PpuStep: step.PpuStepCount = stepCount; _step.reset(new StepRequest(step)); break;
|
||||
case StepType::SpecificScanline: step.BreakScanline = stepCount; _step.reset(new StepRequest(step)); break;
|
||||
default:
|
||||
switch(cpuType) {
|
||||
case CpuType::Cpu: _cpuDebugger->Step(stepCount, type); break;
|
||||
case CpuType::Spc: _spcDebugger->Step(stepCount, type); break;
|
||||
case CpuType::Sa1: _sa1Debugger->Step(stepCount, type); break;
|
||||
case CpuType::Gsu: _gsuDebugger->Step(stepCount, type); break;
|
||||
|
||||
case CpuType::NecDsp:
|
||||
case CpuType::Cx4:
|
||||
case CpuType::Cpu: debugger = _cpuDebugger.get(); break;
|
||||
case CpuType::Spc: debugger = _spcDebugger.get(); break;
|
||||
case CpuType::Sa1: debugger = _sa1Debugger.get(); break;
|
||||
case CpuType::Gsu: debugger = _gsuDebugger.get(); break;
|
||||
case CpuType::NecDsp:
|
||||
case CpuType::Cx4:
|
||||
throw std::runtime_error("Step(): Unsupported CPU type.");
|
||||
}
|
||||
debugger->Step(stepCount, type);
|
||||
break;
|
||||
}
|
||||
|
||||
_step.reset(new StepRequest(step));
|
||||
if(!debugger) {
|
||||
_step.reset(new StepRequest(step));
|
||||
}
|
||||
if(debugger != _cpuDebugger.get()) {
|
||||
_cpuDebugger->Run();
|
||||
}
|
||||
if(debugger != _spcDebugger.get()) {
|
||||
_spcDebugger->Run();
|
||||
}
|
||||
if(_sa1Debugger && debugger != _sa1Debugger.get()) {
|
||||
_sa1Debugger->Run();
|
||||
}
|
||||
if(_gsuDebugger && debugger != _gsuDebugger.get()) {
|
||||
_gsuDebugger->Run();
|
||||
}
|
||||
|
||||
_waitForBreakResume = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "DebugTypes.h"
|
||||
#include "IDebugger.h"
|
||||
|
||||
class Disassembler;
|
||||
class Debugger;
|
||||
|
@ -11,7 +12,7 @@ class MemoryManager;
|
|||
class BreakpointManager;
|
||||
class EmuSettings;
|
||||
|
||||
class GsuDebugger
|
||||
class GsuDebugger : public IDebugger
|
||||
{
|
||||
Debugger* _debugger;
|
||||
Disassembler* _disassembler;
|
||||
|
|
10
Core/IDebugger.h
Normal file
10
Core/IDebugger.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
|
||||
enum class StepType;
|
||||
|
||||
class IDebugger
|
||||
{
|
||||
public:
|
||||
virtual void Step(int32_t stepCount, StepType type) = 0;
|
||||
};
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "DebugTypes.h"
|
||||
#include "IDebugger.h"
|
||||
|
||||
class Disassembler;
|
||||
class Debugger;
|
||||
|
@ -12,7 +13,7 @@ class MemoryManager;
|
|||
class BreakpointManager;
|
||||
class EmuSettings;
|
||||
|
||||
class SpcDebugger
|
||||
class SpcDebugger : public IDebugger
|
||||
{
|
||||
Debugger* _debugger;
|
||||
Disassembler* _disassembler;
|
||||
|
|
Loading…
Add table
Reference in a new issue