From 29cb28fa49261f2256e1925b320cab5fb12b3ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Sat, 23 Jul 2022 15:51:11 +0300 Subject: [PATCH] Add raw binary to disassemly --- thingamajig_disasm.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/thingamajig_disasm.py b/thingamajig_disasm.py index 6320bb2..2cf0a9b 100644 --- a/thingamajig_disasm.py +++ b/thingamajig_disasm.py @@ -29,7 +29,7 @@ opcodes = [ Instruction = namedtuple('Instruction', ['opcode', 'rx', 'ry', 'addr']) Data = namedtuple('Data', ['byte']) -Statement = namedtuple('Statement', ['addr', 'contents']) +Statement = namedtuple('Statement', ['addr', 'raw', 'contents']) def segment(binary, origin): statements = [] @@ -47,22 +47,25 @@ def segment(binary, origin): if not opcodes[opcode].ry and ry != 0: valid = False if not valid: - statements.append(Statement(ip, Data(byte))) + raw = binary[ip:ip + 1] + statements.append(Statement(ip, raw, Data(byte))) ip += 1 elif opcodes[opcode].addr: + raw = binary[ip:ip + 3] addr = (binary[ip + 1] << 8) + binary[ip + 2] instruction = Instruction(opcode, rx, ry, addr) - statements.append(Statement(ip, instruction)) + statements.append(Statement(ip, raw, instruction)) ip += 3 else: + raw = binary[ip:ip + 1] instruction = Instruction(opcode, rx, ry, None) - statements.append(Statement(ip, instruction)) + statements.append(Statement(ip, raw, instruction)) ip += 1 return statements def disasm(binary, origin = 0): - for addr, contents in segment(binary, origin): + for addr, raw, contents in segment(binary, origin): if type(contents) == Data: statement = f'db 0x{contents.byte:02x}' else: @@ -84,7 +87,7 @@ def disasm(binary, origin = 0): statement = f'{mnemonic} {fields}' else: statement = mnemonic - print(f'{addr:04x} {statement}') + print(f'{addr:04x} {raw.hex():6} {statement}') if __name__ == '__main__': import sys