Mercurial > hg > ede
annotate 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 |
rev | line source |
---|---|
jb302@34 | 1 #!/usr/bin/env python |
jb302@34 | 2 # dbg.py - debug client |
jb302@34 | 3 import struct |
jb302@34 | 4 import os, sys |
jb302@34 | 5 from time import sleep |
jb302@34 | 6 |
jb302@34 | 7 # talks to the emulator |
jb302@34 | 8 # see controller() in emu/main.c for the inverse |
jb302@34 | 9 class controller: |
jb302@34 | 10 |
jb302@34 | 11 def __init__(self): |
jb302@34 | 12 self.Emu = None |
jb302@34 | 13 open('out', 'w').close() |
jb302@34 | 14 |
jb302@34 | 15 # Alternetive snd and rcv functions need to be |
jb302@34 | 16 # written read/write using serial buffer to make |
jb302@34 | 17 # this class talk to an emulator running on |
jb302@34 | 18 # an MCU |
jb302@34 | 19 def snd(self, m): |
jb302@34 | 20 self.Emu.stdin.write(struct.pack('>B', m)) |
jb302@34 | 21 |
jb302@34 | 22 def rcv(self, l): |
jb302@34 | 23 lc = 0 |
jb302@34 | 24 while lc != l: |
jb302@34 | 25 lc = os.path.getsize('out') |
jb302@34 | 26 #sleep(0.5) |
jb302@34 | 27 with open('out', 'r') as f: |
jb302@34 | 28 c = f.read() |
jb302@34 | 29 open('out', 'w').close() |
jb302@34 | 30 return c |
jb302@34 | 31 |
jb302@34 | 32 def step(self): |
jb302@34 | 33 self.snd(0x00) |
jb302@34 | 34 |
jb302@34 | 35 def run(self): |
jb302@34 | 36 self.snd(0x01) |
jb302@34 | 37 |
jb302@34 | 38 def set_reg(self, reg, data): |
jb302@34 | 39 self.snd(0x02) |
jb302@34 | 40 self.snd(reg) # reg |
jb302@34 | 41 self.snd(data) # data |
jb302@34 | 42 |
jb302@34 | 43 def get_reg(self, reg): |
jb302@34 | 44 self.snd(0x03) |
jb302@34 | 45 self.snd(reg) # reg |
jb302@34 | 46 return self.rcv(1) |
jb302@34 | 47 |
jb302@34 | 48 def set_flag(self, flag, on): |
jb302@34 | 49 self.snd(0x04) |
jb302@34 | 50 if on == 0: |
jb302@34 | 51 self.snd(flag) |
jb302@34 | 52 self.snd(0) |
jb302@34 | 53 else: |
jb302@34 | 54 self.snd(flag) |
jb302@34 | 55 self.snd(1) |
jb302@34 | 56 |
jb302@34 | 57 def get_flag(self, flag): |
jb302@34 | 58 self.snd(0x05) |
jb302@34 | 59 self.snd(flag) |
jb302@34 | 60 return self.rcv(1) |
jb302@34 | 61 |
jb302@34 | 62 def set_block(self, addrh, addrl, data): |
jb302@34 | 63 self.snd(0x06) |
jb302@34 | 64 self.snd(addrh) # address high byte |
jb302@34 | 65 self.snd(addrl) # address low byte |
jb302@34 | 66 self.snd((len(data) >> 8) & 0xFF) |
jb302@34 | 67 self.snd(len(data) & 0xFF) |
jb302@34 | 68 for b in data: |
jb302@34 | 69 self.snd(b) # data |
jb302@34 | 70 |
jb302@34 | 71 def get_block(self, addrh, addrl, lenh, lenl): |
jb302@34 | 72 block = [] |
jb302@34 | 73 self.snd(0x07) |
jb302@34 | 74 self.snd(addrh) # address high byte |
jb302@34 | 75 self.snd(addrl) # address low byte |
jb302@34 | 76 self.snd(lenh) |
jb302@34 | 77 self.snd(lenl) |
jb302@34 | 78 return self.rcv(lenl | (lenh << 8)) |
jb302@34 | 79 |
jb302@34 | 80 def get_a(self): |
jb302@34 | 81 self.snd(0x09) |
jb302@34 | 82 return self.rcv(1) |
jb302@34 | 83 |
jb302@34 | 84 def get_flags(self): |
jb302@34 | 85 self.snd(0x0A) |
jb302@34 | 86 return self.rcv(1) |
jb302@34 | 87 |
jb302@34 | 88 def get_ir(self): |
jb302@34 | 89 self.snd(0x0B) |
jb302@34 | 90 return self.rcv(1) |
jb302@34 | 91 |
jb302@34 | 92 def run_len(self, lenh, lenl): |
jb302@34 | 93 self.snd(0x0C) |
jb302@34 | 94 self.snd(lenh) |
jb302@34 | 95 self.snd(lenl) |
jb302@34 | 96 |
jb302@34 | 97 def free_run(self): |
jb302@34 | 98 self.snd(0x0D) |
jb302@34 | 99 |
jb302@34 | 100 def set_bp(self, i, addrh, addrl): |
jb302@34 | 101 self.snd(0x0E) |
jb302@34 | 102 self.snd(i) |
jb302@34 | 103 self.snd(addrh) |
jb302@34 | 104 self.snd(addrl) |
jb302@34 | 105 |
jb302@34 | 106 |
jb302@34 | 107 |
jb302@34 | 108 |
jb302@34 | 109 |