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
48struct 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
67struct 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
86struct 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
103struct 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
122struct 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
139struct 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
157union 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};
167struct 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
219