Mercurial > hg > ede
view utils/gen_language.ipynb @ 42:792da050d8c4 tip
more dox
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Tue, 22 Apr 2014 14:25:14 +0100 |
parents | 256d24488e3f |
children |
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": [] }, { "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", " found_label = 0\n", " for a in line[1]:\n", " if a in labelable:\n", " found_label = 1\n", " args.append('label')\n", " elif a == '@addr16':\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": [ { "output_type": "stream", "stream": "stdout", "text": [ "{ 'add': { ('a', '#data8'): [166, 2],\n", " ('a', '@dptr'): [167, 1],\n", " ('a', 'dph'): [164, 1],\n", " ('a', 'dpl'): [165, 1],\n", " ('a', 'r0'): [160, 1],\n", " ('a', 'r1'): [161, 1],\n", " ('a', 'r2'): [162, 1],\n", " ('a', 'r3'): [163, 1]},\n", " 'addc': { ('a', '#data8'): [174, 2],\n", " ('a', '@dptr'): [175, 1],\n", " ('a', 'dph'): [172, 1],\n", " ('a', 'dpl'): [173, 1],\n", " ('a', 'r0'): [168, 1],\n", " ('a', 'r1'): [169, 1],\n", " ('a', 'r2'): [170, 1],\n", " ('a', 'r3'): [171, 1]},\n", " 'anl': { ('a', '#data8'): [134, 2],\n", " ('a', '@dptr'): [135, 1],\n", " ('a', 'dph'): [132, 1],\n", " ('a', 'dpl'): [133, 1],\n", " ('a', 'r0'): [128, 1],\n", " ('a', 'r1'): [129, 1],\n", " ('a', 'r2'): [130, 1],\n", " ('a', 'r3'): [131, 1]},\n", " 'cjne': { ('a', '#data8', 'label'): [223, 3],\n", " ('a', '#data8', 'rel8'): [223, 3],\n", " ('r0', '#data', 'label'): [212, 2],\n", " ('r0', '#data', 'rel8'): [212, 2],\n", " ('r1', '#data', 'label'): [213, 2],\n", " ('r1', '#data', 'rel8'): [213, 2],\n", " ('r2', '#data', 'label'): [214, 2],\n", " ('r2', '#data', 'rel8'): [214, 2],\n", " ('r3', '#data', 'label'): [215, 2],\n", " ('r3', '#data', 'rel8'): [215, 2]},\n", " 'clr': { ('bs',): [11, 1], ('c',): [9, 1], ('ie',): [13, 1]},\n", " 'cpl': { ('a',): [15, 1], ('c',): [14, 1]},\n", " 'da': { ('a',): [250, 1]},\n", " 'dec': { ('a',): [159, 1], ('dptr',): [157, 1]},\n", " 'div': { ('r0', 'r1'): [249, 1]},\n", " 'djnz': { ('r0', 'label'): [208, 2],\n", " ('r0', 'rel8'): [208, 2],\n", " ('r1', 'label'): [209, 2],\n", " ('r1', 'rel8'): [209, 2],\n", " ('r2', 'label'): [210, 2],\n", " ('r2', 'rel8'): [210, 2],\n", " ('r3', 'label'): [211, 2],\n", " ('r3', 'rel8'): [211, 2]},\n", " 'hlt': { ('',): [255, 1]},\n", " 'in': { ('a', 'port_addr'): [252, 2]},\n", " 'inc': { ('a',): [158, 1], ('dptr',): [156, 1]},\n", " 'int': { ('vect8',): [254, 2]},\n", " 'jc': { ('label',): [226, 2], ('rel8',): [226, 2]},\n", " 'jmp': { ('@a+dptr',): [221, 1], ('@dptr',): [222, 1]},\n", " 'jnc': { ('label',): [227, 2], ('rel8',): [227, 2]},\n", " 'jns': { ('label',): [231, 2], ('rel8',): [231, 2]},\n", " 'jnz': { ('label',): [225, 2], ('rel8',): [225, 2]},\n", " 'jpe': { ('label',): [229, 2], ('rel8',): [229, 2]},\n", " 'jpo': { ('label',): [228, 2], ('rel8',): [228, 2]},\n", " 'js': { ('label',): [230, 2], ('rel8',): [230, 2]},\n", " 'jz': { ('label',): [224, 2], ('rel8',): [224, 2]},\n", " 'laf': { ('',): [18, 1]},\n", " 'lcall': { ('addr16',): [217, 3], ('label',): [217, 3]},\n", " 'ljmp': { ('addr16',): [216, 3], ('label',): [216, 3]},\n", " 'mov': { ('@addr16', 'a'): [29, 3],\n", " ('@dptr', 'a'): [31, 1],\n", " ('@dptr', 'dph'): [36, 1],\n", " ('@dptr', 'dpl'): [37, 1],\n", " ('@dptr', 'r0'): [32, 1],\n", " ('@dptr', 'r1'): [33, 1],\n", " ('@dptr', 'r2'): [34, 1],\n", " ('@dptr', 'r3'): [35, 1],\n", " ('@dptr', 'sph'): [38, 1],\n", " ('@dptr', 'spl'): [39, 1],\n", " ('@label', 'a'): [29, 3],\n", " ('a', '#data8'): [21, 2],\n", " ('a', '@a+dptr'): [26, 1],\n", " ('a', '@a+pc'): [27, 1],\n", " ('a', '@addr16'): [28, 3],\n", " ('a', '@dptr'): [30, 1],\n", " ('a', '@label'): [28, 3],\n", " ('a', 'addr16'): [24, 3],\n", " ('a', 'dph'): [60, 1],\n", " ('a', 'dpl'): [61, 1],\n", " ('a', 'label'): [24, 3],\n", " ('a', 'r0'): [56, 1],\n", " ('a', 'r1'): [57, 1],\n", " ('a', 'r2'): [58, 1],\n", " ('a', 'r3'): [59, 1],\n", " ('a', 'sph'): [62, 1],\n", " ('a', 'spl'): [63, 1],\n", " ('addr16', 'a'): [25, 3],\n", " ('dph', '#data8'): [44, 2],\n", " ('dph', '@dptr'): [100, 1],\n", " ('dph', 'a'): [52, 1],\n", " ('dph', 'dpl'): [101, 1],\n", " ('dph', 'r0'): [96, 1],\n", " ('dph', 'r1'): [97, 1],\n", " ('dph', 'r2'): [98, 1],\n", " ('dph', 'r3'): [99, 1],\n", " ('dph', 'sph'): [102, 1],\n", " ('dph', 'spl'): [103, 1],\n", " ('dpl', '#data8'): [45, 2],\n", " ('dpl', '@dptr'): [109, 1],\n", " ('dpl', 'a'): [53, 1],\n", " ('dpl', 'dph'): [108, 1],\n", " ('dpl', 'r0'): [104, 1],\n", " ('dpl', 'r1'): [105, 1],\n", " ('dpl', 'r2'): [106, 1],\n", " ('dpl', 'r3'): [107, 1],\n", " ('dpl', 'sph'): [110, 1],\n", " ('dpl', 'spl'): [111, 1],\n", " ('dptr', '#data16'): [23, 3],\n", " ('dptr', 'sp'): [19, 1],\n", " ('label', 'a'): [25, 3],\n", " ('r0', '#data8'): [40, 2],\n", " ('r0', '@dptr'): [64, 1],\n", " ('r0', 'a'): [48, 1],\n", " ('r0', 'dph'): [68, 1],\n", " ('r0', 'dpl'): [69, 1],\n", " ('r0', 'r1'): [65, 1],\n", " ('r0', 'r2'): [66, 1],\n", " ('r0', 'r3'): [67, 1],\n", " ('r0', 'sph'): [70, 1],\n", " ('r0', 'spl'): [71, 1],\n", " ('r1', '#data8'): [41, 2],\n", " ('r1', '@dptr'): [73, 1],\n", " ('r1', 'a'): [49, 1],\n", " ('r1', 'dph'): [76, 1],\n", " ('r1', 'dpl'): [77, 1],\n", " ('r1', 'r0'): [72, 1],\n", " ('r1', 'r2'): [74, 1],\n", " ('r1', 'r3'): [75, 1],\n", " ('r1', 'sph'): [78, 1],\n", " ('r1', 'spl'): [79, 1],\n", " ('r2', '#data8'): [42, 2],\n", " ('r2', '@dptr'): [82, 1],\n", " ('r2', 'a'): [50, 1],\n", " ('r2', 'dph'): [84, 1],\n", " ('r2', 'dpl'): [85, 1],\n", " ('r2', 'r0'): [80, 1],\n", " ('r2', 'r1'): [81, 1],\n", " ('r2', 'r3'): [83, 1],\n", " ('r2', 'sph'): [86, 1],\n", " ('r2', 'spl'): [87, 1],\n", " ('r3', '#data8'): [43, 2],\n", " ('r3', '@dptr'): [91, 1],\n", " ('r3', 'a'): [51, 1],\n", " ('r3', 'dph'): [92, 1],\n", " ('r3', 'dpl'): [93, 1],\n", " ('r3', 'r0'): [88, 1],\n", " ('r3', 'r1'): [89, 1],\n", " ('r3', 'r2'): [90, 1],\n", " ('r3', 'sph'): [94, 1],\n", " ('r3', 'spl'): [95, 1],\n", " ('sp', '#data16'): [22, 3],\n", " ('sp', 'dptr'): [20, 1],\n", " ('sph', '#data8'): [46, 2],\n", " ('sph', '@dptr'): [118, 1],\n", " ('sph', 'a'): [54, 1],\n", " ('sph', 'dph'): [116, 1],\n", " ('sph', 'dpl'): [117, 1],\n", " ('sph', 'r0'): [112, 1],\n", " ('sph', 'r1'): [113, 1],\n", " ('sph', 'r2'): [114, 1],\n", " ('sph', 'r3'): [115, 1],\n", " ('sph', 'spl'): [119, 1],\n", " ('spl', '#data8'): [47, 2],\n", " ('spl', '@dptr'): [127, 1],\n", " ('spl', 'a'): [55, 1],\n", " ('spl', 'dph'): [124, 1],\n", " ('spl', 'dpl'): [125, 1],\n", " ('spl', 'r0'): [120, 1],\n", " ('spl', 'r1'): [121, 1],\n", " ('spl', 'r2'): [122, 1],\n", " ('spl', 'r3'): [123, 1],\n", " ('spl', 'sph'): [126, 1]},\n", " 'mul': { ('r0', 'r1'): [248, 1]},\n", " 'nop': { ('',): [0, 1]},\n", " 'orl': { ('a', '#data8'): [142, 2],\n", " ('a', '@dptr'): [143, 1],\n", " ('a', 'dph'): [140, 1],\n", " ('a', 'dpl'): [141, 1],\n", " ('a', 'r0'): [136, 1],\n", " ('a', 'r1'): [137, 1],\n", " ('a', 'r2'): [138, 1],\n", " ('a', 'r3'): [139, 1]},\n", " 'out': { ('port_addr', 'a'): [253, 2]},\n", " 'pcall': { ('addr11',): [207, 2], ('label',): [207, 2]},\n", " 'pjmp': { ('addr11',): [199, 2], ('label',): [199, 2]},\n", " 'pop': { ('a',): [246, 1],\n", " ('dph',): [244, 1],\n", " ('dpl',): [245, 1],\n", " ('flags',): [247, 1],\n", " ('r0',): [240, 1],\n", " ('r1',): [241, 1],\n", " ('r2',): [242, 1],\n", " ('r3',): [243, 1]},\n", " 'push': { ('a',): [238, 1],\n", " ('dph',): [236, 1],\n", " ('dpl',): [237, 1],\n", " ('flags',): [239, 1],\n", " ('r0',): [232, 1],\n", " ('r1',): [233, 1],\n", " ('r2',): [234, 1],\n", " ('r3',): [235, 1]},\n", " 'reserved': { ('',): [251, 1]},\n", " 'ret': { ('',): [218, 1]},\n", " 'reti': { ('',): [219, 1]},\n", " 'rl': { ('a',): [152, 1]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "},\n", " 'rlc': { ('a',): [153, 1]},\n", " 'rr': { ('a',): [154, 1]},\n", " 'rrc': { ('a',): [155, 1]},\n", " 'set': { ('bs',): [10, 1], ('c',): [8, 1], ('ie',): [12, 1]},\n", " 'sfa': { ('',): [17, 1]},\n", " 'sjmp': { ('label',): [220, 2], ('rel8',): [220, 2]},\n", " 'sub': { ('a', '#data8'): [182, 2],\n", " ('a', '@dptr'): [183, 1],\n", " ('a', 'dph'): [180, 1],\n", " ('a', 'dpl'): [181, 1],\n", " ('a', 'r0'): [176, 1],\n", " ('a', 'r1'): [177, 1],\n", " ('a', 'r2'): [178, 1],\n", " ('a', 'r3'): [179, 1]},\n", " 'subb': { ('a', '#data8'): [190, 2],\n", " ('a', '@dptr'): [191, 1],\n", " ('a', 'dph'): [188, 1],\n", " ('a', 'dpl'): [189, 1],\n", " ('a', 'r0'): [184, 1],\n", " ('a', 'r1'): [185, 1],\n", " ('a', 'r2'): [186, 1],\n", " ('a', 'r3'): [187, 1]},\n", " 'xcsd': { ('',): [16, 1]},\n", " 'xrl': { ('a', '#data8'): [150, 2],\n", " ('a', '@dptr'): [151, 1],\n", " ('a', 'dph'): [148, 1],\n", " ('a', 'dpl'): [149, 1],\n", " ('a', 'r0'): [144, 1],\n", " ('a', 'r1'): [145, 1],\n", " ('a', 'r2'): [146, 1],\n", " ('a', 'r3'): [147, 1]}}\n" ] } ], "prompt_number": 11 }, { "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": [] }, { "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": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }