annotate 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
rev   line source
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 }