#pragma once #include "stdafx.h" #include "CpuTypes.h" #include "PpuTypes.h" class Console; class Cpu; class Ppu; class BaseCartridge; class MemoryManager; class CodeDataLogger; enum class MemoryOperationType; class TraceLogger; class MemoryDumper; class Disassembler; struct DebugState { CpuState Cpu; PpuState Ppu; //ApuState apuState; }; class Debugger { private: shared_ptr _console; shared_ptr _cpu; shared_ptr _ppu; shared_ptr _memoryManager; shared_ptr _baseCartridge; shared_ptr _traceLogger; shared_ptr _memoryDumper; shared_ptr _codeDataLogger; shared_ptr _disassembler; atomic _cpuStepCount; uint8_t _prevOpCode = 0; public: Debugger(shared_ptr console); ~Debugger(); void ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type); void ProcessCpuWrite(uint32_t addr, uint8_t value, MemoryOperationType type); void Run(); void Step(int32_t stepCount); bool IsExecutionStopped(); void GetState(DebugState *state); shared_ptr GetTraceLogger(); shared_ptr GetMemoryDumper(); shared_ptr GetDisassembler(); };