Ejemplo n.º 1
0
Archivo: run.py Proyecto: noriok/pdp11
def run(bytes, mode):
    data = Data(bytes[16:])

    isdump = mode == MODE_DUMP
    offset = 0
    text_bytes = bytes[16:] # テキストデータ
    vm = VM(text_bytes)
    # TODO:dumpとrunは分ける。
    while data.has_more_elements():
        pc = vm.pc()
        op = (text_bytes[pc+1] << 8) | text_bytes[pc]
        print("pc:", pc, hex(pc), "op:", op, oct(op), hex(op))

        # ダンプ用
        d = opcode.dispatch(op, data, MODE_DUMP, vm)
        print("dump:", d)
        # ダンプするとpcが書き換わるので、元に戻す
        vm.set_pc(pc)
        
        d = opcode.dispatch(op, data, mode, vm)


        vm.dump_reg()
Ejemplo n.º 2
0
Archivo: dump.py Proyecto: noriok/pdp11
def odump(data):
    def print_format(offset, bytes, dump):
        print("%4x:" % offset, end="") # オフセット
        xs = [] # 16進数で出力
        for i in range(0, len(bytes), 2):
            x = (bytes[i+1] << 8) | bytes[i]
            xs.append(" %04x" % x)
        print("".join(xs).ljust(16), end="")

        d = list(map(str, dump))
        if len(d) == 1:
            s = d[0]
        else:
            s = d[0] + " " + ", ".join(d[1:])
        s = s.ljust(20)
        print(s, end="")

        ys = [] # 8進数で出力
        for i in range(0, len(bytes), 2):
            x = (bytes[i+1] << 8) | bytes[i]
            ys.append(" %06o" % x)
        print("".join(ys))
        pass
    
    offset = 0
    while data.has_more_elements():
        if offset >= _text_size: break
        data.marked()
        op = util.read2(data)

        d = opcode.dispatch(op, data, run.MODE_DUMP, None)
        eatbytes = data.get_readbytes_from_mark() # 読み込んだバイト配列

        # ダンプ
        print_format(offset, eatbytes, d)

        # 読み込んだバイト分、オフセットを進める
        offset += len(data.get_readbytes_from_mark())