annotate tests/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 4411dee34085
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