summaryrefslogtreecommitdiff
path: root/nandgame/assembler/assembler_main .py
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame/assembler/assembler_main .py')
-rw-r--r--nandgame/assembler/assembler_main .py28
1 files changed, 28 insertions, 0 deletions
diff --git a/nandgame/assembler/assembler_main .py b/nandgame/assembler/assembler_main .py
new file mode 100644
index 0000000..f77d07a
--- /dev/null
+++ b/nandgame/assembler/assembler_main .py
@@ -0,0 +1,28 @@
+import sys
+
+#pywrong: THIS IS A FUCKING EXECUTABLE! LEAVE ME THE FUCK ALONE.
+from py_nand_ass import parser_types as pt # pyright: ignore[reportImplicitRelativeImport]
+from py_nand_ass.parser import parser # pyright: ignore[reportImplicitRelativeImport]
+from py_nand_ass import assembler as ass # pyright: ignore[reportImplicitRelativeImport]
+
+with open(sys.argv[1], "rb") as infile:
+ data = infile.read()
+ data2 = data.decode("ascii")
+ result: list[pt.AsmLine]
+ result = parser.parse(data2, tracking=True)
+ errors = ass.check_instructions(result)
+ errors = list(errors)
+
+ if errors:
+ for e in errors:
+ print(f"ERROR: On line {e.lineno}: {e.opcode} : {e.error_message}")
+ sys.exit(1)
+
+ print("Instruction checks passed")
+ p = ass.assemble(result)
+ if len(sys.argv) >= 3:
+ dest = sys.argv[2]
+ else:
+ dest = sys.argv[1] + ".bin"
+ p.write_to_file(dest)
+