#pragma once #include "stdafx.h" #include "DebugTypes.h" #include "IDebugger.h" class Disassembler; class Debugger; class TraceLogger; class Gameboy; class CallstackManager; class MemoryAccessCounter; class Console; class BreakpointManager; class EmuSettings; class GbEventManager; class GbAssembler; class CodeDataLogger; class GbDebugger final : public IDebugger { Debugger* _debugger; Console* _console; Disassembler* _disassembler; TraceLogger* _traceLogger; MemoryAccessCounter* _memoryAccessCounter; Gameboy* _gameboy; EmuSettings* _settings; shared_ptr _eventManager; shared_ptr _callstackManager; shared_ptr _codeDataLogger; unique_ptr _breakpointManager; unique_ptr _step; shared_ptr _assembler; uint8_t _prevOpCode = 0xFF; uint32_t _prevProgramCounter = 0; bool _enableBreakOnUninitRead = false; public: GbDebugger(Debugger* debugger); ~GbDebugger(); void Reset(); void ProcessRead(uint16_t addr, uint8_t value, MemoryOperationType type); void ProcessWrite(uint16_t addr, uint8_t value, MemoryOperationType type); void Run(); void Step(int32_t stepCount, StepType type); void ProcessInterrupt(uint32_t originalPc, uint32_t currentPc); void ProcessPpuCycle(uint16_t scanline, uint16_t cycle); shared_ptr GetEventManager(); shared_ptr GetAssembler(); shared_ptr GetCallstackManager(); shared_ptr GetCodeDataLogger(); BreakpointManager* GetBreakpointManager(); };