diff --git a/assembler.py b/assembler.py index b4fe1e1..69c75c9 100644 --- a/assembler.py +++ b/assembler.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 import re - from keystone import * REG_EXP = re.compile(r"(r\d+)") @@ -13,15 +12,14 @@ def main() -> None: print("Xbox 360 Interactive Assembler") - addr = 0 - line_split = None ks = Ks(KS_ARCH_PPC, KS_MODE_PPC32 + KS_MODE_BIG_ENDIAN) - capturing = False code_lines = [] + while True: - line_split = None line = input("ASM> ").strip() + line_split = None + if ": " in line: line_split = line.split(": ") @@ -53,30 +51,29 @@ def main() -> None: # parse as assembly try: - if len(line_split) == 2: + code = bytes() + if line_split is not None and len(line_split) == 2: line_split[1] = REG_EXP.sub(r"%\1", line_split[1]) - (code, line_num) = ks.asm(line_split[1], int(line_split[0], 16)) + code, _ = ks.asm(line_split[1], int(line_split[0], 16)) code = bytes(code) if capturing: code_lines.append((line_split[1], code)) - else: - print(code.hex().upper()) - code = ", ".join([f"0x{x:02X}" for x in code]) - code = f"BYTE code[] = {{ {code} }}; // {line_split[1]}" - print(code) + print(code.hex().upper()) + code = ", ".join([f"0x{x:02X}" for x in code]) + code = f"BYTE code[] = {{ {code} }}; // {line_split[1]}" + print(code) else: line = REG_EXP.sub(r"%\1", line) - (code, line_num) = ks.asm(line) + code, _ = ks.asm(line) code = bytes(code) if capturing: code_lines.append((line, code)) - else: - print(code.hex().upper()) - code = ", ".join([f"0x{x:02X}" for x in code]) - code = f"BYTE code[] = {{ {code} }}; // {line}" - print(code) + print(code.hex().upper()) + code = ", ".join([f"0x{x:02X}" for x in code]) + code = f"BYTE code[] = {{ {code} }}; // {line}" + print(code) except Exception as e: - print(e.message) + print(str(e)) if __name__ == "__main__": main() \ No newline at end of file