1 #ifndef R2_H8300_DISAS_H
2 #define R2_H8300_DISAS_H
3 
4 #include <stdint.h>
5 
6 enum h8300_4bit_opcodes{
7 	H8300_MOV_4BIT_2	= 0x2,
8 	H8300_MOV_4BIT_3	= 0x3,
9 	H8300_ADD_4BIT		= 0x8,
10 	H8300_ADDX_4BIT		= 0x9,
11 	H8300_CMP_4BIT		= 0xA,
12 	H8300_SUBX_4BIT		= 0xB,
13 	H8300_OR_4BIT		= 0xC,
14 	H8300_XOR_4BIT		= 0xD,
15 	H8300_AND_4BIT		= 0xE,
16 	H8300_MOV_4BIT		= 0xF,
17 };
18 
19 enum h8300_opcodes {
20 	H8300_NOP		= 0x00,
21 	H8300_SLEEP		= 0x01,
22 	H8300_STC		= 0x02,
23 	H8300_LDC		= 0x03,
24 	H8300_ORC		= 0x04,
25 	H8300_XORC		= 0x05,
26 	H8300_ANDC		= 0x06,
27 	H8300_LDC_2		= 0x07,
28 	H8300_ADDB_DIRECT	= 0x08,
29 	H8300_ADDW_DIRECT	= 0x09,
30 	H8300_INC		= 0x0A,
31 	H8300_ADDS		= 0x0B,
32 	H8300_MOV_1		= 0x0C,
33 	H8300_MOV_2		= 0x0D,
34 	H8300_ADDX		= 0x0E,
35 	H8300_DAA		= 0x0F,
36 	H8300_SHL		= 0x10,
37 	H8300_SHR		= 0x11,
38 	H8300_ROTL		= 0x12,
39 	H8300_ROTR		= 0x13,
40 	H8300_OR		= 0x14,
41 	H8300_XOR		= 0x15,
42 	H8300_AND		= 0x16,
43 	H8300_NOT_NEG		= 0x17,
44 	H8300_SUB_1		= 0x18,
45 	H8300_SUBW		= 0x19,
46 	H8300_DEC		= 0x1A,
47 	H8300_SUBS		= 0x1B,
48 	H8300_CMP_1		= 0x1C,
49 	H8300_CMP_2		= 0x1D,
50 	H8300_SUBX		= 0x1E,
51 	H8300_DAS		= 0x1F,
52 	H8300_BRA		= 0x40,
53 	H8300_BRN		= 0x41,
54 	H8300_BHI		= 0x42,
55 	H8300_BLS		= 0x43,
56 	H8300_BCC		= 0x44,
57 	H8300_BCS		= 0x45,
58 	H8300_BNE		= 0x46,
59 	H8300_BEQ		= 0x47,
60 	H8300_BVC		= 0x48,
61 	H8300_BVS		= 0x49,
62 	H8300_BPL		= 0x4A,
63 	H8300_BMI		= 0x4B,
64 	H8300_BGE		= 0x4C,
65 	H8300_BLT		= 0x4D,
66 	H8300_BGT		= 0x4E,
67 	H8300_BLE		= 0x4F,
68 	H8300_MULXU		= 0x50,
69 	H8300_DIVXU		= 0x51,
70 	H8300_RTS		= 0x54,
71 	H8300_BSR		= 0x55,
72 	H8300_RTE		= 0x56,
73 	H8300_JMP_1		= 0x59,
74 	H8300_JMP_2		= 0x5A,
75 	H8300_JMP_3		= 0x5B,
76 	H8300_JSR_1		= 0x5D,
77 	H8300_JSR_2		= 0x5E,
78 	H8300_JSR_3		= 0x5F,
79 	H8300_BSET_1		= 0x60,
80 	H8300_BNOT_1		= 0x61,
81 	H8300_BCLR_R2R8		= 0x62,
82 	H8300_BTST_R2R8		= 0x63,
83 	H8300_BST_BIST		= 0x67,
84 	H8300_MOV_R82IND16	= 0x68,
85 	H8300_MOV_IND162R16	= 0x69,
86 	H8300_MOV_R82ABS16	= 0x6a,
87 	H8300_MOV_ABS162R16	= 0x6B,
88 	H8300_MOV_R82RDEC16	= 0x6C,
89 	H8300_MOV_INDINC162R16	= 0x6D,
90 	H8300_MOV_R82DISPR16	= 0x6E,
91 	H8300_MOV_DISP162R16	= 0x6F,
92 	H8300_BSET_2		= 0x70,
93 	H8300_BNOT_2		= 0x71,
94 	H8300_BCLR_IMM2R8	= 0x72,
95 	H8300_BTST		= 0x73,
96 	H8300_BOR_BIOR		= 0x74,
97 	H8300_BXOR_BIXOR	= 0x75,
98 	H8300_BAND_BIAND	= 0x76,
99 	H8300_BILD_IMM2R8	= 0x77,
100 	H8300_MOV_IMM162R16	= 0x79,
101 	H8300_EEPMOV		= 0x7B,
102 	H8300_BIAND_IMM2IND16	= 0x7C,
103 	H8300_BCLR_R2IND16	= 0x7D,
104 	H8300_BIAND_IMM2ABS8	= 0x7E,
105 	H8300_BCLR_R2ABS8	= 0x7F,
106 };
107 
108 #define H8300_INSTR_MAXLEN	20
109 
110 enum h8300_opcodes_9bit {
111 	H8300_BST		= 0x6700 >> 7,
112 	H8300_BIST		= 0x6780 >> 7,
113 	H8300_BOR		= 0x7400 >> 7,
114 	H8300_BIOR		= 0x7480 >> 7,
115 	H8300_BXOR		= 0x7500 >> 7,
116 	H8300_BIXOR		= 0x7580 >> 7,
117 	H8300_BAND		= 0x7600 >> 7,
118 	H8300_BIAND		= 0x7680 >> 7,
119 	H8300_BLD		= 0x7700 >> 7,
120 	H8300_BILD		= 0x7780 >> 7,
121 };
122 
123 struct h8300_cmd {
124 	char	instr[H8300_INSTR_MAXLEN];
125 	char	operands[H8300_INSTR_MAXLEN];
126 };
127 
128 int h8300_decode_command(const ut8 *instr, struct h8300_cmd *cmd);
129 
130 #endif /* H8300_DISAS_H */
131