Mercurial > hg > ede
view 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 source
{ "metadata": { "name": "gen_language" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "from pprint import pprint\n", "import sys\n", "sys.path.append('../assembler')\n", "from assembler import *\n", "f = open('iset.csv', 'r')\n", "\n", "codes = []\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": 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", " mne_syms.append(line[0])\n", " arg_syms.extend(line[1])\n", "mne_set = set(mne_syms)\n", "arg_set = set(arg_syms)\n", "\n", "iset = {}\n", "for mne in mne_set:\n", " i = 0\n", " valid_args = {}\n", " for line in lang:\n", " args = []\n", " if line[0] == mne:\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, 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": [] } ], "metadata": {} } ] }