diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/dbg/dbg.py	Wed Apr 16 16:51:39 2014 +0100
@@ -0,0 +1,109 @@
+#!/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
+        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(self, m):
+        self.Emu.stdin.write(struct.pack('>B', m))
+
+    def rcv(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(0x09)
+        return self.rcv(1)
+
+    def get_flags(self):
+        self.snd(0x0A)
+        return self.rcv(1)
+
+    def get_ir(self):
+        self.snd(0x0B)
+        return self.rcv(1)
+
+    def run_len(self, lenh, lenl):
+        self.snd(0x0C)
+        self.snd(lenh)
+        self.snd(lenl)
+
+    def free_run(self):
+        self.snd(0x0D)
+
+    def set_bp(self, i, addrh, addrl):
+        self.snd(0x0E)
+        self.snd(i)
+        self.snd(addrh)
+        self.snd(addrl)
+
+
+
+
+