annotate dbg/dbg.py @ 35:2e35be400012

took broken instructions out of the iset
author james <jb302@eecs.qmul.ac.uk>
date Thu, 17 Apr 2014 13:34:56 +0100
parents 4411dee34085
children db6b8c9552bb
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@34 8 # see controller() 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@34 15 # Alternetive snd and rcv functions need to be
jb302@34 16 # written read/write using serial buffer to make
jb302@34 17 # this class talk to an emulator running on
jb302@34 18 # an MCU
jb302@29 19 def snd(self, m):
jb302@29 20 self.Emu.stdin.write(struct.pack('>B', m))
jb302@28 21
jb302@29 22 def rcv(self, l):
jb302@29 23 lc = 0
jb302@29 24 while lc != l:
jb302@29 25 lc = os.path.getsize('out')
jb302@34 26 #sleep(0.5)
jb302@29 27 with open('out', 'r') as f:
jb302@29 28 c = f.read()
jb302@29 29 open('out', 'w').close()
jb302@29 30 return c
jb302@28 31
jb302@29 32 def step(self):
jb302@29 33 self.snd(0x00)
jb302@28 34
jb302@34 35 def run(self):
jb302@29 36 self.snd(0x01)
jb302@28 37
jb302@29 38 def set_reg(self, reg, data):
jb302@29 39 self.snd(0x02)
jb302@29 40 self.snd(reg) # reg
jb302@29 41 self.snd(data) # data
jb302@28 42
jb302@29 43 def get_reg(self, reg):
jb302@29 44 self.snd(0x03)
jb302@29 45 self.snd(reg) # reg
jb302@29 46 return self.rcv(1)
jb302@28 47
jb302@29 48 def set_flag(self, flag, on):
jb302@29 49 self.snd(0x04)
jb302@29 50 if on == 0:
jb302@29 51 self.snd(flag)
jb302@29 52 self.snd(0)
jb302@29 53 else:
jb302@29 54 self.snd(flag)
jb302@29 55 self.snd(1)
jb302@28 56
jb302@29 57 def get_flag(self, flag):
jb302@29 58 self.snd(0x05)
jb302@29 59 self.snd(flag)
jb302@29 60 return self.rcv(1)
jb302@28 61
jb302@29 62 def set_block(self, addrh, addrl, data):
jb302@29 63 self.snd(0x06)
jb302@29 64 self.snd(addrh) # address high byte
jb302@29 65 self.snd(addrl) # address low byte
jb302@29 66 self.snd((len(data) >> 8) & 0xFF)
jb302@29 67 self.snd(len(data) & 0xFF)
jb302@29 68 for b in data:
jb302@29 69 self.snd(b) # data
jb302@28 70
jb302@29 71 def get_block(self, addrh, addrl, lenh, lenl):
jb302@29 72 block = []
jb302@29 73 self.snd(0x07)
jb302@29 74 self.snd(addrh) # address high byte
jb302@29 75 self.snd(addrl) # address low byte
jb302@29 76 self.snd(lenh)
jb302@29 77 self.snd(lenl)
jb302@29 78 return self.rcv(lenl | (lenh << 8))
jb302@28 79
jb302@29 80 def get_a(self):
jb302@29 81 self.snd(0x09)
jb302@29 82 return self.rcv(1)
jb302@28 83
jb302@29 84 def get_flags(self):
jb302@29 85 self.snd(0x0A)
jb302@29 86 return self.rcv(1)
jb302@28 87
jb302@29 88 def get_ir(self):
jb302@29 89 self.snd(0x0B)
jb302@29 90 return self.rcv(1)
jb302@29 91
jb302@34 92 def run_len(self, lenh, lenl):
jb302@34 93 self.snd(0x0C)
jb302@34 94 self.snd(lenh)
jb302@34 95 self.snd(lenl)
jb302@29 96
jb302@34 97 def free_run(self):
jb302@34 98 self.snd(0x0D)
jb302@34 99
jb302@34 100 def set_bp(self, i, addrh, addrl):
jb302@34 101 self.snd(0x0E)
jb302@34 102 self.snd(i)
jb302@34 103 self.snd(addrh)
jb302@34 104 self.snd(addrl)
jb302@34 105
jb302@34 106
jb302@34 107
jb302@34 108
jb302@34 109