#pragma once #include "stdafx.h" #include "CpuTypes.h" #include "PpuTypes.h" class Console; class Cpu; class Ppu; class BaseCartridge; class MemoryManager; 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; //unique_ptr _disassembler; atomic _cpuStepCount; 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(); };