Path: blob/master/libs/capstone/include/capstone/mos65xx.h
5971 views
#ifndef CAPSTONE_MOS65XX_H1#define CAPSTONE_MOS65XX_H23/* Capstone Disassembly Engine */4/* By Sebastian Macke <[email protected], 2018 */56#ifdef __cplusplus7extern "C" {8#endif910#include "platform.h"1112/// MOS65XX registers and special registers13typedef enum mos65xx_reg {14MOS65XX_REG_INVALID = 0,15MOS65XX_REG_ACC, ///< accumulator16MOS65XX_REG_X, ///< X index register17MOS65XX_REG_Y, ///< Y index register18MOS65XX_REG_P, ///< status register19MOS65XX_REG_SP, ///< stack pointer register20MOS65XX_REG_DP, ///< direct page register21MOS65XX_REG_B, ///< data bank register22MOS65XX_REG_K, ///< program bank register23MOS65XX_REG_ENDING, // <-- mark the end of the list of registers24} mos65xx_reg;2526/// MOS65XX Addressing Modes27typedef enum mos65xx_address_mode {28MOS65XX_AM_NONE = 0, ///< No address mode.29MOS65XX_AM_IMP, ///< implied addressing (no addressing mode)30MOS65XX_AM_ACC, ///< accumulator addressing31MOS65XX_AM_IMM, ///< 8/16 Bit immediate value32MOS65XX_AM_REL, ///< relative addressing used by branches33MOS65XX_AM_INT, ///< interrupt addressing34MOS65XX_AM_BLOCK, ///< memory block addressing35MOS65XX_AM_ZP, ///< zeropage addressing36MOS65XX_AM_ZP_X, ///< indexed zeropage addressing by the X index register37MOS65XX_AM_ZP_Y, ///< indexed zeropage addressing by the Y index register38MOS65XX_AM_ZP_REL, ///< zero page address, branch relative address39MOS65XX_AM_ZP_IND, ///< indirect zeropage addressing40MOS65XX_AM_ZP_X_IND, ///< indexed zeropage indirect addressing by the X index register41MOS65XX_AM_ZP_IND_Y, ///< indirect zeropage indexed addressing by the Y index register42MOS65XX_AM_ZP_IND_LONG, ///< zeropage indirect long addressing43MOS65XX_AM_ZP_IND_LONG_Y, ///< zeropage indirect long addressing indexed by Y register44MOS65XX_AM_ABS, ///< absolute addressing45MOS65XX_AM_ABS_X, ///< indexed absolute addressing by the X index register46MOS65XX_AM_ABS_Y, ///< indexed absolute addressing by the Y index register47MOS65XX_AM_ABS_IND, ///< absolute indirect addressing48MOS65XX_AM_ABS_X_IND, ///< indexed absolute indirect addressing by the X index register49MOS65XX_AM_ABS_IND_LONG, ///< absolute indirect long addressing50MOS65XX_AM_ABS_LONG, ///< absolute long address mode51MOS65XX_AM_ABS_LONG_X, ///< absolute long address mode, indexed by X register52MOS65XX_AM_SR, ///< stack relative addressing53MOS65XX_AM_SR_IND_Y, ///< indirect stack relative addressing indexed by the Y index register54} mos65xx_address_mode;5556/// MOS65XX instruction57typedef enum mos65xx_insn {58MOS65XX_INS_INVALID = 0,59MOS65XX_INS_ADC,60MOS65XX_INS_AND,61MOS65XX_INS_ASL,62MOS65XX_INS_BBR,63MOS65XX_INS_BBS,64MOS65XX_INS_BCC,65MOS65XX_INS_BCS,66MOS65XX_INS_BEQ,67MOS65XX_INS_BIT,68MOS65XX_INS_BMI,69MOS65XX_INS_BNE,70MOS65XX_INS_BPL,71MOS65XX_INS_BRA,72MOS65XX_INS_BRK,73MOS65XX_INS_BRL,74MOS65XX_INS_BVC,75MOS65XX_INS_BVS,76MOS65XX_INS_CLC,77MOS65XX_INS_CLD,78MOS65XX_INS_CLI,79MOS65XX_INS_CLV,80MOS65XX_INS_CMP,81MOS65XX_INS_COP,82MOS65XX_INS_CPX,83MOS65XX_INS_CPY,84MOS65XX_INS_DEC,85MOS65XX_INS_DEX,86MOS65XX_INS_DEY,87MOS65XX_INS_EOR,88MOS65XX_INS_INC,89MOS65XX_INS_INX,90MOS65XX_INS_INY,91MOS65XX_INS_JML,92MOS65XX_INS_JMP,93MOS65XX_INS_JSL,94MOS65XX_INS_JSR,95MOS65XX_INS_LDA,96MOS65XX_INS_LDX,97MOS65XX_INS_LDY,98MOS65XX_INS_LSR,99MOS65XX_INS_MVN,100MOS65XX_INS_MVP,101MOS65XX_INS_NOP,102MOS65XX_INS_ORA,103MOS65XX_INS_PEA,104MOS65XX_INS_PEI,105MOS65XX_INS_PER,106MOS65XX_INS_PHA,107MOS65XX_INS_PHB,108MOS65XX_INS_PHD,109MOS65XX_INS_PHK,110MOS65XX_INS_PHP,111MOS65XX_INS_PHX,112MOS65XX_INS_PHY,113MOS65XX_INS_PLA,114MOS65XX_INS_PLB,115MOS65XX_INS_PLD,116MOS65XX_INS_PLP,117MOS65XX_INS_PLX,118MOS65XX_INS_PLY,119MOS65XX_INS_REP,120MOS65XX_INS_RMB,121MOS65XX_INS_ROL,122MOS65XX_INS_ROR,123MOS65XX_INS_RTI,124MOS65XX_INS_RTL,125MOS65XX_INS_RTS,126MOS65XX_INS_SBC,127MOS65XX_INS_SEC,128MOS65XX_INS_SED,129MOS65XX_INS_SEI,130MOS65XX_INS_SEP,131MOS65XX_INS_SMB,132MOS65XX_INS_STA,133MOS65XX_INS_STP,134MOS65XX_INS_STX,135MOS65XX_INS_STY,136MOS65XX_INS_STZ,137MOS65XX_INS_TAX,138MOS65XX_INS_TAY,139MOS65XX_INS_TCD,140MOS65XX_INS_TCS,141MOS65XX_INS_TDC,142MOS65XX_INS_TRB,143MOS65XX_INS_TSB,144MOS65XX_INS_TSC,145MOS65XX_INS_TSX,146MOS65XX_INS_TXA,147MOS65XX_INS_TXS,148MOS65XX_INS_TXY,149MOS65XX_INS_TYA,150MOS65XX_INS_TYX,151MOS65XX_INS_WAI,152MOS65XX_INS_WDM,153MOS65XX_INS_XBA,154MOS65XX_INS_XCE,155MOS65XX_INS_ENDING, // <-- mark the end of the list of instructions156} mos65xx_insn;157158/// Group of MOS65XX instructions159typedef enum mos65xx_group_type {160MOS65XX_GRP_INVALID = 0, ///< CS_GRP_INVALID161MOS65XX_GRP_JUMP, ///< = CS_GRP_JUMP162MOS65XX_GRP_CALL, ///< = CS_GRP_RET163MOS65XX_GRP_RET, ///< = CS_GRP_RET164MOS65XX_GRP_INT, ///< = CS_GRP_INT165MOS65XX_GRP_IRET = 5, ///< = CS_GRP_IRET166MOS65XX_GRP_BRANCH_RELATIVE = 6, ///< = CS_GRP_BRANCH_RELATIVE167MOS65XX_GRP_ENDING,// <-- mark the end of the list of groups168} mos65xx_group_type;169170/// Operand type for instruction's operands171typedef enum mos65xx_op_type {172MOS65XX_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized).173MOS65XX_OP_REG, ///< = CS_OP_REG (Register operand).174MOS65XX_OP_IMM, ///< = CS_OP_IMM (Immediate operand).175MOS65XX_OP_MEM, ///< = CS_OP_MEM (Memory operand).176} mos65xx_op_type;177178/// Instruction operand179typedef struct cs_mos65xx_op {180mos65xx_op_type type; ///< operand type181union {182mos65xx_reg reg; ///< register value for REG operand183uint16_t imm; ///< immediate value for IMM operand184uint32_t mem; ///< address for MEM operand185};186} cs_mos65xx_op;187188/// The MOS65XX address mode and it's operands189typedef struct cs_mos65xx {190mos65xx_address_mode am;191bool modifies_flags;192193/// Number of operands of this instruction,194/// or 0 when instruction has no operand.195uint8_t op_count;196cs_mos65xx_op operands[3]; ///< operands for this instruction.197} cs_mos65xx;198199#ifdef __cplusplus200}201#endif202203#endif //CAPSTONE_MOS65XX_H204205206