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

33 lines
1.4 KiB
C++

#pragma once
#include "pch.h"
#include "Debugger/DebugTypes.h"
class GbaConsole;
class LabelManager;
class EmuSettings;
class FastString;
struct GbaCpuState;
class GbaDisUtils
{
private:
static void ArmDisassemble(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager, EmuSettings* settings);
static void ThumbDisassemble(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager, EmuSettings* settings);
static void WriteRegList(FastString& str, uint16_t regMask, uint8_t size);
static void WriteReg(FastString& str, uint8_t reg);
static void WriteCond(FastString& str, uint32_t opCode);
static bool IsArmBranch(uint32_t opCode);
public:
static void GetDisassembly(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager, EmuSettings* settings);
static EffectiveAddressInfo GetEffectiveAddress(DisassemblyInfo& info, GbaConsole* console, GbaCpuState& state);
static uint8_t GetOpSize(uint32_t opCode, uint8_t flags);
static bool IsJumpToSub(uint32_t opCode, uint8_t flags);
static bool IsReturnInstruction(uint32_t opCode, uint8_t flags);
static bool IsUnconditionalJump(uint32_t opCode, uint8_t flags);
static bool IsConditionalJump(uint32_t opCode, uint8_t flags);
static CdlFlags::CdlFlags GetOpFlags(uint32_t opCode, uint8_t flags, uint32_t pc, uint32_t prevPc);
static bool IsThumbMode(uint8_t flags);
};