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