Mesen-SX/Core/Debugger.h

96 lines
2.6 KiB
C
Raw Normal View History

#pragma once
#include "stdafx.h"
#include "CpuTypes.h"
#include "PpuTypes.h"
#include "DebugTypes.h"
2019-02-15 21:33:13 -05:00
class Console;
class Cpu;
class Ppu;
2019-02-15 21:33:13 -05:00
class BaseCartridge;
class MemoryManager;
class TraceLogger;
2019-02-27 20:33:56 -05:00
class ExpressionEvaluator;
2019-02-15 21:33:13 -05:00
class MemoryDumper;
class Disassembler;
2019-03-01 20:27:49 -05:00
class BreakpointManager;
2019-03-03 16:34:23 -05:00
class PpuTools;
2019-03-07 20:12:32 -05:00
class CodeDataLogger;
class EventManager;
2019-03-24 12:05:51 -04:00
class CallstackManager;
2019-03-07 20:12:32 -05:00
enum class EventType;
enum class EvalResultType : int32_t;
class Debugger
{
private:
shared_ptr<Console> _console;
shared_ptr<Cpu> _cpu;
shared_ptr<Ppu> _ppu;
shared_ptr<MemoryManager> _memoryManager;
2019-02-15 21:33:13 -05:00
shared_ptr<BaseCartridge> _baseCartridge;
shared_ptr<TraceLogger> _traceLogger;
2019-02-15 21:33:13 -05:00
shared_ptr<MemoryDumper> _memoryDumper;
shared_ptr<CodeDataLogger> _codeDataLogger;
shared_ptr<Disassembler> _disassembler;
2019-03-01 20:27:49 -05:00
shared_ptr<BreakpointManager> _breakpointManager;
2019-03-03 16:34:23 -05:00
shared_ptr<PpuTools> _ppuTools;
2019-03-07 20:12:32 -05:00
shared_ptr<EventManager> _eventManager;
2019-03-24 12:05:51 -04:00
shared_ptr<CallstackManager> _callstackManager;
2019-02-27 20:33:56 -05:00
unique_ptr<ExpressionEvaluator> _watchExpEval;
2019-03-07 20:12:32 -05:00
atomic<bool> _executionStopped;
atomic<uint32_t> _breakRequestCount;
atomic<int32_t> _cpuStepCount;
atomic<int32_t> _ppuStepCount;
atomic<int32_t> _breakAddress;
2019-03-24 12:05:51 -04:00
uint8_t _prevOpCode = 0;
2019-03-24 12:05:51 -04:00
uint32_t _prevProgramCounter = 0;
void SleepUntilResume();
void ProcessStepConditions(uint8_t opCode, uint32_t currentPc);
2019-03-24 12:05:51 -04:00
void ProcessBreakConditions(MemoryOperationInfo &operation, AddressInfo &addressInfo);
public:
2019-02-15 21:33:13 -05:00
Debugger(shared_ptr<Console> console);
~Debugger();
void Release();
void ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type);
void ProcessCpuWrite(uint32_t addr, uint8_t value, MemoryOperationType type);
2019-03-01 20:27:49 -05:00
void ProcessWorkRamRead(uint32_t addr, uint8_t value);
void ProcessWorkRamWrite(uint32_t addr, uint8_t value);
void ProcessPpuRead(uint16_t addr, uint8_t value, SnesMemoryType memoryType);
void ProcessPpuWrite(uint16_t addr, uint8_t value, SnesMemoryType memoryType);
2019-03-03 16:34:23 -05:00
void ProcessPpuCycle();
2019-03-01 20:27:49 -05:00
void ProcessInterrupt(uint32_t originalPc, uint32_t currentPc, bool forNmi);
2019-03-07 20:12:32 -05:00
void ProcessEvent(EventType type);
2019-03-01 20:27:49 -05:00
2019-02-27 20:33:56 -05:00
int32_t EvaluateExpression(string expression, EvalResultType &resultType, bool useCache);
void Run();
void Step(int32_t stepCount, StepType type = StepType::CpuStep);
bool IsExecutionStopped();
2019-03-07 20:12:32 -05:00
void BreakRequest(bool release);
2019-03-01 20:27:49 -05:00
void GetState(DebugState &state);
shared_ptr<TraceLogger> GetTraceLogger();
2019-02-15 21:33:13 -05:00
shared_ptr<MemoryDumper> GetMemoryDumper();
shared_ptr<Disassembler> GetDisassembler();
2019-03-01 20:27:49 -05:00
shared_ptr<BreakpointManager> GetBreakpointManager();
2019-03-03 16:34:23 -05:00
shared_ptr<PpuTools> GetPpuTools();
2019-03-07 20:12:32 -05:00
shared_ptr<EventManager> GetEventManager();
2019-03-24 12:05:51 -04:00
shared_ptr<CallstackManager> GetCallstackManager();
2019-03-07 20:12:32 -05:00
shared_ptr<Console> GetConsole();
};