Mesen2/Core/GBA/Debugger/GbaEventManager.h
2024-03-30 11:42:31 +09:00

92 lines
2.7 KiB
C++

#pragma once
#include "pch.h"
#include "Debugger/DebugTypes.h"
#include "Debugger/BaseEventManager.h"
#include "Utilities/SimpleLock.h"
enum class DebugEventType;
struct DebugEventInfo;
class GbaCpu;
class GbaPpu;
class GbaMemoryManager;
class GbaDmaController;
class Debugger;
struct GbaEventViewerConfig : public BaseEventViewerConfig
{
EventViewerCategoryCfg Irq;
EventViewerCategoryCfg MarkedBreakpoints;
EventViewerCategoryCfg PaletteReads;
EventViewerCategoryCfg PaletteWrites;
EventViewerCategoryCfg VramReads;
EventViewerCategoryCfg VramWrites;
EventViewerCategoryCfg OamReads;
EventViewerCategoryCfg OamWrites;
EventViewerCategoryCfg PpuRegisterBgScrollReads;
EventViewerCategoryCfg PpuRegisterBgScrollWrites;
EventViewerCategoryCfg PpuRegisterWindowReads;
EventViewerCategoryCfg PpuRegisterWindowWrites;
EventViewerCategoryCfg PpuRegisterOtherReads;
EventViewerCategoryCfg PpuRegisterOtherWrites;
EventViewerCategoryCfg DmaRegisterReads;
EventViewerCategoryCfg DmaRegisterWrites;
EventViewerCategoryCfg ApuRegisterReads;
EventViewerCategoryCfg ApuRegisterWrites;
EventViewerCategoryCfg SerialReads;
EventViewerCategoryCfg SerialWrites;
EventViewerCategoryCfg TimerReads;
EventViewerCategoryCfg TimerWrites;
EventViewerCategoryCfg InputReads;
EventViewerCategoryCfg InputWrites;
EventViewerCategoryCfg OtherRegisterReads;
EventViewerCategoryCfg OtherRegisterWrites;
bool ShowPreviousFrameEvents;
};
class GbaEventManager final : public BaseEventManager
{
private:
static constexpr int ScanlineWidth = 308*4;
static constexpr int ScreenHeight = 228;
static constexpr int VBlankScanline = 160;
GbaEventViewerConfig _config = {};
GbaPpu* _ppu = nullptr;
GbaCpu* _cpu = nullptr;
GbaMemoryManager* _memoryManager = nullptr;
GbaDmaController* _dmaController = nullptr;
Debugger* _debugger = nullptr;
uint32_t _scanlineCount = GbaEventManager::ScreenHeight;
uint16_t* _ppuBuffer = nullptr;
protected:
bool ShowPreviousFrameEvents() override;
void ConvertScanlineCycleToRowColumn(int32_t& x, int32_t& y) override;
void DrawScreen(uint32_t* buffer) override;
public:
GbaEventManager(Debugger* debugger, GbaCpu* cpu, GbaPpu* ppu, GbaMemoryManager* memoryManager, GbaDmaController* dmaController);
~GbaEventManager();
void AddEvent(DebugEventType type, MemoryOperationInfo& operation, int32_t breakpointId = -1) override;
void AddEvent(DebugEventType type) override;
EventViewerCategoryCfg GetEventConfig(DebugEventInfo& evt) override;
uint32_t TakeEventSnapshot(bool forAutoRefresh) override;
DebugEventInfo GetEvent(uint16_t y, uint16_t x) override;
FrameInfo GetDisplayBufferSize() override;
void SetConfiguration(BaseEventViewerConfig& config) override;
};