Mercurial > hg > ede
diff tests/dbg/dbg.py @ 34:4411dee34085
cleaned out docs (don't worry they are comming back)
and added all my test files
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Wed, 16 Apr 2014 16:51:39 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/dbg/dbg.py Wed Apr 16 16:51:39 2014 +0100 @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# dbg.py - debug client +import struct +import os, sys +from time import sleep + +# talks to the emulator +# see controller() in emu/main.c for the inverse +class controller: + + def __init__(self): + self.Emu = None + open('out', 'w').close() + + # Alternetive snd and rcv functions need to be + # written read/write using serial buffer to make + # this class talk to an emulator running on + # an MCU + def snd(self, m): + self.Emu.stdin.write(struct.pack('>B', m)) + + def rcv(self, l): + lc = 0 + while lc != l: + lc = os.path.getsize('out') + #sleep(0.5) + with open('out', 'r') as f: + c = f.read() + open('out', 'w').close() + return c + + def step(self): + self.snd(0x00) + + def run(self): + self.snd(0x01) + + def set_reg(self, reg, data): + self.snd(0x02) + self.snd(reg) # reg + self.snd(data) # data + + def get_reg(self, reg): + self.snd(0x03) + self.snd(reg) # reg + return self.rcv(1) + + def set_flag(self, flag, on): + self.snd(0x04) + if on == 0: + self.snd(flag) + self.snd(0) + else: + self.snd(flag) + self.snd(1) + + def get_flag(self, flag): + self.snd(0x05) + self.snd(flag) + return self.rcv(1) + + def set_block(self, addrh, addrl, data): + self.snd(0x06) + self.snd(addrh) # address high byte + self.snd(addrl) # address low byte + self.snd((len(data) >> 8) & 0xFF) + self.snd(len(data) & 0xFF) + for b in data: + self.snd(b) # data + + def get_block(self, addrh, addrl, lenh, lenl): + block = [] + self.snd(0x07) + self.snd(addrh) # address high byte + self.snd(addrl) # address low byte + self.snd(lenh) + self.snd(lenl) + return self.rcv(lenl | (lenh << 8)) + + def get_a(self): + self.snd(0x09) + return self.rcv(1) + + def get_flags(self): + self.snd(0x0A) + return self.rcv(1) + + def get_ir(self): + self.snd(0x0B) + return self.rcv(1) + + def run_len(self, lenh, lenl): + self.snd(0x0C) + self.snd(lenh) + self.snd(lenl) + + def free_run(self): + self.snd(0x0D) + + def set_bp(self, i, addrh, addrl): + self.snd(0x0E) + self.snd(i) + self.snd(addrh) + self.snd(addrl) + + + + +