jb302@1
|
1 {
|
jb302@1
|
2 "metadata": {
|
jb302@1
|
3 "name": "gen_language"
|
jb302@1
|
4 },
|
jb302@1
|
5 "nbformat": 3,
|
jb302@1
|
6 "nbformat_minor": 0,
|
jb302@1
|
7 "worksheets": [
|
jb302@1
|
8 {
|
jb302@1
|
9 "cells": [
|
jb302@1
|
10 {
|
jb302@1
|
11 "cell_type": "code",
|
jb302@1
|
12 "collapsed": false,
|
jb302@1
|
13 "input": [
|
jb302@1
|
14 "from pprint import pprint\n",
|
jb302@1
|
15 "import sys\n",
|
jb302@1
|
16 "sys.path.append('../assembler')\n",
|
jb302@1
|
17 "from assembler import *\n",
|
jb302@14
|
18 "f = open('iset.csv', 'r')\n",
|
jb302@1
|
19 "\n",
|
jb302@1
|
20 "codes = []\n",
|
jb302@14
|
21 "lang = []\n",
|
jb302@14
|
22 "for line in f:\n",
|
jb302@14
|
23 " line = line.split(';')\n",
|
jb302@14
|
24 " codes.append(int(line[0]))\n",
|
jb302@14
|
25 " statement = line[1].strip().lower().split()\n",
|
jb302@14
|
26 " mnemonic = statement[0]\n",
|
jb302@14
|
27 " arguments = ''.join(statement[1:]).split(',')\n",
|
jb302@14
|
28 " lang.append([mnemonic, arguments])\n",
|
jb302@14
|
29 " \n",
|
jb302@14
|
30 "#pprint(lang) \n"
|
jb302@1
|
31 ],
|
jb302@1
|
32 "language": "python",
|
jb302@1
|
33 "metadata": {},
|
jb302@1
|
34 "outputs": [],
|
jb302@14
|
35 "prompt_number": 1
|
jb302@1
|
36 },
|
jb302@1
|
37 {
|
jb302@1
|
38 "cell_type": "code",
|
jb302@1
|
39 "collapsed": false,
|
jb302@1
|
40 "input": [
|
jb302@14
|
41 "consts = { 'addr11':1, 'addr16':2, '@addr16':2, 'vect8':1, '#data8':1, 'port_addr':1, 'rel8':1, '#data16':2}\n",
|
jb302@14
|
42 "labelable = ('addr11', 'addr16', 'rel8')\n",
|
jb302@14
|
43 "\n",
|
jb302@1
|
44 "mne_syms = []\n",
|
jb302@1
|
45 "arg_syms = []\n",
|
jb302@1
|
46 "for line in lang:\n",
|
jb302@1
|
47 " mne_syms.append(line[0])\n",
|
jb302@1
|
48 " arg_syms.extend(line[1])\n",
|
jb302@1
|
49 "mne_set = set(mne_syms)\n",
|
jb302@1
|
50 "arg_set = set(arg_syms)\n",
|
jb302@1
|
51 "\n",
|
jb302@1
|
52 "iset = {}\n",
|
jb302@1
|
53 "for mne in mne_set:\n",
|
jb302@1
|
54 " i = 0\n",
|
jb302@1
|
55 " valid_args = {}\n",
|
jb302@1
|
56 " for line in lang:\n",
|
jb302@14
|
57 " args = []\n",
|
jb302@1
|
58 " if line[0] == mne:\n",
|
jb302@14
|
59 " width = 1\n",
|
jb302@14
|
60 " for a in line[1]:\n",
|
jb302@14
|
61 " if a in consts:\n",
|
jb302@14
|
62 " width = width + consts[a]\n",
|
jb302@14
|
63 " valid_args.update({tuple(line[1]):[int(codes[i]), width]})\n",
|
jb302@14
|
64 " \n",
|
jb302@14
|
65 " for a in line[1]:\n",
|
jb302@14
|
66 " found_label = 0\n",
|
jb302@14
|
67 " if a in labelable:\n",
|
jb302@14
|
68 " found_label = 1\n",
|
jb302@14
|
69 " args.append('label')\n",
|
jb302@14
|
70 " else:\n",
|
jb302@14
|
71 " args.append(a)\n",
|
jb302@14
|
72 " if found_label:\n",
|
jb302@14
|
73 " valid_args.update({tuple(args):[int(codes[i]), width]})\n",
|
jb302@14
|
74 " \n",
|
jb302@1
|
75 " i = i + 1\n",
|
jb302@1
|
76 " iset.update({mne:valid_args})\n",
|
jb302@14
|
77 "#pprint(iset, indent=5)\n"
|
jb302@1
|
78 ],
|
jb302@1
|
79 "language": "python",
|
jb302@1
|
80 "metadata": {},
|
jb302@14
|
81 "outputs": [],
|
jb302@14
|
82 "prompt_number": 2
|
jb302@14
|
83 },
|
jb302@14
|
84 {
|
jb302@14
|
85 "cell_type": "code",
|
jb302@14
|
86 "collapsed": false,
|
jb302@14
|
87 "input": [
|
jb302@14
|
88 "# generate function lookup table\n",
|
jb302@14
|
89 "optable = []\n",
|
jb302@14
|
90 "for l in lang:\n",
|
jb302@14
|
91 " optable.append(l[0])\n",
|
jb302@14
|
92 "\n",
|
jb302@14
|
93 "for i in range(17):\n",
|
jb302@14
|
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",
|
jb302@14
|
95 "\n"
|
jb302@14
|
96 ],
|
jb302@14
|
97 "language": "python",
|
jb302@14
|
98 "metadata": {},
|
jb302@14
|
99 "outputs": [
|
jb302@14
|
100 {
|
jb302@14
|
101 "output_type": "stream",
|
jb302@14
|
102 "stream": "stdout",
|
jb302@14
|
103 "text": [
|
jb302@14
|
104 "nop, reserved, reserved, reserved, reserved\n",
|
jb302@14
|
105 "reserved, reserved, reserved, set, clr\n",
|
jb302@14
|
106 "set, clr, set, clr, cpl\n",
|
jb302@14
|
107 "cpl, xcsd, sfa, laf, mov\n",
|
jb302@14
|
108 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
109 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
110 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
111 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
112 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
113 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
114 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
115 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
116 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
117 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
118 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
119 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
120 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
121 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
122 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
123 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
124 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
125 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
126 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
127 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
128 "mov, mov, mov, mov, mov\n",
|
jb302@14
|
129 "mov, mov, mov, anl, anl\n",
|
jb302@14
|
130 "anl, anl, anl, anl, anl\n",
|
jb302@14
|
131 "anl, orl, orl, orl, orl\n",
|
jb302@14
|
132 "orl, orl, orl, orl, xrl\n",
|
jb302@14
|
133 "xrl, xrl, xrl, xrl, xrl\n",
|
jb302@14
|
134 "xrl, xrl, rl, rlc, rr\n",
|
jb302@14
|
135 "rrc, inc, dec, inc, dec\n",
|
jb302@14
|
136 "add, add, add, add, add\n",
|
jb302@14
|
137 "add, add, add, addc, addc\n",
|
jb302@14
|
138 "addc, addc, addc, addc, addc\n",
|
jb302@14
|
139 "addc, sub, sub, sub, sub\n",
|
jb302@14
|
140 "sub, sub, sub, sub, subb\n",
|
jb302@14
|
141 "subb, subb, subb, subb, subb\n",
|
jb302@14
|
142 "subb, subb, pjmp, pjmp, pjmp\n",
|
jb302@14
|
143 "pjmp, pjmp, pjmp, pjmp, pjmp\n",
|
jb302@14
|
144 "pcall, pcall, pcall, pcall, pcall\n",
|
jb302@14
|
145 "pcall, pcall, pcall, djnz, djnz\n",
|
jb302@14
|
146 "djnz, djnz, cjne, cjne, cjne\n",
|
jb302@14
|
147 "cjne, ljmp, lcall, ret, reti\n",
|
jb302@14
|
148 "sjmp, jmp, jmp, cjne, jz\n",
|
jb302@14
|
149 "jnz, jc, jnc, jpo, jpe\n",
|
jb302@14
|
150 "js, jns, push, push, push\n",
|
jb302@14
|
151 "push, push, push, push, push\n",
|
jb302@14
|
152 "pop, pop, pop, pop, pop\n",
|
jb302@14
|
153 "pop, pop, pop, mul, div\n",
|
jb302@14
|
154 "da, reserved, in, out, int\n"
|
jb302@14
|
155 ]
|
jb302@14
|
156 }
|
jb302@14
|
157 ],
|
jb302@14
|
158 "prompt_number": 3
|
jb302@14
|
159 },
|
jb302@14
|
160 {
|
jb302@14
|
161 "cell_type": "code",
|
jb302@14
|
162 "collapsed": false,
|
jb302@14
|
163 "input": [
|
jb302@14
|
164 "# print function templates\n",
|
jb302@14
|
165 "#for mne in mne_set:\n",
|
jb302@14
|
166 "# print \"//implement me\\nvoid\\n%s(void) {\\n registers.PC = registers.PC + 1;\\n}\\n\" % mne.upper()\n",
|
jb302@14
|
167 "\n",
|
jb302@14
|
168 "# print function definitions\n",
|
jb302@14
|
169 "#for mne in mne_set:\n",
|
jb302@14
|
170 "# print \"void\\n%s(void);\\n\" % mne.upper()\n"
|
jb302@14
|
171 ],
|
jb302@14
|
172 "language": "python",
|
jb302@14
|
173 "metadata": {},
|
jb302@14
|
174 "outputs": [],
|
jb302@14
|
175 "prompt_number": 2
|
jb302@14
|
176 },
|
jb302@14
|
177 {
|
jb302@14
|
178 "cell_type": "code",
|
jb302@14
|
179 "collapsed": false,
|
jb302@14
|
180 "input": [
|
jb302@14
|
181 "float(255)/15\n"
|
jb302@14
|
182 ],
|
jb302@14
|
183 "language": "python",
|
jb302@14
|
184 "metadata": {},
|
jb302@14
|
185 "outputs": [
|
jb302@14
|
186 {
|
jb302@14
|
187 "output_type": "pyout",
|
jb302@14
|
188 "prompt_number": 13,
|
jb302@14
|
189 "text": [
|
jb302@14
|
190 "17.0"
|
jb302@14
|
191 ]
|
jb302@14
|
192 }
|
jb302@14
|
193 ],
|
jb302@14
|
194 "prompt_number": 13
|
jb302@14
|
195 },
|
jb302@14
|
196 {
|
jb302@14
|
197 "cell_type": "code",
|
jb302@14
|
198 "collapsed": false,
|
jb302@14
|
199 "input": [],
|
jb302@14
|
200 "language": "python",
|
jb302@14
|
201 "metadata": {},
|
jb302@1
|
202 "outputs": []
|
jb302@1
|
203 }
|
jb302@1
|
204 ],
|
jb302@1
|
205 "metadata": {}
|
jb302@1
|
206 }
|
jb302@1
|
207 ]
|
jb302@1
|
208 } |