diff dbg/dbg.py @ 28:6d32e54e5c16

emulator overhauled really, new a better memory structure also cleaned up the file system some what.
author james <jb302@eecs.qmul.ac.uk>
date Fri, 11 Apr 2014 14:38:09 +0100
parents
children 83e80c2c489c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbg/dbg.py	Fri Apr 11 14:38:09 2014 +0100
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+# dbg.py - debug client
+import struct
+import os, sys
+from subprocess import Popen, PIPE, STDOUT
+
+emu = Popen(['./a.out'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
+
+def snd(m):
+    emu.stdin.write(struct.pack('>B', m))
+
+def rcv():
+    with open('out', 'r') as f:
+        c = f.read()
+    return c
+
+def step():
+    snd(0x00)
+
+def run():
+    snd(0x01)
+
+def set_reg(reg, data):
+    snd(0x02)
+    snd(reg)  # reg
+    snd(data) # data
+
+def get_reg(reg):
+    snd(0x03)
+    snd(reg)  # reg
+    #return rcv()
+
+def set_flag(flag, on):
+    snd(0x04)
+    if on == 0:
+        snd(flag)
+        snd(0)
+    else:
+        snd(flag)
+        snd(1)
+
+def get_flag(flag):
+    snd(0x05)
+    snd(flag)
+    #return rcv()
+
+def set_block(addrh, addrl, lenh, lenl, data):
+    snd(0x06)
+    snd(addrh) # address high byte
+    snd(addrl) # address low byte
+    snd(lenh)
+    snd(lenl)
+    for b in data:
+        snd(b) # data
+
+def get_block(addrh, addrl, lenh, lenl):
+    block = []
+    snd(0x07)
+    snd(addrh) # address high byte
+    snd(addrl) # address low byte
+    snd(lenh)  
+    snd(lenl) 
+    #lc = 0
+    #while lc != l:
+    #    lc = os.path.getsize('out');
+    #return rcv()
+
+registers = {   
+        'r0':0,
+        'r1':1,
+        'r2':2,
+        'r3':3,
+        'dph':4,
+        'dpl':5,
+        'sph':6,
+        'spl':7,
+        'a':8,
+        'flags':9
+        }
+
+cmds = {
+        'step':step,
+        'run':run,
+        'sr':set_reg,
+        'gr':get_reg,
+        'sf':set_flag,
+        'gf':get_flag,
+        'sb':set_block,
+        'gb':get_block
+        }