Exemplo n.º 1
0
#!/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)
Exemplo n.º 2
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()