summaryrefslogtreecommitdiff
path: root/nandgame/assembler/disas_main.py
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame/assembler/disas_main.py')
-rw-r--r--nandgame/assembler/disas_main.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/nandgame/assembler/disas_main.py b/nandgame/assembler/disas_main.py
new file mode 100644
index 0000000..05ce466
--- /dev/null
+++ b/nandgame/assembler/disas_main.py
@@ -0,0 +1,43 @@
+import sys
+
+import py_nand_ass.disas as dass # pyright: ignore[reportImplicitRelativeImport]
+
+
+def main():
+ if len(sys.argv) != 2:
+ print(f"Usage: {sys.argv[0]} [filename]")
+ sys.exit(1)
+
+ filename = sys.argv[1]
+ try:
+ with open(filename, "rb") as f:
+ while True:
+ insb = f.read(2)
+ if not insb:
+ break
+ ins = int.from_bytes(insb, byteorder=ENDIANNESS)
+ if ENDIANNESS in ["big", "be"]:
+ raw_ins = f"{insb[0]:02x} {insb[1]:02x}"
+ elif ENDIANNESS in ["little", "le"]:
+ raw_ins = f"{insb[1]:02x} {insb[0]:02x}"
+ else:
+ raw_ins = f"?? ??"
+ decoded_ins = dass.print_decoded(ins, False)
+ decoded_ins2 = dass.print_decoded(ins, True)
+ if decoded_ins == decoded_ins2:
+ line = f"\t{raw_ins}\t{decoded_ins}"
+ else:
+ line = f"\t{raw_ins}\t{decoded_ins2:<25}; {decoded_ins}"
+
+ print(line)
+
+ except FileNotFoundError:
+ print(f"File {filename} not found.")
+ sys.exit(1)
+ # head, tail...
+ except BrokenPipeError:
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()