comparison utils/gen_language.ipynb @ 18:256d24488e3f

assembler now handles EQU, ORG and DB
author james <jb302@eecs.qmul.ac.uk>
date Sat, 22 Feb 2014 20:30:58 +0000
parents 2b8eb2c86602
children
comparison
equal deleted inserted replaced
17:9bbdf7258cd8 18:256d24488e3f
29 " \n", 29 " \n",
30 "#pprint(lang) \n" 30 "#pprint(lang) \n"
31 ], 31 ],
32 "language": "python", 32 "language": "python",
33 "metadata": {}, 33 "metadata": {},
34 "outputs": [], 34 "outputs": []
35 "prompt_number": 1
36 }, 35 },
37 { 36 {
38 "cell_type": "code", 37 "cell_type": "code",
39 "collapsed": false, 38 "collapsed": false,
40 "input": [ 39 "input": [
60 " for a in line[1]:\n", 59 " for a in line[1]:\n",
61 " if a in consts:\n", 60 " if a in consts:\n",
62 " width = width + consts[a]\n", 61 " width = width + consts[a]\n",
63 " valid_args.update({tuple(line[1]):[int(codes[i]), width]})\n", 62 " valid_args.update({tuple(line[1]):[int(codes[i]), width]})\n",
64 " \n", 63 " \n",
64 " found_label = 0\n",
65 " for a in line[1]:\n", 65 " for a in line[1]:\n",
66 " found_label = 0\n",
67 " if a in labelable:\n", 66 " if a in labelable:\n",
68 " found_label = 1\n", 67 " found_label = 1\n",
69 " args.append('label')\n", 68 " args.append('label')\n",
69 " elif a == '@addr16':\n",
70 " found_label = 1\n",
71 " args.append('@label')\n",
70 " else:\n", 72 " else:\n",
71 " args.append(a)\n", 73 " args.append(a)\n",
72 " if found_label:\n", 74 " if found_label:\n",
73 " valid_args.update({tuple(args):[int(codes[i]), width]})\n", 75 " valid_args.update({tuple(args):[int(codes[i]), width]})\n",
74 " \n", 76 " \n",
75 " i = i + 1\n", 77 " i = i + 1\n",
76 " iset.update({mne:valid_args})\n", 78 " iset.update({mne:valid_args})\n",
77 "#pprint(iset, indent=5)\n" 79 "pprint(iset, indent=5)\n"
78 ], 80 ],
79 "language": "python", 81 "language": "python",
80 "metadata": {}, 82 "metadata": {},
81 "outputs": [], 83 "outputs": [
82 "prompt_number": 2 84 {
85 "output_type": "stream",
86 "stream": "stdout",
87 "text": [
88 "{ 'add': { ('a', '#data8'): [166, 2],\n",
89 " ('a', '@dptr'): [167, 1],\n",
90 " ('a', 'dph'): [164, 1],\n",
91 " ('a', 'dpl'): [165, 1],\n",
92 " ('a', 'r0'): [160, 1],\n",
93 " ('a', 'r1'): [161, 1],\n",
94 " ('a', 'r2'): [162, 1],\n",
95 " ('a', 'r3'): [163, 1]},\n",
96 " 'addc': { ('a', '#data8'): [174, 2],\n",
97 " ('a', '@dptr'): [175, 1],\n",
98 " ('a', 'dph'): [172, 1],\n",
99 " ('a', 'dpl'): [173, 1],\n",
100 " ('a', 'r0'): [168, 1],\n",
101 " ('a', 'r1'): [169, 1],\n",
102 " ('a', 'r2'): [170, 1],\n",
103 " ('a', 'r3'): [171, 1]},\n",
104 " 'anl': { ('a', '#data8'): [134, 2],\n",
105 " ('a', '@dptr'): [135, 1],\n",
106 " ('a', 'dph'): [132, 1],\n",
107 " ('a', 'dpl'): [133, 1],\n",
108 " ('a', 'r0'): [128, 1],\n",
109 " ('a', 'r1'): [129, 1],\n",
110 " ('a', 'r2'): [130, 1],\n",
111 " ('a', 'r3'): [131, 1]},\n",
112 " 'cjne': { ('a', '#data8', 'label'): [223, 3],\n",
113 " ('a', '#data8', 'rel8'): [223, 3],\n",
114 " ('r0', '#data', 'label'): [212, 2],\n",
115 " ('r0', '#data', 'rel8'): [212, 2],\n",
116 " ('r1', '#data', 'label'): [213, 2],\n",
117 " ('r1', '#data', 'rel8'): [213, 2],\n",
118 " ('r2', '#data', 'label'): [214, 2],\n",
119 " ('r2', '#data', 'rel8'): [214, 2],\n",
120 " ('r3', '#data', 'label'): [215, 2],\n",
121 " ('r3', '#data', 'rel8'): [215, 2]},\n",
122 " 'clr': { ('bs',): [11, 1], ('c',): [9, 1], ('ie',): [13, 1]},\n",
123 " 'cpl': { ('a',): [15, 1], ('c',): [14, 1]},\n",
124 " 'da': { ('a',): [250, 1]},\n",
125 " 'dec': { ('a',): [159, 1], ('dptr',): [157, 1]},\n",
126 " 'div': { ('r0', 'r1'): [249, 1]},\n",
127 " 'djnz': { ('r0', 'label'): [208, 2],\n",
128 " ('r0', 'rel8'): [208, 2],\n",
129 " ('r1', 'label'): [209, 2],\n",
130 " ('r1', 'rel8'): [209, 2],\n",
131 " ('r2', 'label'): [210, 2],\n",
132 " ('r2', 'rel8'): [210, 2],\n",
133 " ('r3', 'label'): [211, 2],\n",
134 " ('r3', 'rel8'): [211, 2]},\n",
135 " 'hlt': { ('',): [255, 1]},\n",
136 " 'in': { ('a', 'port_addr'): [252, 2]},\n",
137 " 'inc': { ('a',): [158, 1], ('dptr',): [156, 1]},\n",
138 " 'int': { ('vect8',): [254, 2]},\n",
139 " 'jc': { ('label',): [226, 2], ('rel8',): [226, 2]},\n",
140 " 'jmp': { ('@a+dptr',): [221, 1], ('@dptr',): [222, 1]},\n",
141 " 'jnc': { ('label',): [227, 2], ('rel8',): [227, 2]},\n",
142 " 'jns': { ('label',): [231, 2], ('rel8',): [231, 2]},\n",
143 " 'jnz': { ('label',): [225, 2], ('rel8',): [225, 2]},\n",
144 " 'jpe': { ('label',): [229, 2], ('rel8',): [229, 2]},\n",
145 " 'jpo': { ('label',): [228, 2], ('rel8',): [228, 2]},\n",
146 " 'js': { ('label',): [230, 2], ('rel8',): [230, 2]},\n",
147 " 'jz': { ('label',): [224, 2], ('rel8',): [224, 2]},\n",
148 " 'laf': { ('',): [18, 1]},\n",
149 " 'lcall': { ('addr16',): [217, 3], ('label',): [217, 3]},\n",
150 " 'ljmp': { ('addr16',): [216, 3], ('label',): [216, 3]},\n",
151 " 'mov': { ('@addr16', 'a'): [29, 3],\n",
152 " ('@dptr', 'a'): [31, 1],\n",
153 " ('@dptr', 'dph'): [36, 1],\n",
154 " ('@dptr', 'dpl'): [37, 1],\n",
155 " ('@dptr', 'r0'): [32, 1],\n",
156 " ('@dptr', 'r1'): [33, 1],\n",
157 " ('@dptr', 'r2'): [34, 1],\n",
158 " ('@dptr', 'r3'): [35, 1],\n",
159 " ('@dptr', 'sph'): [38, 1],\n",
160 " ('@dptr', 'spl'): [39, 1],\n",
161 " ('@label', 'a'): [29, 3],\n",
162 " ('a', '#data8'): [21, 2],\n",
163 " ('a', '@a+dptr'): [26, 1],\n",
164 " ('a', '@a+pc'): [27, 1],\n",
165 " ('a', '@addr16'): [28, 3],\n",
166 " ('a', '@dptr'): [30, 1],\n",
167 " ('a', '@label'): [28, 3],\n",
168 " ('a', 'addr16'): [24, 3],\n",
169 " ('a', 'dph'): [60, 1],\n",
170 " ('a', 'dpl'): [61, 1],\n",
171 " ('a', 'label'): [24, 3],\n",
172 " ('a', 'r0'): [56, 1],\n",
173 " ('a', 'r1'): [57, 1],\n",
174 " ('a', 'r2'): [58, 1],\n",
175 " ('a', 'r3'): [59, 1],\n",
176 " ('a', 'sph'): [62, 1],\n",
177 " ('a', 'spl'): [63, 1],\n",
178 " ('addr16', 'a'): [25, 3],\n",
179 " ('dph', '#data8'): [44, 2],\n",
180 " ('dph', '@dptr'): [100, 1],\n",
181 " ('dph', 'a'): [52, 1],\n",
182 " ('dph', 'dpl'): [101, 1],\n",
183 " ('dph', 'r0'): [96, 1],\n",
184 " ('dph', 'r1'): [97, 1],\n",
185 " ('dph', 'r2'): [98, 1],\n",
186 " ('dph', 'r3'): [99, 1],\n",
187 " ('dph', 'sph'): [102, 1],\n",
188 " ('dph', 'spl'): [103, 1],\n",
189 " ('dpl', '#data8'): [45, 2],\n",
190 " ('dpl', '@dptr'): [109, 1],\n",
191 " ('dpl', 'a'): [53, 1],\n",
192 " ('dpl', 'dph'): [108, 1],\n",
193 " ('dpl', 'r0'): [104, 1],\n",
194 " ('dpl', 'r1'): [105, 1],\n",
195 " ('dpl', 'r2'): [106, 1],\n",
196 " ('dpl', 'r3'): [107, 1],\n",
197 " ('dpl', 'sph'): [110, 1],\n",
198 " ('dpl', 'spl'): [111, 1],\n",
199 " ('dptr', '#data16'): [23, 3],\n",
200 " ('dptr', 'sp'): [19, 1],\n",
201 " ('label', 'a'): [25, 3],\n",
202 " ('r0', '#data8'): [40, 2],\n",
203 " ('r0', '@dptr'): [64, 1],\n",
204 " ('r0', 'a'): [48, 1],\n",
205 " ('r0', 'dph'): [68, 1],\n",
206 " ('r0', 'dpl'): [69, 1],\n",
207 " ('r0', 'r1'): [65, 1],\n",
208 " ('r0', 'r2'): [66, 1],\n",
209 " ('r0', 'r3'): [67, 1],\n",
210 " ('r0', 'sph'): [70, 1],\n",
211 " ('r0', 'spl'): [71, 1],\n",
212 " ('r1', '#data8'): [41, 2],\n",
213 " ('r1', '@dptr'): [73, 1],\n",
214 " ('r1', 'a'): [49, 1],\n",
215 " ('r1', 'dph'): [76, 1],\n",
216 " ('r1', 'dpl'): [77, 1],\n",
217 " ('r1', 'r0'): [72, 1],\n",
218 " ('r1', 'r2'): [74, 1],\n",
219 " ('r1', 'r3'): [75, 1],\n",
220 " ('r1', 'sph'): [78, 1],\n",
221 " ('r1', 'spl'): [79, 1],\n",
222 " ('r2', '#data8'): [42, 2],\n",
223 " ('r2', '@dptr'): [82, 1],\n",
224 " ('r2', 'a'): [50, 1],\n",
225 " ('r2', 'dph'): [84, 1],\n",
226 " ('r2', 'dpl'): [85, 1],\n",
227 " ('r2', 'r0'): [80, 1],\n",
228 " ('r2', 'r1'): [81, 1],\n",
229 " ('r2', 'r3'): [83, 1],\n",
230 " ('r2', 'sph'): [86, 1],\n",
231 " ('r2', 'spl'): [87, 1],\n",
232 " ('r3', '#data8'): [43, 2],\n",
233 " ('r3', '@dptr'): [91, 1],\n",
234 " ('r3', 'a'): [51, 1],\n",
235 " ('r3', 'dph'): [92, 1],\n",
236 " ('r3', 'dpl'): [93, 1],\n",
237 " ('r3', 'r0'): [88, 1],\n",
238 " ('r3', 'r1'): [89, 1],\n",
239 " ('r3', 'r2'): [90, 1],\n",
240 " ('r3', 'sph'): [94, 1],\n",
241 " ('r3', 'spl'): [95, 1],\n",
242 " ('sp', '#data16'): [22, 3],\n",
243 " ('sp', 'dptr'): [20, 1],\n",
244 " ('sph', '#data8'): [46, 2],\n",
245 " ('sph', '@dptr'): [118, 1],\n",
246 " ('sph', 'a'): [54, 1],\n",
247 " ('sph', 'dph'): [116, 1],\n",
248 " ('sph', 'dpl'): [117, 1],\n",
249 " ('sph', 'r0'): [112, 1],\n",
250 " ('sph', 'r1'): [113, 1],\n",
251 " ('sph', 'r2'): [114, 1],\n",
252 " ('sph', 'r3'): [115, 1],\n",
253 " ('sph', 'spl'): [119, 1],\n",
254 " ('spl', '#data8'): [47, 2],\n",
255 " ('spl', '@dptr'): [127, 1],\n",
256 " ('spl', 'a'): [55, 1],\n",
257 " ('spl', 'dph'): [124, 1],\n",
258 " ('spl', 'dpl'): [125, 1],\n",
259 " ('spl', 'r0'): [120, 1],\n",
260 " ('spl', 'r1'): [121, 1],\n",
261 " ('spl', 'r2'): [122, 1],\n",
262 " ('spl', 'r3'): [123, 1],\n",
263 " ('spl', 'sph'): [126, 1]},\n",
264 " 'mul': { ('r0', 'r1'): [248, 1]},\n",
265 " 'nop': { ('',): [0, 1]},\n",
266 " 'orl': { ('a', '#data8'): [142, 2],\n",
267 " ('a', '@dptr'): [143, 1],\n",
268 " ('a', 'dph'): [140, 1],\n",
269 " ('a', 'dpl'): [141, 1],\n",
270 " ('a', 'r0'): [136, 1],\n",
271 " ('a', 'r1'): [137, 1],\n",
272 " ('a', 'r2'): [138, 1],\n",
273 " ('a', 'r3'): [139, 1]},\n",
274 " 'out': { ('port_addr', 'a'): [253, 2]},\n",
275 " 'pcall': { ('addr11',): [207, 2], ('label',): [207, 2]},\n",
276 " 'pjmp': { ('addr11',): [199, 2], ('label',): [199, 2]},\n",
277 " 'pop': { ('a',): [246, 1],\n",
278 " ('dph',): [244, 1],\n",
279 " ('dpl',): [245, 1],\n",
280 " ('flags',): [247, 1],\n",
281 " ('r0',): [240, 1],\n",
282 " ('r1',): [241, 1],\n",
283 " ('r2',): [242, 1],\n",
284 " ('r3',): [243, 1]},\n",
285 " 'push': { ('a',): [238, 1],\n",
286 " ('dph',): [236, 1],\n",
287 " ('dpl',): [237, 1],\n",
288 " ('flags',): [239, 1],\n",
289 " ('r0',): [232, 1],\n",
290 " ('r1',): [233, 1],\n",
291 " ('r2',): [234, 1],\n",
292 " ('r3',): [235, 1]},\n",
293 " 'reserved': { ('',): [251, 1]},\n",
294 " 'ret': { ('',): [218, 1]},\n",
295 " 'reti': { ('',): [219, 1]},\n",
296 " 'rl': { ('a',): [152, 1]"
297 ]
298 },
299 {
300 "output_type": "stream",
301 "stream": "stdout",
302 "text": [
303 "},\n",
304 " 'rlc': { ('a',): [153, 1]},\n",
305 " 'rr': { ('a',): [154, 1]},\n",
306 " 'rrc': { ('a',): [155, 1]},\n",
307 " 'set': { ('bs',): [10, 1], ('c',): [8, 1], ('ie',): [12, 1]},\n",
308 " 'sfa': { ('',): [17, 1]},\n",
309 " 'sjmp': { ('label',): [220, 2], ('rel8',): [220, 2]},\n",
310 " 'sub': { ('a', '#data8'): [182, 2],\n",
311 " ('a', '@dptr'): [183, 1],\n",
312 " ('a', 'dph'): [180, 1],\n",
313 " ('a', 'dpl'): [181, 1],\n",
314 " ('a', 'r0'): [176, 1],\n",
315 " ('a', 'r1'): [177, 1],\n",
316 " ('a', 'r2'): [178, 1],\n",
317 " ('a', 'r3'): [179, 1]},\n",
318 " 'subb': { ('a', '#data8'): [190, 2],\n",
319 " ('a', '@dptr'): [191, 1],\n",
320 " ('a', 'dph'): [188, 1],\n",
321 " ('a', 'dpl'): [189, 1],\n",
322 " ('a', 'r0'): [184, 1],\n",
323 " ('a', 'r1'): [185, 1],\n",
324 " ('a', 'r2'): [186, 1],\n",
325 " ('a', 'r3'): [187, 1]},\n",
326 " 'xcsd': { ('',): [16, 1]},\n",
327 " 'xrl': { ('a', '#data8'): [150, 2],\n",
328 " ('a', '@dptr'): [151, 1],\n",
329 " ('a', 'dph'): [148, 1],\n",
330 " ('a', 'dpl'): [149, 1],\n",
331 " ('a', 'r0'): [144, 1],\n",
332 " ('a', 'r1'): [145, 1],\n",
333 " ('a', 'r2'): [146, 1],\n",
334 " ('a', 'r3'): [147, 1]}}\n"
335 ]
336 }
337 ],
338 "prompt_number": 11
83 }, 339 },
84 { 340 {
85 "cell_type": "code", 341 "cell_type": "code",
86 "collapsed": false, 342 "collapsed": false,
87 "input": [ 343 "input": [
94 " print \"%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, \" % (optable[(i*15)], optable[(i*15)+1], optable[(i*15)+2], optable[(i*15)+3], optable[(i*15)+4], optable[(i*15)+5], optable[(i*15)+6], optable[(i*15)+7], optable[(i*15)+8], optable[(i*15)+9], optable[(i*15)+10], optable[(i*15)+11], optable[(i*15)+12], optable[(i*15)+13], optable[(i*15)+14])\n", 350 " print \"%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, \" % (optable[(i*15)], optable[(i*15)+1], optable[(i*15)+2], optable[(i*15)+3], optable[(i*15)+4], optable[(i*15)+5], optable[(i*15)+6], optable[(i*15)+7], optable[(i*15)+8], optable[(i*15)+9], optable[(i*15)+10], optable[(i*15)+11], optable[(i*15)+12], optable[(i*15)+13], optable[(i*15)+14])\n",
95 "\n" 351 "\n"
96 ], 352 ],
97 "language": "python", 353 "language": "python",
98 "metadata": {}, 354 "metadata": {},
99 "outputs": [ 355 "outputs": []
100 {
101 "output_type": "stream",
102 "stream": "stdout",
103 "text": [
104 "nop, reserved, reserved, reserved, reserved\n",
105 "reserved, reserved, reserved, set, clr\n",
106 "set, clr, set, clr, cpl\n",
107 "cpl, xcsd, sfa, laf, mov\n",
108 "mov, mov, mov, mov, mov\n",
109 "mov, mov, mov, mov, mov\n",
110 "mov, mov, mov, mov, mov\n",
111 "mov, mov, mov, mov, mov\n",
112 "mov, mov, mov, mov, mov\n",
113 "mov, mov, mov, mov, mov\n",
114 "mov, mov, mov, mov, mov\n",
115 "mov, mov, mov, mov, mov\n",
116 "mov, mov, mov, mov, mov\n",
117 "mov, mov, mov, mov, mov\n",
118 "mov, mov, mov, mov, mov\n",
119 "mov, mov, mov, mov, mov\n",
120 "mov, mov, mov, mov, mov\n",
121 "mov, mov, mov, mov, mov\n",
122 "mov, mov, mov, mov, mov\n",
123 "mov, mov, mov, mov, mov\n",
124 "mov, mov, mov, mov, mov\n",
125 "mov, mov, mov, mov, mov\n",
126 "mov, mov, mov, mov, mov\n",
127 "mov, mov, mov, mov, mov\n",
128 "mov, mov, mov, mov, mov\n",
129 "mov, mov, mov, anl, anl\n",
130 "anl, anl, anl, anl, anl\n",
131 "anl, orl, orl, orl, orl\n",
132 "orl, orl, orl, orl, xrl\n",
133 "xrl, xrl, xrl, xrl, xrl\n",
134 "xrl, xrl, rl, rlc, rr\n",
135 "rrc, inc, dec, inc, dec\n",
136 "add, add, add, add, add\n",
137 "add, add, add, addc, addc\n",
138 "addc, addc, addc, addc, addc\n",
139 "addc, sub, sub, sub, sub\n",
140 "sub, sub, sub, sub, subb\n",
141 "subb, subb, subb, subb, subb\n",
142 "subb, subb, pjmp, pjmp, pjmp\n",
143 "pjmp, pjmp, pjmp, pjmp, pjmp\n",
144 "pcall, pcall, pcall, pcall, pcall\n",
145 "pcall, pcall, pcall, djnz, djnz\n",
146 "djnz, djnz, cjne, cjne, cjne\n",
147 "cjne, ljmp, lcall, ret, reti\n",
148 "sjmp, jmp, jmp, cjne, jz\n",
149 "jnz, jc, jnc, jpo, jpe\n",
150 "js, jns, push, push, push\n",
151 "push, push, push, push, push\n",
152 "pop, pop, pop, pop, pop\n",
153 "pop, pop, pop, mul, div\n",
154 "da, reserved, in, out, int\n"
155 ]
156 }
157 ],
158 "prompt_number": 3
159 }, 356 },
160 { 357 {
161 "cell_type": "code", 358 "cell_type": "code",
162 "collapsed": false, 359 "collapsed": false,
163 "input": [ 360 "input": [
169 "#for mne in mne_set:\n", 366 "#for mne in mne_set:\n",
170 "# print \"void\\n%s(void);\\n\" % mne.upper()\n" 367 "# print \"void\\n%s(void);\\n\" % mne.upper()\n"
171 ], 368 ],
172 "language": "python", 369 "language": "python",
173 "metadata": {}, 370 "metadata": {},
174 "outputs": [], 371 "outputs": []
175 "prompt_number": 2 372 },
176 }, 373 {
177 { 374 "cell_type": "code",
178 "cell_type": "code", 375 "collapsed": false,
179 "collapsed": false, 376 "input": [],
180 "input": [ 377 "language": "python",
181 "float(255)/15\n" 378 "metadata": {},
182 ], 379 "outputs": []
183 "language": "python",
184 "metadata": {},
185 "outputs": [
186 {
187 "output_type": "pyout",
188 "prompt_number": 13,
189 "text": [
190 "17.0"
191 ]
192 }
193 ],
194 "prompt_number": 13
195 }, 380 },
196 { 381 {
197 "cell_type": "code", 382 "cell_type": "code",
198 "collapsed": false, 383 "collapsed": false,
199 "input": [], 384 "input": [],