2019-02-12 22:13:09 -05:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "CpuTypes.h"
|
2019-02-13 13:32:21 -05:00
|
|
|
#include "PpuTypes.h"
|
2019-03-24 16:42:52 -04:00
|
|
|
#include "DebugTypes.h"
|
2019-02-12 22:13:09 -05:00
|
|
|
|
2019-02-15 21:33:13 -05:00
|
|
|
class Console;
|
2019-02-12 22:13:09 -05:00
|
|
|
class Cpu;
|
2019-02-13 13:32:21 -05:00
|
|
|
class Ppu;
|
2019-02-15 21:33:13 -05:00
|
|
|
class BaseCartridge;
|
2019-02-12 22:13:09 -05:00
|
|
|
class MemoryManager;
|
|
|
|
|
|
|
|
class TraceLogger;
|
2019-02-27 20:33:56 -05:00
|
|
|
class ExpressionEvaluator;
|
2019-02-15 21:33:13 -05:00
|
|
|
class MemoryDumper;
|
2019-02-27 19:49:26 -05:00
|
|
|
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;
|
|
|
|
|
2019-02-12 22:13:09 -05:00
|
|
|
class Debugger
|
|
|
|
{
|
|
|
|
private:
|
2019-02-16 08:10:08 -05:00
|
|
|
shared_ptr<Console> _console;
|
2019-02-12 22:13:09 -05:00
|
|
|
shared_ptr<Cpu> _cpu;
|
2019-02-13 13:32:21 -05:00
|
|
|
shared_ptr<Ppu> _ppu;
|
2019-02-12 22:13:09 -05:00
|
|
|
shared_ptr<MemoryManager> _memoryManager;
|
2019-02-15 21:33:13 -05:00
|
|
|
shared_ptr<BaseCartridge> _baseCartridge;
|
2019-02-12 22:13:09 -05:00
|
|
|
|
|
|
|
shared_ptr<TraceLogger> _traceLogger;
|
2019-02-15 21:33:13 -05:00
|
|
|
shared_ptr<MemoryDumper> _memoryDumper;
|
2019-02-27 19:49:26 -05:00
|
|
|
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-12 22:13:09 -05:00
|
|
|
|
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;
|
|
|
|
|
2019-02-12 22:13:09 -05:00
|
|
|
atomic<int32_t> _cpuStepCount;
|
2019-03-24 16:42:52 -04:00
|
|
|
atomic<int32_t> _ppuStepCount;
|
|
|
|
atomic<int32_t> _breakAddress;
|
2019-03-24 12:05:51 -04:00
|
|
|
|
2019-02-27 19:49:26 -05:00
|
|
|
uint8_t _prevOpCode = 0;
|
2019-03-24 12:05:51 -04:00
|
|
|
uint32_t _prevProgramCounter = 0;
|
|
|
|
|
2019-03-24 16:42:52 -04:00
|
|
|
void SleepUntilResume();
|
|
|
|
void ProcessStepConditions(uint8_t opCode, uint32_t currentPc);
|
2019-03-24 12:05:51 -04:00
|
|
|
void ProcessBreakConditions(MemoryOperationInfo &operation, AddressInfo &addressInfo);
|
2019-02-12 22:13:09 -05:00
|
|
|
|
|
|
|
public:
|
2019-02-15 21:33:13 -05:00
|
|
|
Debugger(shared_ptr<Console> console);
|
2019-02-12 22:13:09 -05:00
|
|
|
~Debugger();
|
2019-03-16 12:20:18 -04:00
|
|
|
void Release();
|
2019-02-12 22:13:09 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
2019-03-24 16:42:52 -04: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);
|
|
|
|
|
2019-02-12 22:13:09 -05:00
|
|
|
void Run();
|
2019-03-24 16:42:52 -04:00
|
|
|
void Step(int32_t stepCount, StepType type = StepType::CpuStep);
|
2019-02-12 22:13:09 -05:00
|
|
|
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);
|
2019-02-13 13:32:21 -05:00
|
|
|
|
2019-02-12 22:13:09 -05:00
|
|
|
shared_ptr<TraceLogger> GetTraceLogger();
|
2019-02-15 21:33:13 -05:00
|
|
|
shared_ptr<MemoryDumper> GetMemoryDumper();
|
2019-02-27 19:49:26 -05:00
|
|
|
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();
|
2019-02-12 22:13:09 -05:00
|
|
|
};
|