jb302@28: #!/usr/bin/env python jb302@28: # dbg.py - debug client jb302@28: import struct jb302@28: import os, sys jb302@28: from subprocess import Popen, PIPE, STDOUT jb302@28: jb302@28: emu = Popen(['./a.out'], stdout=PIPE, stdin=PIPE, stderr=PIPE) jb302@28: jb302@28: def snd(m): jb302@28: emu.stdin.write(struct.pack('>B', m)) jb302@28: jb302@28: def rcv(): jb302@28: with open('out', 'r') as f: jb302@28: c = f.read() jb302@28: return c jb302@28: jb302@28: def step(): jb302@28: snd(0x00) jb302@28: jb302@28: def run(): jb302@28: snd(0x01) jb302@28: jb302@28: def set_reg(reg, data): jb302@28: snd(0x02) jb302@28: snd(reg) # reg jb302@28: snd(data) # data jb302@28: jb302@28: def get_reg(reg): jb302@28: snd(0x03) jb302@28: snd(reg) # reg jb302@28: #return rcv() jb302@28: jb302@28: def set_flag(flag, on): jb302@28: snd(0x04) jb302@28: if on == 0: jb302@28: snd(flag) jb302@28: snd(0) jb302@28: else: jb302@28: snd(flag) jb302@28: snd(1) jb302@28: jb302@28: def get_flag(flag): jb302@28: snd(0x05) jb302@28: snd(flag) jb302@28: #return rcv() jb302@28: jb302@28: def set_block(addrh, addrl, lenh, lenl, data): jb302@28: snd(0x06) jb302@28: snd(addrh) # address high byte jb302@28: snd(addrl) # address low byte jb302@28: snd(lenh) jb302@28: snd(lenl) jb302@28: for b in data: jb302@28: snd(b) # data jb302@28: jb302@28: def get_block(addrh, addrl, lenh, lenl): jb302@28: block = [] jb302@28: snd(0x07) jb302@28: snd(addrh) # address high byte jb302@28: snd(addrl) # address low byte jb302@28: snd(lenh) jb302@28: snd(lenl) jb302@28: #lc = 0 jb302@28: #while lc != l: jb302@28: # lc = os.path.getsize('out'); jb302@28: #return rcv() jb302@28: jb302@28: registers = { jb302@28: 'r0':0, jb302@28: 'r1':1, jb302@28: 'r2':2, jb302@28: 'r3':3, jb302@28: 'dph':4, jb302@28: 'dpl':5, jb302@28: 'sph':6, jb302@28: 'spl':7, jb302@28: 'a':8, jb302@28: 'flags':9 jb302@28: } jb302@28: jb302@28: cmds = { jb302@28: 'step':step, jb302@28: 'run':run, jb302@28: 'sr':set_reg, jb302@28: 'gr':get_reg, jb302@28: 'sf':set_flag, jb302@28: 'gf':get_flag, jb302@28: 'sb':set_block, jb302@28: 'gb':get_block jb302@28: }