diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 649df62..d8b0570 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -73,6 +73,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index 93a0a63..0f3b24c 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -476,6 +476,9 @@
Misc
+
+ Debugger\Debuggers
+
diff --git a/Core/CpuDebugger.h b/Core/CpuDebugger.h
index f7fb455..14c6ac8 100644
--- a/Core/CpuDebugger.h
+++ b/Core/CpuDebugger.h
@@ -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;
diff --git a/Core/Debugger.cpp b/Core/Debugger.cpp
index d3a7cbc..1f15002 100644
--- a/Core/Debugger.cpp
+++ b/Core/Debugger.cpp
@@ -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;
}
diff --git a/Core/GsuDebugger.h b/Core/GsuDebugger.h
index 9a3b905..5d31bf2 100644
--- a/Core/GsuDebugger.h
+++ b/Core/GsuDebugger.h
@@ -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;
diff --git a/Core/IDebugger.h b/Core/IDebugger.h
new file mode 100644
index 0000000..0fc3384
--- /dev/null
+++ b/Core/IDebugger.h
@@ -0,0 +1,10 @@
+#pragma once
+#include "stdafx.h"
+
+enum class StepType;
+
+class IDebugger
+{
+public:
+ virtual void Step(int32_t stepCount, StepType type) = 0;
+};
\ No newline at end of file
diff --git a/Core/SpcDebugger.h b/Core/SpcDebugger.h
index 175bd44..f6cd360 100644
--- a/Core/SpcDebugger.h
+++ b/Core/SpcDebugger.h
@@ -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;