comparison utils/gen_language.ipynb @ 14:2b8eb2c86602

Major update to assembler design, now handles labels proper. Next step unit test Added boot procedure and experimental function look up table to emulator Started implementing operations tested SET and CLR operations with success
author james <jb302@eecs.qmul.ac.uk>
date Wed, 29 Jan 2014 20:11:07 +0000
parents 82e82dda442b
children 256d24488e3f
comparison
equal deleted inserted replaced
13:7a988d894f74 14:2b8eb2c86602
13 "input": [ 13 "input": [
14 "from pprint import pprint\n", 14 "from pprint import pprint\n",
15 "import sys\n", 15 "import sys\n",
16 "sys.path.append('../assembler')\n", 16 "sys.path.append('../assembler')\n",
17 "from assembler import *\n", 17 "from assembler import *\n",
18 "f = open('instruction_set.txt', 'r')\n", 18 "f = open('iset.csv', 'r')\n",
19 "lang = first_pass(f)\n", 19 "\n",
20 "\n",
21 "r = open('instruction_table.txt', 'r')\n",
22 "r = filter(lambda l: l != '\\n', r.readlines())\n",
23 "codes = []\n", 20 "codes = []\n",
24 "for line in r:\n", 21 "lang = []\n",
25 " codes.append(line.split()[0])\n", 22 "for line in f:\n",
26 " " 23 " line = line.split(';')\n",
24 " codes.append(int(line[0]))\n",
25 " statement = line[1].strip().lower().split()\n",
26 " mnemonic = statement[0]\n",
27 " arguments = ''.join(statement[1:]).split(',')\n",
28 " lang.append([mnemonic, arguments])\n",
29 " \n",
30 "#pprint(lang) \n"
27 ], 31 ],
28 "language": "python", 32 "language": "python",
29 "metadata": {}, 33 "metadata": {},
30 "outputs": [], 34 "outputs": [],
31 "prompt_number": 2 35 "prompt_number": 1
32 }, 36 },
33 { 37 {
34 "cell_type": "code", 38 "cell_type": "code",
35 "collapsed": false, 39 "collapsed": false,
36 "input": [ 40 "input": [
41 "consts = { 'addr11':1, 'addr16':2, '@addr16':2, 'vect8':1, '#data8':1, 'port_addr':1, 'rel8':1, '#data16':2}\n",
42 "labelable = ('addr11', 'addr16', 'rel8')\n",
43 "\n",
37 "mne_syms = []\n", 44 "mne_syms = []\n",
38 "arg_syms = []\n", 45 "arg_syms = []\n",
39 "for line in lang:\n", 46 "for line in lang:\n",
40 " mne_syms.append(line[0])\n", 47 " mne_syms.append(line[0])\n",
41 " arg_syms.extend(line[1])\n", 48 " arg_syms.extend(line[1])\n",
45 "iset = {}\n", 52 "iset = {}\n",
46 "for mne in mne_set:\n", 53 "for mne in mne_set:\n",
47 " i = 0\n", 54 " i = 0\n",
48 " valid_args = {}\n", 55 " valid_args = {}\n",
49 " for line in lang:\n", 56 " for line in lang:\n",
57 " args = []\n",
50 " if line[0] == mne:\n", 58 " if line[0] == mne:\n",
51 " valid_args.update({tuple(line[1]):int(codes[i])})\n", 59 " width = 1\n",
60 " for a in line[1]:\n",
61 " if a in consts:\n",
62 " width = width + consts[a]\n",
63 " valid_args.update({tuple(line[1]):[int(codes[i]), width]})\n",
64 " \n",
65 " for a in line[1]:\n",
66 " found_label = 0\n",
67 " if a in labelable:\n",
68 " found_label = 1\n",
69 " args.append('label')\n",
70 " else:\n",
71 " args.append(a)\n",
72 " if found_label:\n",
73 " valid_args.update({tuple(args):[int(codes[i]), width]})\n",
74 " \n",
52 " i = i + 1\n", 75 " i = i + 1\n",
53 " iset.update({mne:valid_args})\n", 76 " iset.update({mne:valid_args})\n",
54 "pprint(iset)\n" 77 "#pprint(iset, indent=5)\n"
55 ], 78 ],
79 "language": "python",
80 "metadata": {},
81 "outputs": [],
82 "prompt_number": 2
83 },
84 {
85 "cell_type": "code",
86 "collapsed": false,
87 "input": [
88 "# generate function lookup table\n",
89 "optable = []\n",
90 "for l in lang:\n",
91 " optable.append(l[0])\n",
92 "\n",
93 "for i in range(17):\n",
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",
95 "\n"
96 ],
97 "language": "python",
98 "metadata": {},
99 "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 },
160 {
161 "cell_type": "code",
162 "collapsed": false,
163 "input": [
164 "# print function templates\n",
165 "#for mne in mne_set:\n",
166 "# print \"//implement me\\nvoid\\n%s(void) {\\n registers.PC = registers.PC + 1;\\n}\\n\" % mne.upper()\n",
167 "\n",
168 "# print function definitions\n",
169 "#for mne in mne_set:\n",
170 "# print \"void\\n%s(void);\\n\" % mne.upper()\n"
171 ],
172 "language": "python",
173 "metadata": {},
174 "outputs": [],
175 "prompt_number": 2
176 },
177 {
178 "cell_type": "code",
179 "collapsed": false,
180 "input": [
181 "float(255)/15\n"
182 ],
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 },
196 {
197 "cell_type": "code",
198 "collapsed": false,
199 "input": [],
56 "language": "python", 200 "language": "python",
57 "metadata": {}, 201 "metadata": {},
58 "outputs": [] 202 "outputs": []
59 } 203 }
60 ], 204 ],