xref: /aosp_15_r20/external/capstone/arch/M680X/M680XModule.c (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 #ifdef CAPSTONE_HAS_M680X
5*9a0e4156SSadaf Ebrahimi 
6*9a0e4156SSadaf Ebrahimi #include "../../utils.h"
7*9a0e4156SSadaf Ebrahimi #include "../../MCRegisterInfo.h"
8*9a0e4156SSadaf Ebrahimi #include "M680XDisassembler.h"
9*9a0e4156SSadaf Ebrahimi #include "M680XDisassemblerInternals.h"
10*9a0e4156SSadaf Ebrahimi #include "M680XInstPrinter.h"
11*9a0e4156SSadaf Ebrahimi #include "M680XModule.h"
12*9a0e4156SSadaf Ebrahimi 
M680X_global_init(cs_struct * ud)13*9a0e4156SSadaf Ebrahimi cs_err M680X_global_init(cs_struct *ud)
14*9a0e4156SSadaf Ebrahimi {
15*9a0e4156SSadaf Ebrahimi 	m680x_info *info;
16*9a0e4156SSadaf Ebrahimi 	cs_err errcode;
17*9a0e4156SSadaf Ebrahimi 
18*9a0e4156SSadaf Ebrahimi 	/* Do some validation checks */
19*9a0e4156SSadaf Ebrahimi 	errcode = M680X_disassembler_init(ud);
20*9a0e4156SSadaf Ebrahimi 
21*9a0e4156SSadaf Ebrahimi 	if (errcode != CS_ERR_OK)
22*9a0e4156SSadaf Ebrahimi 		return errcode;
23*9a0e4156SSadaf Ebrahimi 
24*9a0e4156SSadaf Ebrahimi 	errcode =  M680X_instprinter_init(ud);
25*9a0e4156SSadaf Ebrahimi 
26*9a0e4156SSadaf Ebrahimi 	if (errcode != CS_ERR_OK)
27*9a0e4156SSadaf Ebrahimi 		return errcode;
28*9a0e4156SSadaf Ebrahimi 
29*9a0e4156SSadaf Ebrahimi 	// verify if requested mode is valid
30*9a0e4156SSadaf Ebrahimi 	if (ud->mode & ~(CS_MODE_M680X_6800 | CS_MODE_M680X_6801 |
31*9a0e4156SSadaf Ebrahimi 			CS_MODE_M680X_6805 | CS_MODE_M680X_6808 |
32*9a0e4156SSadaf Ebrahimi 			CS_MODE_M680X_6809 | CS_MODE_M680X_6811 |
33*9a0e4156SSadaf Ebrahimi 			CS_MODE_M680X_6301 | CS_MODE_M680X_6309 |
34*9a0e4156SSadaf Ebrahimi 			CS_MODE_M680X_CPU12 | CS_MODE_M680X_HCS08)) {
35*9a0e4156SSadaf Ebrahimi 		// At least one mode is not supported by M680X
36*9a0e4156SSadaf Ebrahimi 		return CS_ERR_MODE;
37*9a0e4156SSadaf Ebrahimi 	}
38*9a0e4156SSadaf Ebrahimi 
39*9a0e4156SSadaf Ebrahimi 	if (!(ud->mode & (CS_MODE_M680X_6800 | CS_MODE_M680X_6801 |
40*9a0e4156SSadaf Ebrahimi 				CS_MODE_M680X_6805 | CS_MODE_M680X_6808 |
41*9a0e4156SSadaf Ebrahimi 				CS_MODE_M680X_6809 | CS_MODE_M680X_6811 |
42*9a0e4156SSadaf Ebrahimi 				CS_MODE_M680X_6301 | CS_MODE_M680X_6309 |
43*9a0e4156SSadaf Ebrahimi 				CS_MODE_M680X_CPU12 | CS_MODE_M680X_HCS08))) {
44*9a0e4156SSadaf Ebrahimi 		// At least the cpu type has to be selected. No default.
45*9a0e4156SSadaf Ebrahimi 		return CS_ERR_MODE;
46*9a0e4156SSadaf Ebrahimi 	}
47*9a0e4156SSadaf Ebrahimi 
48*9a0e4156SSadaf Ebrahimi 	info = cs_mem_malloc(sizeof(m680x_info));
49*9a0e4156SSadaf Ebrahimi 
50*9a0e4156SSadaf Ebrahimi 	if (!info)
51*9a0e4156SSadaf Ebrahimi 		return CS_ERR_MEM;
52*9a0e4156SSadaf Ebrahimi 
53*9a0e4156SSadaf Ebrahimi 	ud->printer = M680X_printInst;
54*9a0e4156SSadaf Ebrahimi 	ud->printer_info = info;
55*9a0e4156SSadaf Ebrahimi 	ud->getinsn_info = NULL;
56*9a0e4156SSadaf Ebrahimi 	ud->disasm = M680X_getInstruction;
57*9a0e4156SSadaf Ebrahimi 	ud->reg_name = M680X_reg_name;
58*9a0e4156SSadaf Ebrahimi 	ud->insn_id = M680X_get_insn_id;
59*9a0e4156SSadaf Ebrahimi 	ud->insn_name = M680X_insn_name;
60*9a0e4156SSadaf Ebrahimi 	ud->group_name = M680X_group_name;
61*9a0e4156SSadaf Ebrahimi 	ud->skipdata_size = 1;
62*9a0e4156SSadaf Ebrahimi 	ud->post_printer = NULL;
63*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
64*9a0e4156SSadaf Ebrahimi 	ud->reg_access = M680X_reg_access;
65*9a0e4156SSadaf Ebrahimi #endif
66*9a0e4156SSadaf Ebrahimi 
67*9a0e4156SSadaf Ebrahimi 	return CS_ERR_OK;
68*9a0e4156SSadaf Ebrahimi }
69*9a0e4156SSadaf Ebrahimi 
M680X_option(cs_struct * handle,cs_opt_type type,size_t value)70*9a0e4156SSadaf Ebrahimi cs_err M680X_option(cs_struct *handle, cs_opt_type type, size_t value)
71*9a0e4156SSadaf Ebrahimi {
72*9a0e4156SSadaf Ebrahimi 	//TODO
73*9a0e4156SSadaf Ebrahimi 	return CS_ERR_OK;
74*9a0e4156SSadaf Ebrahimi }
75*9a0e4156SSadaf Ebrahimi 
76*9a0e4156SSadaf Ebrahimi #endif
77*9a0e4156SSadaf Ebrahimi 
78