1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include <asm/byteorder.h>
46
47
48 struct ins_format1 {
49 #ifdef __LITTLE_ENDIAN
50 uint32_t immediate : 8,
51 source : 9,
52 destination : 9,
53 ret : 1,
54 opcode : 4,
55 parity : 1;
56 #else
57 uint32_t parity : 1,
58 opcode : 4,
59 ret : 1,
60 destination : 9,
61 source : 9,
62 immediate : 8;
63 #endif
64 };
65
66
67 struct ins_format2 {
68 #ifdef __LITTLE_ENDIAN
69 uint32_t shift_control : 8,
70 source : 9,
71 destination : 9,
72 ret : 1,
73 opcode : 4,
74 parity : 1;
75 #else
76 uint32_t parity : 1,
77 opcode : 4,
78 ret : 1,
79 destination : 9,
80 source : 9,
81 shift_control : 8;
82 #endif
83 };
84
85
86 struct ins_format3 {
87 #ifdef __LITTLE_ENDIAN
88 uint32_t immediate : 8,
89 source : 9,
90 address : 10,
91 opcode : 4,
92 parity : 1;
93 #else
94 uint32_t parity : 1,
95 opcode : 4,
96 address : 10,
97 source : 9,
98 immediate : 8;
99 #endif
100 };
101
102
103 struct ins_format4 {
104 #ifdef __LITTLE_ENDIAN
105 uint32_t opcode_ext : 8,
106 source : 9,
107 destination : 9,
108 ret : 1,
109 opcode : 4,
110 parity : 1;
111 #else
112 uint32_t parity : 1,
113 opcode : 4,
114 ret : 1,
115 destination : 9,
116 source : 9,
117 opcode_ext : 8;
118 #endif
119 };
120
121
122 struct ins_format5 {
123 #ifdef __LITTLE_ENDIAN
124 uint32_t opcode_ext : 8,
125 source : 9,
126 address : 10,
127 opcode : 4,
128 parity : 1;
129 #else
130 uint32_t parity : 1,
131 opcode : 4,
132 address : 10,
133 source : 9,
134 opcode_ext : 8;
135 #endif
136 };
137
138
139 struct ins_format6 {
140 #ifdef __LITTLE_ENDIAN
141 uint32_t page : 3,
142 opcode_ext : 5,
143 source : 9,
144 address : 10,
145 opcode : 4,
146 parity : 1;
147 #else
148 uint32_t parity : 1,
149 opcode : 4,
150 address : 10,
151 source : 9,
152 opcode_ext : 5,
153 page : 3;
154 #endif
155 };
156
157 union ins_formats {
158 struct ins_format1 format1;
159 struct ins_format2 format2;
160 struct ins_format3 format3;
161 struct ins_format4 format4;
162 struct ins_format5 format5;
163 struct ins_format6 format6;
164 uint8_t bytes[4];
165 uint32_t integer;
166 };
167 struct instruction {
168 union ins_formats format;
169 u_int srcline;
170 struct symbol *patch_label;
171 STAILQ_ENTRY(instruction) links;
172 };
173
174 #define AIC_OP_OR 0x0
175 #define AIC_OP_AND 0x1
176 #define AIC_OP_XOR 0x2
177 #define AIC_OP_ADD 0x3
178 #define AIC_OP_ADC 0x4
179 #define AIC_OP_ROL 0x5
180 #define AIC_OP_BMOV 0x6
181
182 #define AIC_OP_MVI16 0x7
183
184 #define AIC_OP_JMP 0x8
185 #define AIC_OP_JC 0x9
186 #define AIC_OP_JNC 0xa
187 #define AIC_OP_CALL 0xb
188 #define AIC_OP_JNE 0xc
189 #define AIC_OP_JNZ 0xd
190 #define AIC_OP_JE 0xe
191 #define AIC_OP_JZ 0xf
192
193
194 #define AIC_OP_SHL 0x10
195 #define AIC_OP_SHR 0x20
196 #define AIC_OP_ROR 0x30
197
198
199 #define AIC_OP_OR16 0x8005
200 #define AIC_OP_AND16 0x8105
201 #define AIC_OP_XOR16 0x8205
202 #define AIC_OP_ADD16 0x8305
203 #define AIC_OP_ADC16 0x8405
204 #define AIC_OP_JNE16 0x8805
205 #define AIC_OP_JNZ16 0x8905
206 #define AIC_OP_JE16 0x8C05
207 #define AIC_OP_JZ16 0x8B05
208 #define AIC_OP_JMP16 0x9005
209 #define AIC_OP_JC16 0x9105
210 #define AIC_OP_JNC16 0x9205
211 #define AIC_OP_CALL16 0x9305
212
213
214 #define AIC_OP_JMPF 0xA005
215 #define AIC_OP_CALLF 0xB005
216 #define AIC_OP_JCF 0xC005
217 #define AIC_OP_JNCF 0xD005
218 #define AIC_OP_CMPXCHG 0xE005