Mercurial > hg > ede
diff 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 |
line wrap: on
line diff
--- a/utils/gen_language.ipynb Sat Jan 11 12:44:39 2014 +0000 +++ b/utils/gen_language.ipynb Wed Jan 29 20:11:07 2014 +0000 @@ -15,25 +15,32 @@ "import sys\n", "sys.path.append('../assembler')\n", "from assembler import *\n", - "f = open('instruction_set.txt', 'r')\n", - "lang = first_pass(f)\n", + "f = open('iset.csv', 'r')\n", "\n", - "r = open('instruction_table.txt', 'r')\n", - "r = filter(lambda l: l != '\\n', r.readlines())\n", "codes = []\n", - "for line in r:\n", - " codes.append(line.split()[0])\n", - " " + "lang = []\n", + "for line in f:\n", + " line = line.split(';')\n", + " codes.append(int(line[0]))\n", + " statement = line[1].strip().lower().split()\n", + " mnemonic = statement[0]\n", + " arguments = ''.join(statement[1:]).split(',')\n", + " lang.append([mnemonic, arguments])\n", + " \n", + "#pprint(lang) \n" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 2 + "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ + "consts = { 'addr11':1, 'addr16':2, '@addr16':2, 'vect8':1, '#data8':1, 'port_addr':1, 'rel8':1, '#data16':2}\n", + "labelable = ('addr11', 'addr16', 'rel8')\n", + "\n", "mne_syms = []\n", "arg_syms = []\n", "for line in lang:\n", @@ -47,14 +54,151 @@ " i = 0\n", " valid_args = {}\n", " for line in lang:\n", + " args = []\n", " if line[0] == mne:\n", - " valid_args.update({tuple(line[1]):int(codes[i])})\n", + " width = 1\n", + " for a in line[1]:\n", + " if a in consts:\n", + " width = width + consts[a]\n", + " valid_args.update({tuple(line[1]):[int(codes[i]), width]})\n", + " \n", + " for a in line[1]:\n", + " found_label = 0\n", + " if a in labelable:\n", + " found_label = 1\n", + " args.append('label')\n", + " else:\n", + " args.append(a)\n", + " if found_label:\n", + " valid_args.update({tuple(args):[int(codes[i]), width]})\n", + " \n", " i = i + 1\n", " iset.update({mne:valid_args})\n", - "pprint(iset)\n" + "#pprint(iset, indent=5)\n" ], "language": "python", "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# generate function lookup table\n", + "optable = []\n", + "for l in lang:\n", + " optable.append(l[0])\n", + "\n", + "for i in range(17):\n", + " 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", + "\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "nop, reserved, reserved, reserved, reserved\n", + "reserved, reserved, reserved, set, clr\n", + "set, clr, set, clr, cpl\n", + "cpl, xcsd, sfa, laf, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, mov, mov\n", + "mov, mov, mov, anl, anl\n", + "anl, anl, anl, anl, anl\n", + "anl, orl, orl, orl, orl\n", + "orl, orl, orl, orl, xrl\n", + "xrl, xrl, xrl, xrl, xrl\n", + "xrl, xrl, rl, rlc, rr\n", + "rrc, inc, dec, inc, dec\n", + "add, add, add, add, add\n", + "add, add, add, addc, addc\n", + "addc, addc, addc, addc, addc\n", + "addc, sub, sub, sub, sub\n", + "sub, sub, sub, sub, subb\n", + "subb, subb, subb, subb, subb\n", + "subb, subb, pjmp, pjmp, pjmp\n", + "pjmp, pjmp, pjmp, pjmp, pjmp\n", + "pcall, pcall, pcall, pcall, pcall\n", + "pcall, pcall, pcall, djnz, djnz\n", + "djnz, djnz, cjne, cjne, cjne\n", + "cjne, ljmp, lcall, ret, reti\n", + "sjmp, jmp, jmp, cjne, jz\n", + "jnz, jc, jnc, jpo, jpe\n", + "js, jns, push, push, push\n", + "push, push, push, push, push\n", + "pop, pop, pop, pop, pop\n", + "pop, pop, pop, mul, div\n", + "da, reserved, in, out, int\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# print function templates\n", + "#for mne in mne_set:\n", + "# print \"//implement me\\nvoid\\n%s(void) {\\n registers.PC = registers.PC + 1;\\n}\\n\" % mne.upper()\n", + "\n", + "# print function definitions\n", + "#for mne in mne_set:\n", + "# print \"void\\n%s(void);\\n\" % mne.upper()\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "float(255)/15\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "pyout", + "prompt_number": 13, + "text": [ + "17.0" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, "outputs": [] } ],