summaryrefslogtreecommitdiff
path: root/nandgame/assembler
diff options
context:
space:
mode:
authoruvok2026-01-04 14:07:05 +0100
committeruvok2026-01-04 14:07:05 +0100
commit0cbdabeaec491088d581abb6efd93f39b7166168 (patch)
tree42ab3244dd3fba17ab52548e8f4005911f25d31b /nandgame/assembler
parent87ac63bce606e11ffdec489736339ae5b87b3f9e (diff)
Start by bin creator and disassembler
Diffstat (limited to 'nandgame/assembler')
-rwxr-xr-xnandgame/assembler/createbin.py14
-rwxr-xr-xnandgame/assembler/disas.py29
2 files changed, 43 insertions, 0 deletions
diff --git a/nandgame/assembler/createbin.py b/nandgame/assembler/createbin.py
new file mode 100755
index 0000000..d4a2e7a
--- /dev/null
+++ b/nandgame/assembler/createbin.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+
+
+with open("allins.bin", "wb") as f:
+ ins=0x0000
+ # ldi A, 0
+ f.write(ins.to_bytes(2))
+
+ ins=0x00ff
+ # ldi A, 255
+ f.write(ins.to_bytes(2))
+
+ for ins in range(0x8000, 0xffff + 1):
+ f.write(ins.to_bytes(2))
diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/disas.py
new file mode 100755
index 0000000..a68acf4
--- /dev/null
+++ b/nandgame/assembler/disas.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+import sys
+
+if len(sys.argv) != 2:
+ print(f"Usage: {sys.argv[0]} [filename]")
+ sys.exit(1)
+
+def decode(ins: int) -> str:
+ if (ins & 0x8000 == 0):
+ # mov? ldr? ldi? aaaaaaaaaaa....
+ return f"mov A, #{ins}"
+ else:
+ return "<unknown>"
+
+try:
+ with open(sys.argv[1], "rb") as f:
+ while True:
+ insb = f.read(2)
+ if not insb: break
+ ins = int.from_bytes(insb)
+ print(f"\t{insb[0]:02x} {insb[1]:02x}\t{decode(ins)}")
+
+except FileNotFoundError:
+ print(f"File not found.")
+ sys.exit(1)
+# head, tail...
+except BrokenPipeError:
+ sys.exit(0)