annotate dbg/dbg.py @ 29:83e80c2c489c

seperated working emu code from broken emu code. wrote dbg interface
author james <jb302@eecs.qmul.ac.uk>
date Sun, 13 Apr 2014 22:42:57 +0100
parents 6d32e54e5c16
children 4411dee34085
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@29 8 # see dbgi() 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@29 13 open('out', 'w').close()
jb302@29 14
jb302@29 15 def snd(self, m):
jb302@29 16 self.Emu.stdin.write(struct.pack('>B', m))
jb302@28 17
jb302@29 18 def rcv(self, l):
jb302@29 19 lc = 0
jb302@29 20 while lc != l:
jb302@29 21 lc = os.path.getsize('out')
jb302@29 22 sleep(0.5)
jb302@29 23 with open('out', 'r') as f:
jb302@29 24 c = f.read()
jb302@29 25 open('out', 'w').close()
jb302@29 26 return c
jb302@28 27
jb302@29 28 def step(self):
jb302@29 29 self.snd(0x00)
jb302@28 30
jb302@29 31 def run(self, lenh, lenl):
jb302@29 32 self.snd(0x01)
jb302@29 33 snd(lenh)
jb302@29 34 snd(lenl)
jb302@28 35
jb302@29 36 def set_reg(self, reg, data):
jb302@29 37 self.snd(0x02)
jb302@29 38 self.snd(reg) # reg
jb302@29 39 self.snd(data) # data
jb302@28 40
jb302@29 41 def get_reg(self, reg):
jb302@29 42 self.snd(0x03)
jb302@29 43 self.snd(reg) # reg
jb302@29 44 return self.rcv(1)
jb302@28 45
jb302@29 46 def set_flag(self, flag, on):
jb302@29 47 self.snd(0x04)
jb302@29 48 if on == 0:
jb302@29 49 self.snd(flag)
jb302@29 50 self.snd(0)
jb302@29 51 else:
jb302@29 52 self.snd(flag)
jb302@29 53 self.snd(1)
jb302@28 54
jb302@29 55 def get_flag(self, flag):
jb302@29 56 self.snd(0x05)
jb302@29 57 self.snd(flag)
jb302@29 58 return self.rcv(1)
jb302@28 59
jb302@29 60 def set_block(self, addrh, addrl, data):
jb302@29 61 self.snd(0x06)
jb302@29 62 self.snd(addrh) # address high byte
jb302@29 63 self.snd(addrl) # address low byte
jb302@29 64 self.snd((len(data) >> 8) & 0xFF)
jb302@29 65 self.snd(len(data) & 0xFF)
jb302@29 66 for b in data:
jb302@29 67 self.snd(b) # data
jb302@28 68
jb302@29 69 def get_block(self, addrh, addrl, lenh, lenl):
jb302@29 70 block = []
jb302@29 71 self.snd(0x07)
jb302@29 72 self.snd(addrh) # address high byte
jb302@29 73 self.snd(addrl) # address low byte
jb302@29 74 self.snd(lenh)
jb302@29 75 self.snd(lenl)
jb302@29 76 return self.rcv(lenl | (lenh << 8))
jb302@28 77
jb302@29 78 def get_a(self):
jb302@29 79 self.snd(0x09)
jb302@29 80 return self.rcv(1)
jb302@28 81
jb302@29 82 def get_flags(self):
jb302@29 83 self.snd(0x0A)
jb302@29 84 return self.rcv(1)
jb302@28 85
jb302@29 86 def get_ir(self):
jb302@29 87 self.snd(0x0B)
jb302@29 88 return self.rcv(1)
jb302@29 89
jb302@29 90