xref: /aosp_15_r20/external/capstone/arch/M680X/M680XDisassemblerInternals.h (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
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