Mercurial > hg > ede
annotate dbg/dbg.py @ 28:6d32e54e5c16
emulator overhauled really, new a better memory structure
also cleaned up the file system some what.
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Fri, 11 Apr 2014 14:38:09 +0100 |
parents | |
children | 83e80c2c489c |
rev | line source |
---|---|
jb302@28 | 1 #!/usr/bin/env python |
jb302@28 | 2 # dbg.py - debug client |
jb302@28 | 3 import struct |
jb302@28 | 4 import os, sys |
jb302@28 | 5 from subprocess import Popen, PIPE, STDOUT |
jb302@28 | 6 |
jb302@28 | 7 emu = Popen(['./a.out'], stdout=PIPE, stdin=PIPE, stderr=PIPE) |
jb302@28 | 8 |
jb302@28 | 9 def snd(m): |
jb302@28 | 10 emu.stdin.write(struct.pack('>B', m)) |
jb302@28 | 11 |
jb302@28 | 12 def rcv(): |
jb302@28 | 13 with open('out', 'r') as f: |
jb302@28 | 14 c = f.read() |
jb302@28 | 15 return c |
jb302@28 | 16 |
jb302@28 | 17 def step(): |
jb302@28 | 18 snd(0x00) |
jb302@28 | 19 |
jb302@28 | 20 def run(): |
jb302@28 | 21 snd(0x01) |
jb302@28 | 22 |
jb302@28 | 23 def set_reg(reg, data): |
jb302@28 | 24 snd(0x02) |
jb302@28 | 25 snd(reg) # reg |
jb302@28 | 26 snd(data) # data |
jb302@28 | 27 |
jb302@28 | 28 def get_reg(reg): |
jb302@28 | 29 snd(0x03) |
jb302@28 | 30 snd(reg) # reg |
jb302@28 | 31 #return rcv() |
jb302@28 | 32 |
jb302@28 | 33 def set_flag(flag, on): |
jb302@28 | 34 snd(0x04) |
jb302@28 | 35 if on == 0: |
jb302@28 | 36 snd(flag) |
jb302@28 | 37 snd(0) |
jb302@28 | 38 else: |
jb302@28 | 39 snd(flag) |
jb302@28 | 40 snd(1) |
jb302@28 | 41 |
jb302@28 | 42 def get_flag(flag): |
jb302@28 | 43 snd(0x05) |
jb302@28 | 44 snd(flag) |
jb302@28 | 45 #return rcv() |
jb302@28 | 46 |
jb302@28 | 47 def set_block(addrh, addrl, lenh, lenl, data): |
jb302@28 | 48 snd(0x06) |
jb302@28 | 49 snd(addrh) # address high byte |
jb302@28 | 50 snd(addrl) # address low byte |
jb302@28 | 51 snd(lenh) |
jb302@28 | 52 snd(lenl) |
jb302@28 | 53 for b in data: |
jb302@28 | 54 snd(b) # data |
jb302@28 | 55 |
jb302@28 | 56 def get_block(addrh, addrl, lenh, lenl): |
jb302@28 | 57 block = [] |
jb302@28 | 58 snd(0x07) |
jb302@28 | 59 snd(addrh) # address high byte |
jb302@28 | 60 snd(addrl) # address low byte |
jb302@28 | 61 snd(lenh) |
jb302@28 | 62 snd(lenl) |
jb302@28 | 63 #lc = 0 |
jb302@28 | 64 #while lc != l: |
jb302@28 | 65 # lc = os.path.getsize('out'); |
jb302@28 | 66 #return rcv() |
jb302@28 | 67 |
jb302@28 | 68 registers = { |
jb302@28 | 69 'r0':0, |
jb302@28 | 70 'r1':1, |
jb302@28 | 71 'r2':2, |
jb302@28 | 72 'r3':3, |
jb302@28 | 73 'dph':4, |
jb302@28 | 74 'dpl':5, |
jb302@28 | 75 'sph':6, |
jb302@28 | 76 'spl':7, |
jb302@28 | 77 'a':8, |
jb302@28 | 78 'flags':9 |
jb302@28 | 79 } |
jb302@28 | 80 |
jb302@28 | 81 cmds = { |
jb302@28 | 82 'step':step, |
jb302@28 | 83 'run':run, |
jb302@28 | 84 'sr':set_reg, |
jb302@28 | 85 'gr':get_reg, |
jb302@28 | 86 'sf':set_flag, |
jb302@28 | 87 'gf':get_flag, |
jb302@28 | 88 'sb':set_block, |
jb302@28 | 89 'gb':get_block |
jb302@28 | 90 } |