Mercurial > hg > ede
view dbg/dbg.py @ 42:792da050d8c4 tip
more dox
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Tue, 22 Apr 2014 14:25:14 +0100 |
parents | 6b947f6d69d9 |
children |
line wrap: on
line source
#!/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 self.snd = self.snd_file self.rcv = self.rcv_file 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_file(self, m): self.Emu.stdin.write(struct.pack('>B', m)) def rcv_file(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(0x08) return self.rcv(1) def get_flags(self): self.snd(0x09) return self.rcv(1) def get_ir(self): self.snd(0x0A) return self.rcv(1) def run_len(self, lenh, lenl): self.snd(0x0B) self.snd(lenh) self.snd(lenl) def free_run(self): self.snd(0x0C) def set_bp(self, i, addrh, addrl): self.snd(0x0D) self.snd(i) self.snd(addrh) self.snd(addrl)