69 lines
1.2 KiB
C++
69 lines
1.2 KiB
C++
#pragma once
|
|
#include "stdafx.h"
|
|
|
|
class DisassemblyInfo;
|
|
class Console;
|
|
class LabelManager;
|
|
class EmuSettings;
|
|
struct CpuState;
|
|
enum class CpuType : uint8_t;
|
|
enum class AddrMode : uint8_t;
|
|
|
|
class CpuDisUtils
|
|
{
|
|
private:
|
|
static uint8_t OpSize[0x1F];
|
|
static uint32_t GetOperandAddress(DisassemblyInfo& info, uint32_t memoryAddr);
|
|
static uint8_t GetOpSize(AddrMode addrMode, uint8_t flags);
|
|
|
|
static bool HasEffectiveAddress(AddrMode addrMode);
|
|
|
|
public:
|
|
static string OpName[256];
|
|
static AddrMode OpMode[256];
|
|
|
|
static void GetDisassembly(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager,
|
|
EmuSettings* settings);
|
|
static uint8_t GetOpSize(uint8_t opCode, uint8_t flags);
|
|
static int32_t GetEffectiveAddress(DisassemblyInfo& info, Console* console, CpuState& state, CpuType type);
|
|
};
|
|
|
|
enum class AddrMode : uint8_t
|
|
{
|
|
Sig8,
|
|
Imm8,
|
|
Imm16,
|
|
ImmX,
|
|
ImmM,
|
|
Abs,
|
|
AbsIdxXInd,
|
|
//JMP/JSR only
|
|
AbsIdxX,
|
|
AbsIdxY,
|
|
AbsInd,
|
|
//JMP only
|
|
AbsIndLng,
|
|
//JML only
|
|
AbsLngIdxX,
|
|
AbsLng,
|
|
AbsJmp,
|
|
//JSR/JMP only
|
|
AbsLngJmp,
|
|
//JSL/JMP only
|
|
Acc,
|
|
BlkMov,
|
|
DirIdxIndX,
|
|
DirIdxX,
|
|
DirIdxY,
|
|
DirIndIdxY,
|
|
DirIndLngIdxY,
|
|
DirIndLng,
|
|
DirInd,
|
|
Dir,
|
|
Imp,
|
|
RelLng,
|
|
Rel,
|
|
Stk,
|
|
StkRel,
|
|
StkRelIndIdxY
|
|
};
|