annotate 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
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@28 5 from subprocess import Popen, PIPE, STDOUT
jb302@28 6
jb302@28 7 emu = Popen(['./a.out'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
jb302@28 8
jb302@28 9 def snd(m):
jb302@28 10 emu.stdin.write(struct.pack('>B', m))
jb302@28 11
jb302@28 12 def rcv():
jb302@28 13 with open('out', 'r') as f:
jb302@28 14 c = f.read()
jb302@28 15 return c
jb302@28 16
jb302@28 17 def step():
jb302@28 18 snd(0x00)
jb302@28 19
jb302@28 20 def run():
jb302@28 21 snd(0x01)
jb302@28 22
jb302@28 23 def set_reg(reg, data):
jb302@28 24 snd(0x02)
jb302@28 25 snd(reg) # reg
jb302@28 26 snd(data) # data
jb302@28 27
jb302@28 28 def get_reg(reg):
jb302@28 29 snd(0x03)
jb302@28 30 snd(reg) # reg
jb302@28 31 #return rcv()
jb302@28 32
jb302@28 33 def set_flag(flag, on):
jb302@28 34 snd(0x04)
jb302@28 35 if on == 0:
jb302@28 36 snd(flag)
jb302@28 37 snd(0)
jb302@28 38 else:
jb302@28 39 snd(flag)
jb302@28 40 snd(1)
jb302@28 41
jb302@28 42 def get_flag(flag):
jb302@28 43 snd(0x05)
jb302@28 44 snd(flag)
jb302@28 45 #return rcv()
jb302@28 46
jb302@28 47 def set_block(addrh, addrl, lenh, lenl, data):
jb302@28 48 snd(0x06)
jb302@28 49 snd(addrh) # address high byte
jb302@28 50 snd(addrl) # address low byte
jb302@28 51 snd(lenh)
jb302@28 52 snd(lenl)
jb302@28 53 for b in data:
jb302@28 54 snd(b) # data
jb302@28 55
jb302@28 56 def get_block(addrh, addrl, lenh, lenl):
jb302@28 57 block = []
jb302@28 58 snd(0x07)
jb302@28 59 snd(addrh) # address high byte
jb302@28 60 snd(addrl) # address low byte
jb302@28 61 snd(lenh)
jb302@28 62 snd(lenl)
jb302@28 63 #lc = 0
jb302@28 64 #while lc != l:
jb302@28 65 # lc = os.path.getsize('out');
jb302@28 66 #return rcv()
jb302@28 67
jb302@28 68 registers = {
jb302@28 69 'r0':0,
jb302@28 70 'r1':1,
jb302@28 71 'r2':2,
jb302@28 72 'r3':3,
jb302@28 73 'dph':4,
jb302@28 74 'dpl':5,
jb302@28 75 'sph':6,
jb302@28 76 'spl':7,
jb302@28 77 'a':8,
jb302@28 78 'flags':9
jb302@28 79 }
jb302@28 80
jb302@28 81 cmds = {
jb302@28 82 'step':step,
jb302@28 83 'run':run,
jb302@28 84 'sr':set_reg,
jb302@28 85 'gr':get_reg,
jb302@28 86 'sf':set_flag,
jb302@28 87 'gf':get_flag,
jb302@28 88 'sb':set_block,
jb302@28 89 'gb':get_block
jb302@28 90 }