Mercurial > hg > ede
view utils/gen_language.ipynb @ 17:9bbdf7258cd8
Second pass now properly pads addresses
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Thu, 30 Jan 2014 17:09:55 +0000 |
parents | 2b8eb2c86602 |
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": {} } ] }