Mercurial > hg > ede
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbg/dbg.py Fri Apr 11 14:38:09 2014 +0100 @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# dbg.py - debug client +import struct +import os, sys +from subprocess import Popen, PIPE, STDOUT + +emu = Popen(['./a.out'], stdout=PIPE, stdin=PIPE, stderr=PIPE) + +def snd(m): + emu.stdin.write(struct.pack('>B', m)) + +def rcv(): + with open('out', 'r') as f: + c = f.read() + return c + +def step(): + snd(0x00) + +def run(): + snd(0x01) + +def set_reg(reg, data): + snd(0x02) + snd(reg) # reg + snd(data) # data + +def get_reg(reg): + snd(0x03) + snd(reg) # reg + #return rcv() + +def set_flag(flag, on): + snd(0x04) + if on == 0: + snd(flag) + snd(0) + else: + snd(flag) + snd(1) + +def get_flag(flag): + snd(0x05) + snd(flag) + #return rcv() + +def set_block(addrh, addrl, lenh, lenl, data): + snd(0x06) + snd(addrh) # address high byte + snd(addrl) # address low byte + snd(lenh) + snd(lenl) + for b in data: + snd(b) # data + +def get_block(addrh, addrl, lenh, lenl): + block = [] + snd(0x07) + snd(addrh) # address high byte + snd(addrl) # address low byte + snd(lenh) + snd(lenl) + #lc = 0 + #while lc != l: + # lc = os.path.getsize('out'); + #return rcv() + +registers = { + 'r0':0, + 'r1':1, + 'r2':2, + 'r3':3, + 'dph':4, + 'dpl':5, + 'sph':6, + 'spl':7, + 'a':8, + 'flags':9 + } + +cmds = { + 'step':step, + 'run':run, + 'sr':set_reg, + 'gr':get_reg, + 'sf':set_flag, + 'gf':get_flag, + 'sb':set_block, + 'gb':get_block + }