1*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */ 2*9a0e4156SSadaf Ebrahimi /* M680X Backend by Wolfgang Schwotzer <[email protected]> 2017 */ 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf Ebrahimi #ifndef CS_M680XDISASSEMBLERINTERNALS_H 5*9a0e4156SSadaf Ebrahimi #define CS_M680XDISASSEMBLERINTERNALS_H 6*9a0e4156SSadaf Ebrahimi 7*9a0e4156SSadaf Ebrahimi #include "../../MCInst.h" 8*9a0e4156SSadaf Ebrahimi #include "../../include/capstone/m680x.h" 9*9a0e4156SSadaf Ebrahimi 10*9a0e4156SSadaf Ebrahimi typedef enum e_cpu_type { 11*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_INVALID, 12*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6301, // M680X Hitachi HD6301,HD6303 mode 13*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6309, // M680X Hitachi HD6309 mode 14*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6800, // M680X Motorola 6800,6802 mode 15*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6801, // M680X Motorola 6801,6803 mode 16*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6805, // M680X Motorola/Freescale M68HC05 mode 17*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6808, // M680X Motorola/Freescale M68HC08 mode 18*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6809, // M680X Motorola 6809 mode 19*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_6811, // M680X Motorola/Freescale M68HC11 mode 20*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_CPU12, // M680X Motorola/Freescale CPU12 mode 21*9a0e4156SSadaf Ebrahimi // used on M68HC12/HCS12 22*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_HCS08, // M680X Freescale HCS08 mode 23*9a0e4156SSadaf Ebrahimi M680X_CPU_TYPE_ENDING, 24*9a0e4156SSadaf Ebrahimi } e_cpu_type; 25*9a0e4156SSadaf Ebrahimi 26*9a0e4156SSadaf Ebrahimi struct inst_page1; 27*9a0e4156SSadaf Ebrahimi struct inst_pageX; 28*9a0e4156SSadaf Ebrahimi 29*9a0e4156SSadaf Ebrahimi typedef struct { 30*9a0e4156SSadaf Ebrahimi const struct inst_page1 *inst_page1_table; 31*9a0e4156SSadaf Ebrahimi const struct inst_pageX *inst_overlay_table[2]; 32*9a0e4156SSadaf Ebrahimi size_t overlay_table_size[2]; 33*9a0e4156SSadaf Ebrahimi uint8_t pageX_prefix[3]; 34*9a0e4156SSadaf Ebrahimi const struct inst_pageX *inst_pageX_table[3]; 35*9a0e4156SSadaf Ebrahimi size_t pageX_table_size[3]; 36*9a0e4156SSadaf Ebrahimi const uint8_t *reg_byte_size; 37*9a0e4156SSadaf Ebrahimi const bool *tfr_reg_valid; 38*9a0e4156SSadaf Ebrahimi m680x_insn insn_cc_not_modified[2]; 39*9a0e4156SSadaf Ebrahimi } cpu_tables; 40*9a0e4156SSadaf Ebrahimi 41*9a0e4156SSadaf Ebrahimi /* Private, For internal use only */ 42*9a0e4156SSadaf Ebrahimi typedef struct m680x_info { 43*9a0e4156SSadaf Ebrahimi const uint8_t *code; // code buffer 44*9a0e4156SSadaf Ebrahimi uint32_t size; // byte size of code 45*9a0e4156SSadaf Ebrahimi uint16_t offset; // address offset of first byte in code buffer 46*9a0e4156SSadaf Ebrahimi e_cpu_type cpu_type; // The CPU type to be used for disassembling 47*9a0e4156SSadaf Ebrahimi cs_m680x m680x; // M680X specific properties 48*9a0e4156SSadaf Ebrahimi const cpu_tables *cpu; 49*9a0e4156SSadaf Ebrahimi m680x_insn insn; // Instruction ID 50*9a0e4156SSadaf Ebrahimi uint8_t insn_size; // byte size of instruction 51*9a0e4156SSadaf Ebrahimi } m680x_info; 52*9a0e4156SSadaf Ebrahimi 53*9a0e4156SSadaf Ebrahimi extern cs_err M680X_disassembler_init(cs_struct *ud); 54*9a0e4156SSadaf Ebrahimi extern cs_err M680X_instprinter_init(cs_struct *ud); 55*9a0e4156SSadaf Ebrahimi 56*9a0e4156SSadaf Ebrahimi #endif 57*9a0e4156SSadaf Ebrahimi 58