]>
Commit | Line | Data |
---|---|---|
c38f5470 SC |
1 | #include <stdio.h> |
2 | #define BYTE_INFO_LEN 10 | |
3 | /*#include "z8opcode.h"*/ | |
4 | struct op { | |
5 | char *bits; | |
6 | char *name; | |
7 | } ; | |
8 | #define iswhite(x) ((x) == ' ' || (x) == '\t') | |
9 | struct op opt[] = | |
10 | { | |
11 | "1011 0101 ssss dddd","adc rd,rs", | |
12 | "1011 0100 ssss dddd","adcb rbd,rbs", | |
13 | "0000 0001 ssN0 dddd","add rd,@rs", | |
14 | "0100 0001 0000 dddd address","add rd,address", | |
15 | "0100 0001 ssN0 dddd address","add rd,address(rs)", | |
16 | "0000 0001 0000 dddd imm16","add rd,imm16", | |
17 | "1000 0001 ssss dddd","add rd,rs", | |
18 | "0000 0000 ssN0 dddd","addb rbd,@rs", | |
19 | "0100 0000 0000 dddd address","addb rbd,address", | |
20 | "0100 0000 ssN0 dddd address","addb rbd,address(rs)", | |
21 | "0000 0000 0000 dddd imm8 imm8","addb rbd,imm8", | |
22 | "1000 0000 ssss dddd","addb rbd,rbs", | |
23 | "0001 0110 ssN0 dddd","addl rrd,@rs", | |
24 | "0101 0110 0000 dddd address","addl rrd,address", | |
25 | "0101 0110 ssN0 dddd address","addl rrd,address(rs)", | |
26 | "0001 0110 0000 dddd imm32","addl rrd,imm32", | |
27 | "1001 0110 ssss dddd","addl rrd,rrs", | |
28 | "0000 0111 ssN0 dddd","and rd,@rs", | |
29 | "0100 0111 0000 dddd address","and rd,address", | |
30 | "0100 0111 ssN0 dddd address","and rd,address(rs)", | |
31 | "0000 0111 0000 dddd imm16","and rd,imm16", | |
32 | "1000 0111 ssss dddd","and rd,rs", | |
33 | "0000 0110 ssN0 dddd","andb rbd,@rs", | |
34 | "0100 0110 0000 dddd address","andb rbd,address", | |
35 | "0100 0110 ssN0 dddd address","andb rbd,address(rs)", | |
36 | "0000 0110 0000 dddd imm8 imm8","andb rbd,imm8", | |
37 | "1000 0110 ssss dddd","andb rbd,rbs", | |
38 | "0010 0111 ddN0 imm4","bit @rd,imm4", | |
39 | "0110 0111 ddN0 imm4 address","bit address(rd),imm4", | |
40 | "0110 0111 0000 imm4 address","bit address,imm4", | |
41 | "1010 0111 dddd imm4","bit rd,imm4", | |
42 | "0010 0111 0000 ssss 0000 dddd 0000 0000","bit rd,rs", | |
43 | "0010 0110 ddN0 imm4","bitb @rd,imm4", | |
44 | "0110 0110 ddN0 imm4 address","bitb address(rd),imm4", | |
45 | "0110 0110 0000 imm4 address","bitb address,imm4", | |
46 | "1010 0110 dddd imm4","bitb rbd,imm4", | |
47 | "0010 0110 0000 ssss 0000 dddd 0000 0000","bitb rbd,rs", | |
48 | "0001 1111 ddN0 0000","call @rd", | |
49 | "0101 1111 0000 0000 address","call address", | |
50 | "0101 1111 ddN0 0000 address","call address(rd)", | |
51 | "1101 disp12","calr disp12", | |
52 | "0000 1101 ddN0 1000","clr @rd", | |
447bbbea SC |
53 | "0100 1101 0000 1000 address","clr address", |
54 | "0100 1101 ddN0 1000 address","clr address(rd)", | |
c38f5470 SC |
55 | "1000 1101 dddd 1000","clr rd", |
56 | "0000 1100 ddN0 1000","clrb @rd", | |
447bbbea SC |
57 | "0100 1100 0000 1000 address","clrb address", |
58 | "0100 1100 ddN0 1000 address","clrb address(rd)", | |
c38f5470 SC |
59 | "1000 1100 dddd 1000","clrb rbd", |
60 | "1011 1011 ssN0 1010 0000 rrrr ddN0 cccc","cpsd @rd,@rs,rr,cc", | |
61 | "1011 1010 ssN0 1010 0000 rrrr ddN0 cccc","cpsdb @rd,@rs,rr,cc", | |
62 | "1011 1011 ssN0 1110 0000 rrrr ddN0 cccc","cpsdr @rd,@rs,rr,cc", | |
63 | "1011 1010 ssN0 1110 0000 rrrr ddN0 cccc","cpsdrb @rd,@rs,rr,cc", | |
64 | "1011 1011 ssN0 0010 0000 rrrr ddN0 cccc","cpsi @rd,@rs,rr,cc", | |
65 | "1011 1010 ssN0 0010 0000 rrrr ddN0 cccc","cpsib @rd,@rs,rr,cc", | |
66 | "1011 1011 ssN0 0110 0000 rrrr ddN0 cccc","cpsir @rd,@rs,rr,cc", | |
67 | "1011 1010 ssN0 0110 0000 rrrr ddN0 cccc","cpsirb @rd,@rs,rr,cc", | |
68 | "0000 1101 ddN0 0000","com @rd", | |
447bbbea SC |
69 | "0100 1101 0000 0000 address","com address", |
70 | "0100 1101 ddN0 0000 address","com address(rd)", | |
c38f5470 SC |
71 | "1000 1101 dddd 0000","com rd", |
72 | "0000 1100 ddN0 0000","comb @rd", | |
447bbbea SC |
73 | "0100 1100 0000 0000 address","comb address", |
74 | "0100 1100 ddN0 0000 address","comb address(rd)", | |
c38f5470 SC |
75 | "1000 1100 dddd 0000","comb rbd", |
76 | "1000 1101 imm4 0101","comflg flags", | |
77 | "0000 1101 ddN0 0001 imm16","cp @rd,imm16", | |
78 | "0100 1101 ddN0 0001 address imm16","cp address(rd),imm16", | |
79 | "0100 1101 0000 0001 address imm16","cp address,imm16", | |
80 | "0000 1011 ssN0 dddd","cp rd,@rs", | |
81 | "0100 1011 0000 dddd address","cp rd,address", | |
82 | "0100 1011 ssN0 dddd address","cp rd,address(rs)", | |
83 | "0000 1011 0000 dddd imm16","cp rd,imm16", | |
84 | "1000 1011 ssss dddd","cp rd,rs", | |
85 | "0000 1100 ddN0 0001 imm8 imm8","cpb @rd,imm8", | |
86 | "0100 1100 ddN0 0001 address imm8 imm8","cpb address(rd),imm8", | |
87 | "0100 1100 0000 0001 address imm8 imm8","cpb address,imm8", | |
88 | "0000 1010 ssN0 dddd","cpb rbd,@rs", | |
89 | "0100 1010 0000 dddd address","cpb rbd,address", | |
90 | "0100 1010 ssN0 dddd address","cpb rbd,address(rs)", | |
91 | "0000 1010 0000 dddd imm8 imm8","cpb rbd,imm8", | |
92 | "1000 1010 ssss dddd","cpb rbd,rbs", | |
93 | "1011 1011 ssN0 1000 0000 rrrr dddd cccc","cpd rd,@rs,rr,cc", | |
94 | "1011 1010 ssN0 1000 0000 rrrr dddd cccc","cpdb rbd,@rs,rr,cc", | |
95 | "1011 1011 ssN0 1100 0000 rrrr dddd cccc","cpdr rd,@rs,rr,cc", | |
96 | "1011 1010 ssN0 1100 0000 rrrr dddd cccc","cpdrb rbd,@rs,rr,cc", | |
97 | "1011 1011 ssN0 0000 0000 rrrr dddd cccc","cpi rbd,@rs,rr,cc", | |
98 | "1011 1010 ssN0 0000 0000 rrrr dddd cccc","cpib rd,@rs,rr,cc", | |
99 | "1011 1011 ssN0 0100 0000 rrrr dddd cccc","cpir rbd,@rs,rr,cc", | |
100 | "1011 1010 ssN0 0100 0000 rrrr dddd cccc","cpirb rd,@rs,rr,cc", | |
101 | "0001 0000 ssN0 dddd","cpl rrd,@rs", | |
102 | "0101 0000 0000 dddd address","cpl rrd,address", | |
103 | "0101 0000 ssN0 dddd address","cpl rrd,address(rs)", | |
104 | "0001 0000 0000 dddd imm32","cpl rrd,imm32", | |
105 | "1001 0000 ssss dddd","cpl rrd,rrs", | |
106 | "1011 0000 dddd 0000","dab rbd", | |
107 | "1111 dddd 1disp7","dbjnz rbd,disp7", | |
108 | "0010 1011 ddN0 imm4","dec @rd,imm4", | |
109 | "0110 1011 ddN0 imm4 address","dec address(rd),imm4", | |
110 | "0110 1011 0000 imm4 address","dec address,imm4", | |
111 | "1010 1011 dddd imm4","dec rd,imm4", | |
112 | "0010 1010 ddN0 imm4","decb @rd,imm4", | |
113 | "0110 1010 ddN0 imm4 address","decb address(rd),imm4", | |
114 | "0110 1010 0000 imm4 address","decb address,imm4", | |
115 | "1010 1010 dddd imm4","decb rbd,imm4", | |
116 | "0111 1100 0000 00ii","di i2", | |
117 | "0001 1011 ssN0 dddd","div rrd,@rs", | |
118 | "0101 1011 0000 dddd address","div rrd,address", | |
119 | "0101 1011 ssN0 dddd address","div rrd,address(rs)", | |
120 | "0001 1011 0000 dddd imm16","div rrd,imm16", | |
121 | "1001 1011 ssss dddd","div rrd,rs", | |
122 | "0001 1010 ssN0 dddd","divl rqd,@rs", | |
123 | "0101 1010 0000 dddd address","divl rqd,address", | |
124 | "0101 1010 ssN0 dddd address","divl rqd,address(rs)", | |
125 | "0001 1010 0000 dddd imm32","divl rqd,imm32", | |
126 | "1001 1010 ssss dddd","divl rqd,rrs", | |
127 | "1111 dddd 0disp7","djnz rd,disp7", | |
128 | "0111 1100 0000 01ii","ei i2", | |
129 | "1010 1101 ssss dddd","ex rbd,rbs", | |
130 | "0010 1101 ssN0 dddd","ex rd,@rs", | |
131 | "0110 1101 0000 dddd address","ex rd,address", | |
132 | "0110 1101 ssN0 dddd address","ex rd,address(rs)", | |
133 | "0010 1100 ssN0 dddd","exb rbd,@rs", | |
134 | "0110 1100 0000 dddd address","exb rbd,address", | |
135 | "0110 1100 ssN0 dddd address","exb rbd,address(rs)", | |
136 | "1010 1100 ssss dddd","exb rbd,rbs", | |
137 | "1011 0001 dddd 1010","exts rrd", | |
138 | "1011 0001 dddd 0000","extsb rd", | |
139 | "1011 0001 dddd 0111","extsl rqd", | |
140 | "0111 1010 0000 0000","halt", | |
141 | "0011 1101 ssN0 dddd","in rd,@rs", | |
142 | "0011 1101 dddd 0100 imm16","in rd,imm16", | |
143 | "0011 1100 ssN0 dddd","inb rbd,@rs", | |
144 | "0011 1100 dddd 0100 imm16","inb rbd,imm16", | |
145 | "0010 1001 ddN0 imm4","inc @rd,imm4", | |
146 | "0110 1001 ddN0 imm4 address","inc address(rd),imm4", | |
147 | "0110 1001 0000 imm4 address","inc address,imm4", | |
148 | "1010 1001 dddd imm4","inc rd,imm4", | |
149 | "0010 1000 ddN0 imm4","incb @rd,imm4", | |
150 | "0110 1000 ddN0 imm4 address","incb address(rd),imm4", | |
151 | "0110 1000 0000 imm4 address","incb address,imm4", | |
152 | "1010 1000 dddd imm4","incb rbd,imm4", | |
153 | "0011 1011 ssN0 1000 0000 aaaa ddN0 1000","ind @rd,@rs,ra", | |
154 | "0011 1010 ssN0 1000 0000 aaaa ddN0 1000","indb @rd,@rs,rba", | |
155 | "0011 1100 ssN0 0000 0000 aaaa ddN0 1000","inib @rd,@rs,ra", | |
156 | "0011 1100 ssN0 0000 0000 aaaa ddN0 0000","inibr @rd,@rs,ra", | |
157 | "0111 1011 0000 0000","iret", | |
158 | "0001 1110 ddN0 cccc","jp cc,@rd", | |
159 | "0101 1110 0000 cccc address","jp cc,address", | |
160 | "0101 1110 ddN0 cccc address","jp cc,address(rd)", | |
161 | "1110 cccc disp8","jr cc,disp8", | |
162 | "0000 1101 ddN0 0101 imm16","ld @rd,imm16", | |
163 | "0010 1111 ddN0 ssss","ld @rd,rs", | |
164 | "0100 1101 ddN0 0101 address imm16","ld address(rd),imm16", | |
165 | "0110 1111 ddN0 ssss address","ld address(rd),rs", | |
166 | "0100 1101 0000 0101 address imm16","ld address,imm16", | |
167 | "0110 1111 0000 ssss address","ld address,rs", | |
168 | "0011 0011 ddN0 ssss disp16","ld rd(disp16),rs", | |
447bbbea | 169 | "0111 0011 ddN0 ssss 0000 xxxx 0000 0000","ld rd(rx),rs", |
c38f5470 SC |
170 | "0010 0001 ssN0 dddd","ld rd,@rs", |
171 | "0110 0001 0000 dddd address","ld rd,address", | |
172 | "0110 0001 ssN0 dddd address","ld rd,address(rs)", | |
173 | "0010 0001 0000 dddd imm16","ld rd,imm16", | |
174 | "1010 0001 ssss dddd","ld rd,rs", | |
175 | "0011 0001 ssN0 dddd disp16","ld rd,rs(disp16)", | |
447bbbea | 176 | "0111 0001 ssN0 dddd 0000 xxxx 0000 0000","ld rd,rs(rx)", |
c38f5470 SC |
177 | "0111 0110 0000 dddd address","lda rd,address", |
178 | "0111 0110 ssN0 dddd address","lda rd,address(rs)", | |
179 | "0011 0100 ssN0 dddd disp16","lda rd,rs(disp16)", | |
447bbbea | 180 | "0111 0100 ssN0 dddd 0000 xxxx 0000 0000","lda rd,rs(rx)", |
c38f5470 SC |
181 | "0011 0100 0000 dddd disp16","ldar rd,disp16", |
182 | "0000 1100 ddN0 0101 imm8 imm8","ldb @rd,imm8", | |
183 | "0010 1110 ddN0 ssss","ldb @rd,rbs", | |
184 | "0100 1100 ddN0 0101 address imm8 imm8","ldb address(rd),imm8", | |
185 | "0100 1110 ddN0 ssss address","ldb address(rd),rbs", | |
186 | "0100 1100 0000 0101 address imm8 imm8","ldb address,imm8", | |
187 | "0110 1110 0000 ssss address","ldb address,rbs", | |
188 | "0010 0000 ssN0 dddd","ldb rbd,@rs", | |
189 | "0110 0000 0000 dddd address","ldb rbd,address", | |
190 | "0110 0000 ssN0 dddd address","ldb rbd,address(rs)", | |
191 | "1100 dddd imm8","ldb rbd,imm8", | |
192 | "0010 0000 0000 dddd imm8 imm8","ldb rbd,imm8", | |
193 | "1010 0000 ssss dddd","ldb rbd,rbs", | |
194 | "0011 0000 ssN0 dddd disp16","ldb rbd,rs(disp16)", | |
447bbbea | 195 | "0111 0000 ssN0 dddd 0000 xxxx 0000 0000","ldb rbd,rs(rx)", |
c38f5470 | 196 | "0011 0010 ddN0 ssss disp16","ldb rd(disp16),rbs", |
447bbbea | 197 | "0111 0010 ddN0 ssss 0000 xxxx 0000 0000","ldb rd(rx),rbs", |
c38f5470 SC |
198 | "0111 1101 ssss 1ccc","ldctl ctrl,rs", |
199 | "0111 1101 dddd 0ccc","ldctl rd,ctrl", | |
200 | "0001 1101 ddN0 ssss","ldl @rd,rrs", | |
201 | "0101 1101 ddN0 ssss address","ldl address(rd),rrs", | |
202 | "0101 1101 0000 ssss address","ldl address,rrs", | |
203 | "0011 0111 ddN0 ssss disp16","ldl rd(disp16),rrs", | |
447bbbea | 204 | "0111 0111 ddN0 ssss 0000 xxxx 0000 0000","ldl rd(rx),rrs", |
c38f5470 SC |
205 | "0001 0100 ssN0 dddd","ldl rrd,@rs", |
206 | "0101 0100 0000 dddd address","ldl rrd,address", | |
207 | "0101 0100 ssN0 dddd address","ldl rrd,address(rs)", | |
208 | "0001 0100 0000 dddd imm32","ldl rrd,imm32", | |
209 | "1001 0100 ssss dddd","ldl rrd,rrs", | |
210 | "0011 0101 ssN0 dddd disp16","ldl rrd,rs(disp16)", | |
447bbbea | 211 | "0111 0101 ssN0 dddd 0000 xxxx 0000 0000","ldl rrd,rs(rx)", |
c38f5470 SC |
212 | "0001 1100 ddN0 1001 0000 ssss 0000 nminus1","ldm @rd,rs,n", |
213 | "0101 1100 ddN0 1001 0000 ssN0 0000 nminus1 address","ldm address(rd),rs,n", | |
214 | "0101 1100 0000 1001 0000 ssss 0000 nminus1 address","ldm address,rs,n", | |
215 | "0001 1100 ssN0 0001 0000 dddd 0000 nminus1","ldm rd,@rs,n", | |
216 | "0101 1100 ssN0 0001 0000 dddd 0000 nminus1 address","ldm rd,address(rs),n", | |
217 | "0101 1100 0000 0001 0000 dddd 0000 nminus1 address","ldm rd,address,n", | |
218 | "0011 1001 ssN0 0000","ldps @rs", | |
219 | "1011 1101 dddd imm4","ldk rd,imm4", | |
220 | "1011 1010 ssN0 0001 0000 rrrr ddN0 0000","ldirb @rd,@rs,rr", | |
221 | "1011 1011 ssN0 0001 0000 rrrr ddN0 0000","ldir @rd,@rs,rr", | |
222 | ||
223 | "0111 1001 0000 0000 address","ldps address", | |
224 | "0111 1001 ssN0 0000 address","ldps address(rs)", | |
225 | "0011 0011 0000 ssss disp16","ldr disp16,rs", | |
226 | "0011 0001 0000 dddd disp16","ldr rd,disp16", | |
227 | "0011 0010 0000 ssss disp16","ldrb disp16,rbs", | |
228 | "0011 0000 0000 dddd disp16","ldrb rbd,disp16", | |
229 | "0011 0111 0000 ssss disp16","ldrl disp16,rrs", | |
230 | "0011 0101 0000 dddd disp16","ldrl rrd,disp16", | |
231 | "0111 1011 0000 1010","mbit", | |
232 | "0111 1011 dddd 1101","mreq rd", | |
233 | "0111 1011 0000 1001","mres", | |
234 | "0111 1011 0000 1000","mset", | |
235 | "0001 1001 ssN0 dddd","mult rrd,@rs", | |
236 | "0101 1001 0000 dddd address","mult rrd,address", | |
237 | "0101 1001 ssN0 dddd address","mult rrd,address(rs)", | |
238 | "0001 1001 0000 dddd imm16","mult rrd,imm16", | |
239 | "1001 1001 ssss dddd","mult rrd,rs", | |
240 | "0001 1000 ssN0 dddd","multl rqd,@rs", | |
241 | "0101 1000 0000 dddd address","multl rqd,address", | |
242 | "0101 1000 ssN0 dddd address","multl rqd,address(rs)", | |
243 | "0001 1000 0000 dddd imm32","multl rqd,imm32", | |
244 | "1001 1000 ssss dddd","multl rqd,rrs", | |
245 | "0000 1101 ddN0 0010","neg @rd", | |
447bbbea SC |
246 | "0100 1101 0000 0010 address","neg address", |
247 | "0100 1101 ddN0 0010 address","neg address(rd)", | |
c38f5470 SC |
248 | "1000 1101 dddd 0010","neg rd", |
249 | "0000 1100 ddN0 0010","negb @rd", | |
447bbbea SC |
250 | "0100 1100 0000 0010 address","negb address", |
251 | "0100 1100 ddN0 0010 address","negb address(rd)", | |
252 | "1000 1100 dddd 0010","negb rbd", | |
c38f5470 SC |
253 | "1000 1101 0000 0111","nop", |
254 | "0000 0101 ssN0 dddd","or rd,@rs", | |
255 | "0100 0101 0000 dddd address","or rd,address", | |
256 | "0100 0101 ssN0 dddd address","or rd,address(rs)", | |
257 | "0000 0101 0000 dddd imm16","or rd,imm16", | |
258 | "1000 0101 ssss dddd","or rd,rs", | |
259 | "0000 0100 ssN0 dddd","orb rbd,@rs", | |
260 | "0100 0100 0000 dddd address","orb rbd,address", | |
261 | "0100 0100 ssN0 dddd address","orb rbd,address(rs)", | |
262 | "0000 0100 0000 dddd imm8 imm8","orb rbd,imm8", | |
263 | "1000 0100 ssss dddd","orb rbd,rbs", | |
264 | "0011 1111 ddN0 ssss","out @rd,rs", | |
265 | "0011 1011 ssss 0110 imm16","out imm16,rs", | |
266 | "0011 1110 ddN0 ssss","outb @rd,rbs", | |
267 | "0011 1010 ssss 0110 imm16","outb imm16,rbs", | |
268 | "0011 1011 ssN0 1010 0000 aaaa ddN0 1000","outd @rd,@rs,ra", | |
269 | "0011 1010 ssN0 1010 0000 aaaa ddN0 1000","outdb @rd,@rs,rba", | |
270 | "0011 1100 ssN0 0010 0000 aaaa ddN0 1000","outib @rd,@rs,ra", | |
271 | "0011 1100 ssN0 0010 0000 aaaa ddN0 0000","outibr @rd,@rs,ra", | |
272 | "0001 0111 ssN0 ddN0","pop @rd,@rs", | |
273 | "0101 0111 ssN0 ddN0 address","pop address(rd),@rs", | |
274 | "0101 0111 ssN0 0000 address","pop address,@rs", | |
275 | "1001 0111 ssN0 dddd","pop rd,@rs", | |
276 | "0001 0101 ssN0 ddN0","popl @rd,@rs", | |
277 | "0101 0101 ssN0 ddN0 address","popl address(rd),@rs", | |
278 | "0101 0101 ssN0 0000 address","popl address,@rs", | |
279 | "1001 0101 ssN0 dddd","popl rrd,@rs", | |
280 | "0001 0011 ddN0 ssN0","push @rd,@rs", | |
281 | "0101 0011 ddN0 0000 address","push @rd,address", | |
282 | "0000 1101 ddN0 1001 imm16","push @rd,imm16", | |
283 | "1001 0011 ddN0 ssss","push @rd,rs", | |
284 | "0101 0011 ddN0 ssN0 address","push @rd,address(rs)", | |
285 | "0001 0001 ddN0 ssN0","pushl @rd,@rs", | |
286 | "0101 0001 ddN0 0000 address","push @rd,address", | |
287 | "1001 0001 ddN0 ssss","pushl @rd,rrs", | |
288 | "0101 0001 ddN0 ssN0 address","pushl @rd,address(rs)", | |
289 | "0010 0011 ddN0 imm4","res @rd,imm4", | |
290 | "0110 0011 ddN0 imm4 address","res address(rd),imm4", | |
291 | "0110 0011 0000 imm4 address","res address,imm4", | |
292 | "1010 0011 dddd imm4","res rd,imm4", | |
293 | "0010 0011 0000 ssss 0000 dddd 0000 0000","res rd,rs", | |
294 | "0010 0010 ddN0 imm4","resb @rd,imm4", | |
295 | "0110 0010 ddN0 imm4 address","resb address(rd),imm4", | |
296 | "0110 0010 0000 imm4 address","resb address,imm4", | |
297 | "1010 0010 dddd imm4","resb rbd,imm4", | |
298 | "0010 0010 0000 ssss 0000 dddd 0000 0000","resb rbd,rs", | |
299 | "1000 1101 imm4 0011","resflg imm4", | |
300 | "1001 1110 0000 cccc","ret cc", | |
301 | "1011 0011 dddd 0000","rl rd,1", | |
302 | "1011 0011 dddd 0010","rl rd,2", | |
303 | "1011 0010 dddd 0000","rlb rbd,1", | |
304 | "1011 0010 dddd 0010","rlb rbd,2", | |
305 | "1011 0011 dddd 1000","rlc rd,1", | |
306 | "1011 0011 dddd 1010","rlc rd,2", | |
307 | "1011 0010 dddd 1000","rlcb rbd,1", | |
308 | "1011 0010 dddd 1010","rlcb rbd,2", | |
309 | "1011 1110 aaaa bbbb","rldb rbb,rba", | |
310 | "1011 0011 dddd 0100","rr rd,1", | |
311 | "1011 0011 dddd 0110","rr rd,2", | |
312 | "1011 0010 dddd 0100","rrb rbd,1", | |
313 | "1011 0010 dddd 0110","rrb rbd,2", | |
314 | "1011 0011 dddd 1100","rrc rd,1", | |
315 | "1011 0011 dddd 1110","rrc rd,2", | |
316 | "1011 0010 dddd 1100","rrcb rbd,1", | |
317 | "1011 0010 dddd 1110","rrcb rbd,2", | |
318 | "1011 1100 aaaa bbbb","rrdb rbb,rba", | |
319 | "1011 0111 ssss dddd","sbc rd,rs", | |
320 | "1011 0110 ssss dddd","sbcb rbd,rbs", | |
321 | "1011 0011 dddd 1011 0000 ssss 0000 0000","sda rd,rs", | |
322 | "1011 0010 dddd 1011 0000 ssss 0000 0000","sdab rbd,rs", | |
323 | "1011 0011 dddd 1111 0000 ssss 0000 0000","sdal rrd,rs", | |
324 | "1011 0011 dddd 0011 0000 ssss 0000 0000","sdl rd,rs", | |
325 | "1011 0010 dddd 0011 0000 ssss 0000 0000","sdlb rbd,rs", | |
326 | "1011 0011 dddd 0111 0000 ssss 0000 0000","sdll rrd,rs", | |
327 | "0010 0101 ddN0 imm4","set @rd,imm4", | |
328 | "0110 0101 ddN0 imm4 address","set address(rd),imm4", | |
329 | "0110 0101 0000 imm4 address","set address,imm4", | |
330 | "1010 0101 dddd imm4","set rd,imm4", | |
331 | "0010 0101 0000 ssss 0000 dddd 0000 0000","set rd,rs", | |
332 | "0010 0100 ddN0 imm4","setb @rd,imm4", | |
333 | "0110 0100 ddN0 imm4 address","setb address(rd),imm4", | |
334 | "0110 0100 0000 imm4 address","setb address,imm4", | |
335 | "1010 0100 dddd imm4","setb rbd,imm4", | |
336 | "0010 0100 0000 ssss 0000 dddd 0000 0000","setb rbd,rs", | |
337 | "1000 1101 imm4 0001","setflg imm4", | |
338 | "0011 1100 dddd 0101 imm16","sinb rbd,imm16", | |
339 | "0011 1101 dddd 0101 imm16","sinb rd,imm16", | |
340 | "0011 1011 ssN0 1000 0001 aaaa ddN0 1000","sind @rd,@rs,ra", | |
341 | "0011 1010 ssN0 1000 0001 aaaa ddN0 1000","sindb @rd,@rs,rba", | |
342 | "0011 1100 ssN0 0001 0000 aaaa ddN0 1000","sinib @rd,@rs,ra", | |
343 | "0011 1100 ssN0 0001 0000 aaaa ddN0 0000","sinibr @rd,@rs,ra", | |
344 | "1011 0011 dddd 1001 imm16","sla rd,imm16", | |
345 | "1011 0010 dddd 1001 imm16","slab rbd,imm16", | |
346 | "1011 0011 dddd 1101 imm16","slal rrd,imm16", | |
347 | "1011 0011 dddd 0001 imm16","sll rd,imm16", | |
348 | "1011 0010 dddd 0001 imm16","sllb rbd,imm16", | |
349 | "1011 0011 dddd 0101 imm16","slll rrd,imm16", | |
350 | "0011 1011 ssss 0111 imm16","sout imm16,rs", | |
351 | "0011 1010 ssss 0111 imm16","soutb imm16,rbs", | |
352 | "0011 1011 ssN0 1011 0000 aaaa ddN0 1000","soutd @rd,@rs,ra", | |
353 | "0011 1010 ssN0 1011 0000 aaaa ddN0 1000","soutdb @rd,@rs,rba", | |
354 | "0011 1100 ssN0 0011 0000 aaaa ddN0 1000","soutib @rd,@rs,ra", | |
355 | "0011 1100 ssN0 0011 0000 aaaa ddN0 0000","soutibr @rd,@rs,ra", | |
356 | "1011 0011 dddd 1001 nim16","sra rd,imm16", | |
357 | "1011 0010 dddd 1001 nim16","srab rbd,imm16", | |
358 | "1011 0011 dddd 1101 nim16","sral rrd,imm16", | |
359 | "1011 0011 dddd 0001 nim16","srl rd,imm16", | |
360 | "1011 0010 dddd 0001 nim16","srlb rbd,imm16", | |
361 | "1011 0011 dddd 0101 nim16","srll rrd,imm16", | |
362 | "0000 0011 ssN0 dddd","sub rd,@rs", | |
363 | "0100 0011 0000 dddd address","sub rd,address", | |
364 | "0100 0011 ssN0 dddd address","sub rd,address(rs)", | |
365 | "0000 0010 0000 dddd imm16","sub rd,imm16", | |
366 | "1000 0011 ssss dddd","sub rd,rs", | |
367 | "0000 0010 ssN0 dddd","subb rbd,@rs", | |
368 | "0100 0010 0000 dddd address","subb rbd,address", | |
369 | "0100 0010 ssN0 dddd address","subb rbd,address(rs)", | |
370 | "0000 0010 0000 dddd imm8 imm8","subb rbd,imm8", | |
371 | "1000 0010 ssss dddd","subb rbd,rbs", | |
372 | "0001 0010 ssN0 dddd","subl rrd,@rs", | |
373 | "0101 0010 0000 dddd address","subl rrd,address", | |
374 | "0101 0010 ssN0 dddd address","subl rrd,address(rs)", | |
375 | "0001 0010 0000 dddd imm32","subl rrd,imm32", | |
376 | "1001 0010 ssss dddd","subl rrd,rrs", | |
377 | "1010 1111 dddd cccc","tcc cc,rd", | |
378 | "1010 1110 dddd cccc","tccb cc,rbd", | |
379 | "0000 1101 ddN0 0100","test @rd", | |
447bbbea SC |
380 | "0100 1101 0000 0100 address","test address", |
381 | "0100 1101 ddN0 0100 address","test address(rd)", | |
c38f5470 SC |
382 | "1000 1101 dddd 0100","test rd", |
383 | "0000 1100 ddN0 0100","testb @rd", | |
447bbbea SC |
384 | "0100 1100 0000 0100 address","testb address", |
385 | "0100 1100 ddN0 0100 address","testb address(rd)", | |
c38f5470 SC |
386 | "1000 1100 dddd 0100","testb rbd", |
387 | "0001 1100 ddN0 1000","testl @rd", | |
447bbbea | 388 | "0101 1100 0000 1000 address","testl address", |
c38f5470 SC |
389 | "1001 1100 dddd 1000","testl rrd", |
390 | "1011 1000 ddN0 1000 0000 aaaa ssN0 0000","trdb @rd,@rs,rba", | |
391 | "1011 1000 ddN0 1100 0000 aaaa ssN0 0000","trdrb @rd,@rs,rba", | |
392 | "1011 1000 ddN0 0000 0000 rrrr ssN0 0000","trib @rd,@rs,rbr", | |
393 | "1011 1000 ddN0 0100 0000 rrrr ssN0 0000","trirb @rd,@rs,rbr", | |
394 | "1011 1000 aaN0 1110 0000 rrrr bbN0 1110","trtdrb @ra,@rb,rbr", | |
395 | "1011 1000 aaN0 0010 0000 rrrr bbN0 0000","trtib @ra,@rb,rr", | |
396 | "1011 1000 aaN0 0110 0000 rrrr bbN0 1110","trtirb @ra,@rb,rbr", | |
397 | "1011 1000 aaN0 1010 0000 rrrr bbN0 0000","trtrb @ra,@rb,rbr", | |
398 | "0000 1101 ddN0 0110","tset @rd", | |
447bbbea SC |
399 | "0100 1101 0000 0110 address","tset address", |
400 | "0100 1101 ddN0 0110 address","tset address(rd)", | |
c38f5470 SC |
401 | "1000 1101 dddd 0110","tset rd", |
402 | "0000 1100 ddN0 0110","tsetb @rd", | |
447bbbea SC |
403 | "0100 1100 0000 0110 address","tsetb address", |
404 | "0100 1100 ddN0 0110 address","tsetb address(rd)", | |
c38f5470 SC |
405 | "1000 1100 dddd 0110","tsetb rbd", |
406 | "0000 1001 ssN0 dddd","xor rd,@rs", | |
407 | "0100 1001 0000 dddd address","xor rd,address", | |
408 | "0100 1001 ssN0 dddd address","xor rd,address(rs)", | |
409 | "0000 1001 0000 dddd imm16","xor rd,imm16", | |
410 | "1000 1001 ssss dddd","xor rd,rs", | |
411 | "0000 1000 ssN0 dddd","xorb rbd,@rs", | |
412 | "0100 1000 0000 dddd address","xorb rbd,address", | |
413 | "0100 1000 ssN0 dddd address","xorb rbd,address(rs)", | |
414 | "0000 1000 0000 dddd imm8 imm8","xorb rbd,imm8", | |
415 | "1000 1000 ssss dddd","xorb rbd,rbs", | |
416 | ||
417 | ||
418 | 0,0 | |
419 | } | |
420 | ; | |
421 | ||
422 | int count() | |
423 | { | |
424 | struct op *p = opt; | |
425 | int r = 0; | |
426 | while (p->name) | |
427 | { | |
428 | r++; | |
429 | p++; | |
430 | } | |
431 | return r; | |
432 | ||
433 | } | |
434 | func(a,b) | |
435 | struct op *a; | |
436 | struct op *b; | |
437 | { | |
438 | return strcmp((a)->name, (b)->name); | |
439 | ||
440 | ||
441 | } | |
442 | ||
443 | func1(a,b) | |
444 | struct op *a; | |
445 | struct op *b; | |
446 | { | |
447 | return strcmp((a)->bits, (b)->bits); | |
448 | ||
449 | ||
450 | } | |
451 | ||
452 | /* opcode | |
453 | ||
454 | literal 0000 nnnn insert nnn into stream | |
455 | operand 0001 nnnn insert operand reg nnn into stream | |
456 | */ | |
457 | ||
458 | typedef struct tok_struct | |
459 | { | |
460 | ||
461 | char *match; | |
462 | char *token; | |
463 | int length; | |
464 | }; | |
465 | ||
466 | ||
467 | ||
468 | struct tok_struct args[] = | |
469 | { | |
470 | ||
471 | { "address(rs)", "CLASS_X+(ARG_RS)",}, | |
472 | { "address(rd)", "CLASS_X+(ARG_RD)",}, | |
473 | ||
474 | { "rs(disp16)","CLASS_BA+(ARG_RS)",}, | |
475 | { "rd(disp16)","CLASS_BA+(ARG_RD)",}, | |
476 | ||
477 | { "address", "CLASS_DA",}, | |
478 | { "rd(rx)", "CLASS_BX+(ARG_RD)",}, | |
479 | { "rs(rx)","CLASS_BX+(ARG_RS)",}, | |
480 | { "disp16", "CLASS_DISP",}, | |
481 | { "disp12", "CLASS_DISP",}, | |
482 | { "disp7", "CLASS_DISP",}, | |
483 | { "disp8", "CLASS_DISP",}, | |
484 | { "flags","CLASS_FLAGS",}, | |
485 | { "imm16", "CLASS_IMM+(ARG_IMM16)",}, | |
486 | { "imm32", "CLASS_IMM+(ARG_IMM32)",}, | |
487 | { "imm4", "CLASS_IMM +(ARG_IMM4)",}, | |
488 | { "n", "CLASS_IMM + (ARG_IMMN)",}, | |
489 | { "ctrl", "CLASS_CTRL",}, | |
490 | { "rba", "CLASS_REG_BYTE+(ARG_RA)",}, | |
491 | { "rbb", "CLASS_REG_BYTE+(ARG_RB)",}, | |
492 | { "rbd", "CLASS_REG_BYTE+(ARG_RD)",}, | |
493 | { "rbs", "CLASS_REG_BYTE+(ARG_RS)",}, | |
494 | { "rbr", "CLASS_REG_BYTE+(ARG_RR)",}, | |
495 | ||
496 | { "rrd","CLASS_REG_LONG+(ARG_RD)",}, | |
497 | { "rrs","CLASS_REG_LONG+(ARG_RS)",}, | |
498 | ||
499 | { "rqd", "CLASS_REG_QUAD+(ARG_RD)",}, | |
500 | ||
501 | { "rd", "CLASS_REG_WORD+(ARG_RD)",}, | |
502 | { "rs", "CLASS_REG_WORD+(ARG_RS)",}, | |
503 | ||
504 | { "@rd", "CLASS_IR+(ARG_RD)",}, | |
505 | { "@ra", "CLASS_IR+(ARG_RA)",}, | |
506 | { "@rb", "CLASS_IR+(ARG_RB)",}, | |
507 | { "@rs", "CLASS_IR+(ARG_RS)",}, | |
508 | ||
509 | { "imm8", "CLASS_IMM+(ARG_IMM8)",}, | |
510 | { "i2", "CLASS_IMM+(ARG_IMM2)",}, | |
511 | { "cc", "CLASS_CC",}, | |
512 | ||
513 | { "rr", "CLASS_REG_WORD+(ARG_RR)",}, | |
514 | { "ra", "CLASS_REG_WORD+(ARG_RA)",}, | |
515 | { "rs", "CLASS_REG_WORD+(ARG_RS)",}, | |
516 | ||
517 | { "1", "CLASS_IMM+(ARG_IMM_1)",}, | |
518 | { "2", "CLASS_IMM+(ARG_IMM_2)",}, | |
519 | ||
520 | 0,0 | |
521 | }; | |
522 | ||
523 | struct tok_struct toks[] = | |
524 | { | |
525 | "0000", "CLASS_BIT+0",1, | |
526 | "0001", "CLASS_BIT+1",1, | |
527 | "0010", "CLASS_BIT+2",1, | |
528 | "0011", "CLASS_BIT+3",1, | |
529 | "0100", "CLASS_BIT+4",1, | |
530 | "0101", "CLASS_BIT+5",1, | |
531 | "0110", "CLASS_BIT+6",1, | |
532 | "0111", "CLASS_BIT+7",1, | |
533 | "1000", "CLASS_BIT+8",1, | |
534 | "1001", "CLASS_BIT+9",1, | |
535 | "1010", "CLASS_BIT+10",1, | |
536 | "1011", "CLASS_BIT+11",1, | |
537 | "1100", "CLASS_BIT+12",1, | |
538 | "1101", "CLASS_BIT+13",1, | |
539 | "1110", "CLASS_BIT+14",1, | |
540 | "1111", "CLASS_BIT+15",1, | |
541 | ||
542 | "ssss", "CLASS_REG+(ARG_RS)",1, | |
543 | "dddd", "CLASS_REG+(ARG_RD)",1, | |
544 | "aaaa", "CLASS_REG+(ARG_RA)",1, | |
545 | "bbbb", "CLASS_REG+(ARG_RB)",1, | |
546 | "rrrr", "CLASS_REG+(ARG_RR)",1, | |
547 | ||
548 | "ssN0", "CLASS_REGN0+(ARG_RS)",1, | |
549 | "ddN0", "CLASS_REGN0+(ARG_RD)",1, | |
550 | "aaN0", "CLASS_REGN0+(ARG_RA)",1, | |
551 | "bbN0", "CLASS_REGN0+(ARG_RB)",1, | |
552 | "rrN0", "CLASS_REGN0+(ARG_RR)",1, | |
553 | ||
554 | "cccc", "CLASS_CC",1, | |
555 | "nnnn", "CLASS_IMM+(ARG_IMMN)",1, | |
556 | "xxxx", "CLASS_REG+(ARG_RX)",1, | |
557 | "xxN0", "CLASS_REGN0+(ARG_RX)",1, | |
558 | "nminus1", "CLASS_IMM+(ARG_IMMNMINUS1)",1, | |
559 | ||
560 | "disp16", "CLASS_DISP+(ARG_DISP16)",4, | |
561 | "disp12", "CLASS_DISP+(ARG_DISP12)",3, | |
562 | "flags", "CLASS_FLAGS",1, | |
563 | "address", "CLASS_ADDRESS",4, | |
564 | "imm4", "CLASS_IMM+(ARG_IMM4)",1, | |
565 | "imm8", "CLASS_IMM+(ARG_IMM8)",2, | |
566 | "imm16", "CLASS_IMM+(ARG_IMM16)",4, | |
567 | "imm32", "CLASS_IMM+(ARG_IMM32)",8, | |
568 | "nim16", "CLASS_IMM+(ARG_NIM16)",4, | |
569 | "0ccc", "CLASS_0CCC",1, | |
570 | "1ccc", "CLASS_1CCC",1, | |
571 | "disp8", "CLASS_DISP8",2, | |
572 | "0disp7", "CLASS_0DISP7",2, | |
573 | "1disp7", "CLASS_1DISP7",2, | |
574 | "01ii", "CLASS_01II",1, | |
575 | "00ii", "CLASS_00II",1, | |
576 | 0,0 | |
577 | ||
578 | }; | |
579 | ||
580 | ||
581 | char *translate(table, x, length) | |
582 | struct tok_struct *table; | |
583 | char *x; | |
584 | int *length; | |
585 | { | |
586 | ||
587 | int found; | |
588 | found = 0; | |
589 | while (table->match) | |
590 | { | |
591 | int l = strlen(table->match); | |
592 | if (strncmp(table->match, x, l) == 0) | |
593 | { | |
594 | /* Got a hit */ | |
595 | printf("%s", table->token); | |
596 | *length += table->length; | |
597 | return x + l; | |
598 | } | |
599 | ||
600 | table++; | |
601 | } | |
602 | fprintf(stderr,"Can't find %s\n", x); | |
603 | while (*x) | |
604 | x++; | |
605 | return x; | |
606 | } | |
607 | ||
608 | ||
609 | void | |
610 | chewbits(bits, length) | |
611 | char *bits; | |
612 | int *length; | |
613 | { | |
614 | int i; | |
615 | int found; | |
616 | ||
617 | int n = 0; | |
618 | *length = 0; | |
619 | printf("{"); | |
620 | while (*bits) | |
621 | { | |
622 | while (*bits == ' ') | |
623 | { | |
624 | bits++; | |
625 | } | |
626 | bits = translate(toks, bits, length); | |
627 | n++; | |
628 | printf(","); | |
629 | ||
630 | } | |
631 | while (n < BYTE_INFO_LEN-1) { | |
632 | printf("0,"); | |
633 | n++; | |
634 | } | |
635 | printf("}"); | |
636 | } | |
637 | ||
638 | doreg(x) | |
639 | char *x; | |
640 | { | |
641 | printf("REGH %c ", x[0]); | |
642 | ||
643 | } | |
644 | int chewname(name) | |
645 | char *name; | |
646 | { | |
647 | char *n; | |
648 | int nargs = 0; | |
649 | int nbytes= 0; | |
650 | n = name; | |
651 | printf("\""); | |
652 | while (*n && !iswhite(*n)) { | |
653 | printf("%c", *n ); | |
654 | n++; | |
655 | } | |
656 | printf("\",{"); | |
657 | /* Scan the operands and make entires for them -remember indirect things */ | |
658 | while (*n) { | |
659 | int d; | |
660 | while (*n == ',' || iswhite(*n)) | |
661 | n++; | |
662 | nargs++; | |
663 | n= translate(args, n, &d); | |
664 | printf(","); | |
665 | } | |
666 | if (nargs == 0) { | |
667 | printf("0"); | |
668 | } | |
669 | printf("},"); | |
670 | return nargs; | |
671 | } | |
672 | sub(x,c) | |
673 | char *x; | |
674 | char c; | |
675 | { | |
676 | while (*x) | |
677 | { | |
678 | if (x[0] == c | |
679 | && x[1] == c | |
680 | && x[2] == c | |
681 | && x[3] == c) { | |
682 | x[2] = 'N'; | |
683 | x[3] = '0'; | |
684 | } | |
685 | x++; | |
686 | } | |
687 | } | |
688 | internal() | |
689 | { | |
690 | int c = count(); | |
691 | struct op *new = malloc(sizeof(struct op) * c); | |
692 | struct op *p = opt; | |
693 | memcpy(new, p, c * sizeof(struct op)); | |
694 | ||
695 | /* sort all names in table alphabetically */ | |
696 | qsort(new, c, sizeof(struct op), func); | |
697 | p = new; | |
698 | while (p->name) { | |
699 | /* If there are any @rs, sub the ssss into a ssn0, | |
700 | (rs), (ssn0) | |
701 | */ | |
702 | int loop = 1; | |
703 | while (loop) { | |
704 | char *s = p->name; | |
705 | loop = 0; | |
706 | while (*s) { | |
707 | if(s[0] == '@') { | |
708 | char c ; | |
709 | /* skip the r and sub the string */ | |
710 | s++; | |
711 | c = s[1]; | |
712 | sub(p->bits,c); | |
713 | } | |
714 | if (s[0] == '(' && s[3] == ')') | |
715 | { | |
716 | sub(p->bits, s[2]); | |
717 | } | |
718 | if (s[0] == '(') | |
719 | { | |
720 | sub(p->bits, s[-1]); | |
721 | } | |
722 | ||
723 | s++; | |
724 | } | |
725 | ||
726 | } | |
727 | printf("\"%s\",\"%s\",\n", p->bits, p->name); | |
728 | p++; | |
729 | } | |
730 | } | |
731 | gas() | |
732 | { | |
733 | ||
734 | int c = count(); | |
735 | int i; | |
736 | struct op *p = opt; | |
737 | int idx = 0; | |
738 | char *oldname = ""; | |
739 | struct op *new = malloc(sizeof(struct op) * c); | |
740 | ||
741 | memcpy(new, p, c * sizeof(struct op)); | |
742 | ||
743 | /* sort all names in table alphabetically */ | |
744 | qsort(new, c, sizeof(struct op), func); | |
745 | ||
746 | printf(" /* THIS FILE IS AUTOMAGICALLY GENERATED, DON'T EDIT IT */\n"); | |
747 | ||
748 | printf("#define ARG_MASK 0x0f\n"); | |
749 | printf("#define ARG_RS 0x01\n"); | |
750 | printf("#define ARG_RD 0x02\n"); | |
751 | printf("#define ARG_RA 0x03\n"); | |
752 | printf("#define ARG_RB 0x04\n"); | |
753 | printf("#define ARG_RR 0x05\n"); | |
754 | printf("#define ARG_RX 0x06\n"); | |
755 | printf("#define ARG_IMM4 0x01\n"); | |
756 | printf("#define ARG_IMM8 0x02\n"); | |
757 | printf("#define ARG_IMM16 0x03\n"); | |
758 | printf("#define ARG_IMM32 0x04\n"); | |
759 | printf("#define ARG_IMMN 0x05\n"); | |
760 | printf("#define ARG_IMMNMINUS1 0x05\n"); | |
761 | printf("#define ARG_IMM_1 0x06\n"); | |
762 | printf("#define ARG_IMM_2 0x07\n"); | |
763 | printf("#define ARG_DISP16 0x08\n"); | |
764 | printf("#define ARG_NIM16 0x09\n"); | |
765 | printf("#define ARG_IMM2 0x0a\n"); | |
766 | printf("#define ARG_DISP12 0x0b\n"); | |
767 | printf("#define ARG_DISP8 0x0c\n"); | |
768 | ||
769 | printf("#define CLASS_MASK 0xfff0\n"); | |
770 | printf("#define CLASS_X 0x10\n"); | |
771 | printf("#define CLASS_BA 0x20\n"); | |
772 | printf("#define CLASS_DA 0x30\n"); | |
773 | printf("#define CLASS_BX 0x40\n"); | |
774 | printf("#define CLASS_DISP 0x50\n"); | |
775 | printf("#define CLASS_IMM 0x60\n"); | |
776 | printf("#define CLASS_CC 0x70\n"); | |
777 | printf("#define CLASS_CTRL 0x80\n"); | |
778 | printf("#define CLASS_ADDRESS 0xd0\n"); | |
779 | printf("#define CLASS_0CCC 0xe0\n"); | |
780 | printf("#define CLASS_1CCC 0xf0\n"); | |
781 | printf("#define CLASS_0DISP7 0x100\n"); | |
782 | printf("#define CLASS_1DISP7 0x200\n"); | |
783 | printf("#define CLASS_01II 0x300\n"); | |
784 | printf("#define CLASS_00II 0x400\n"); | |
785 | printf("#define CLASS_BIT 0x500\n"); | |
786 | printf("#define CLASS_FLAGS 0x600\n"); | |
787 | printf("#define CLASS_IR 0x700\n"); | |
788 | printf("#define CLASS_DISP8 0x800\n"); | |
789 | ||
790 | ||
791 | printf("#define CLASS_REG 0x7000\n"); | |
792 | printf("#define CLASS_REG_BYTE 0x2000\n"); | |
793 | printf("#define CLASS_REG_WORD 0x3000\n"); | |
794 | printf("#define CLASS_REG_QUAD 0x4000\n"); | |
795 | printf("#define CLASS_REG_LONG 0x5000\n"); | |
796 | printf("#define CLASS_REGN0 0x8000\n"); | |
797 | ||
798 | ||
799 | ||
800 | #if 0 | |
801 | for (i = 0; toks[i].token; i++) | |
802 | printf("#define %s\t0x%x\n",toks[i].token,i*16); | |
803 | #endif | |
804 | printf("typedef struct {\n"); | |
805 | printf("char *name;\n"); | |
806 | printf("unsigned short arg_info[4];\n"); | |
807 | printf("unsigned short byte_info[%d];\n", BYTE_INFO_LEN); | |
808 | printf("int noperands;\n"); | |
809 | printf("int length;\n"); | |
810 | printf("int idx;\n"); | |
811 | printf("} opcode_entry_type;\n"); | |
812 | printf("#ifdef DEFINE_TABLE\n"); | |
813 | printf("opcode_entry_type z8k_table[] = {\n"); | |
814 | ||
815 | while (new->name) { | |
816 | int nargs; | |
817 | int length; | |
818 | printf("{"); | |
819 | nargs = chewname(new->name); | |
820 | ||
821 | printf("\n\t"); | |
822 | chewbits(new->bits, &length); | |
823 | length /=2; | |
824 | if (length &1) fail(); | |
825 | ||
826 | printf(",%d,%d,%d", nargs, length, idx); | |
827 | if(strcmp(oldname, new->name)) | |
828 | { | |
829 | idx++; | |
830 | oldname = new->name; | |
831 | } | |
832 | printf("},\n"); | |
833 | new++; | |
834 | } | |
835 | printf("0,0};\n"); | |
836 | printf("#endif\n"); | |
837 | } | |
838 | main(ac,av) | |
839 | int ac; | |
840 | char **av; | |
841 | { | |
842 | struct op *p = opt; | |
843 | ||
844 | if (ac == 2 && strcmp(av[1],"-t")==0) | |
845 | { | |
846 | internal(); | |
847 | } | |
848 | else if (ac == 2 && strcmp(av[1],"-h")==0) | |
849 | { | |
850 | while (p->name) { | |
851 | printf("%-25s\t%s\n", p->name, p->bits); | |
852 | p++; | |
853 | } | |
854 | } | |
855 | ||
856 | else if (ac== 2 && strcmp(av[1], "-a") == 0) | |
857 | { | |
858 | gas(); | |
859 | } | |
860 | else if (ac== 2 && strcmp(av[1], "-d") == 0) | |
861 | { | |
862 | /*dis();*/ | |
863 | } | |
864 | else { | |
865 | printf("Usage: %s -t\n", av[0]); | |
866 | printf("-t : generate new z8.c internal table\n"); | |
867 | printf("-a : generate new table for gas\n"); | |
868 | printf("-d : generate new table for disassemble\n"); | |
869 | printf("-h : generate new table for humans\n"); | |
870 | } | |
871 | ||
872 | ||
873 | } | |
874 | ||
875 | fail() | |
876 | { | |
877 | } | |
878 | ||
879 |