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