#!/usr/bin/env python3 import utils import sys import dasm.instrs as instrs instrs.addrs.update({ 0x1e: "[__WORD]", 0x1f: "__WORD" }) if len(sys.argv) != 2: print("usage: disasm.py [hex file]") exit(1) hexfile = open(sys.argv[1],"r") wordlist = utils.hex_to_words(hexfile.read()) def decode_addr(addr): if addr < 0x8: return (instrs.regs[addr],0) if addr < 0x10: return ('[' + instrs.regs[addr - 0x8] + ']',0) if addr < 0x18: return ('[' + instrs.regs[addr - 0x10] + ' + __WORD]',1) if addr & 0x20: return (hex(addr & 0x1f),0) if addr == 0x1f or addr == 0x1e: return (instrs.addrs[addr],1) else: return (instrs.addrs[addr],0) return ("UNKNOWN",0)
def add_watchpoint(self,watchpoint): lib.add_watchpoint(byref(self.struct), watchpoint) def del_watchpoint(self,watchpoint): lib.del_watchpoint(byref(self.struct), watchpoint) def get_nonzero_chunks(self): last = c_uint16(0) start = c_uint16(0) end = c_uint16(0) chunks = [] while True: lib.get_next_nonzero_chunk(byref(self.struct), last, byref(start), byref(end)) if start.value == c_uint16(-1).value: break chunks.append((start.value,end.value)) last.value = end.value return chunks if __name__ == "__main__": import sys import utils ifile = open(sys.argv[1],"r") mem = utils.hex_to_words(ifile.read()) cpu = DCPU() cpu.load_from_hex(mem) cpu.run_forever()