summaryrefslogtreecommitdiff
path: root/nandgame
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame')
-rw-r--r--nandgame/assembler/assembler_main .py28
-rwxr-xr-xnandgame/assembler/createbin_main.py (renamed from nandgame/assembler/createbin.py)0
-rwxr-xr-xnandgame/assembler/disas_ins_main.py (renamed from nandgame/assembler/disas_ins.py)4
-rw-r--r--nandgame/assembler/disas_main.py43
-rw-r--r--nandgame/assembler/py_nand_ass/__init__.py (renamed from nandgame/assembler/__init__.py)0
-rw-r--r--nandgame/assembler/py_nand_ass/assembler.py (renamed from nandgame/assembler/assembler.py)23
-rwxr-xr-xnandgame/assembler/py_nand_ass/disas.py (renamed from nandgame/assembler/disas.py)40
-rwxr-xr-xnandgame/assembler/py_nand_ass/disas_test.py (renamed from nandgame/assembler/disas_test.py)0
-rwxr-xr-xnandgame/assembler/py_nand_ass/lexer.py (renamed from nandgame/assembler/lexer.py)0
-rwxr-xr-xnandgame/assembler/py_nand_ass/parser.py (renamed from nandgame/assembler/parser.py)0
-rw-r--r--nandgame/assembler/py_nand_ass/parser_types.py (renamed from nandgame/assembler/parser_types.py)0
-rwxr-xr-xnandgame/assembler/py_nand_ass/simple_assembler.py (renamed from nandgame/assembler/simple_assembler.py)14
-rw-r--r--nandgame/assembler/simple_assembler_main.py17
-rwxr-xr-xnandgame/assembler/tlexer_main.py (renamed from nandgame/assembler/tlexer.py)5
-rwxr-xr-xnandgame/assembler/tparse_main.py (renamed from nandgame/assembler/tparser.py)5
15 files changed, 100 insertions, 79 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)
+
diff --git a/nandgame/assembler/createbin.py b/nandgame/assembler/createbin_main.py
index e2497cd..e2497cd 100755
--- a/nandgame/assembler/createbin.py
+++ b/nandgame/assembler/createbin_main.py
diff --git a/nandgame/assembler/disas_ins.py b/nandgame/assembler/disas_ins_main.py
index 369d3c6..c2417d5 100755
--- a/nandgame/assembler/disas_ins.py
+++ b/nandgame/assembler/disas_ins_main.py
@@ -2,7 +2,9 @@
import sys
-from .disas import print_decoded
+from py_nand_ass.disas import (
+ print_decoded,
+) # pyright: ignore[reportImplicitRelativeImport]
if __name__ == "__main__":
if len(sys.argv) != 2:
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()
diff --git a/nandgame/assembler/__init__.py b/nandgame/assembler/py_nand_ass/__init__.py
index e69de29..e69de29 100644
--- a/nandgame/assembler/__init__.py
+++ b/nandgame/assembler/py_nand_ass/__init__.py
diff --git a/nandgame/assembler/assembler.py b/nandgame/assembler/py_nand_ass/assembler.py
index e8ce3aa..ee8baf0 100644
--- a/nandgame/assembler/assembler.py
+++ b/nandgame/assembler/py_nand_ass/assembler.py
@@ -4,7 +4,6 @@ from dataclasses import dataclass
import sys
from typing import Callable, Iterable
-from .parser import parser
from . import parser_types as pt
from .simple_assembler import encode_instruction
@@ -163,25 +162,3 @@ def assemble(instructions: Iterable[pt.AsmLine]) -> Program:
case _:
pass
return prog
-
-
-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 = 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 = assemble(result)
- if len(sys.argv) >= 3:
- dest = sys.argv[2]
- else:
- dest = sys.argv[1] + ".bin"
- p.write_to_file(dest)
diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/py_nand_ass/disas.py
index 6f520bc..116aea4 100755
--- a/nandgame/assembler/disas.py
+++ b/nandgame/assembler/py_nand_ass/disas.py
@@ -199,43 +199,3 @@ def print_decoded(ins: int, simplify: bool) -> str:
op2_str = ", " if op2 else ""
op1_str = f"{op1}{op2_str}"
return f"{opcode_str:<9}{dest_str:<6}{op1_str:<4}{op2}"
-
-
-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 = print_decoded(ins, False)
- decoded_ins2 = 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()
diff --git a/nandgame/assembler/disas_test.py b/nandgame/assembler/py_nand_ass/disas_test.py
index ed4430c..ed4430c 100755
--- a/nandgame/assembler/disas_test.py
+++ b/nandgame/assembler/py_nand_ass/disas_test.py
diff --git a/nandgame/assembler/lexer.py b/nandgame/assembler/py_nand_ass/lexer.py
index e55ab05..e55ab05 100755
--- a/nandgame/assembler/lexer.py
+++ b/nandgame/assembler/py_nand_ass/lexer.py
diff --git a/nandgame/assembler/parser.py b/nandgame/assembler/py_nand_ass/parser.py
index 7cc4930..7cc4930 100755
--- a/nandgame/assembler/parser.py
+++ b/nandgame/assembler/py_nand_ass/parser.py
diff --git a/nandgame/assembler/parser_types.py b/nandgame/assembler/py_nand_ass/parser_types.py
index 3dd44b9..3dd44b9 100644
--- a/nandgame/assembler/parser_types.py
+++ b/nandgame/assembler/py_nand_ass/parser_types.py
diff --git a/nandgame/assembler/simple_assembler.py b/nandgame/assembler/py_nand_ass/simple_assembler.py
index 7fb37f4..d684635 100755
--- a/nandgame/assembler/simple_assembler.py
+++ b/nandgame/assembler/py_nand_ass/simple_assembler.py
@@ -34,7 +34,7 @@ Jumps:
import sys
from typing import Union
-import parser_types as pt
+from . import parser_types as pt
ZERO = "#0"
DEST_NONE = "_"
@@ -322,15 +322,3 @@ def assemble_file(in_filename: str, out_filename: str):
fout.write(ins.to_bytes(2, byteorder=ENDIANNESS))
except Exception as e:
raise SystemExit(f"{in_filename}:{lineno}: {e}") from e
-
-
-def main():
- if len(sys.argv) != 3:
- print(f"Usage: {sys.argv[0]} input.asm output.bin")
- sys.exit(1)
-
- assemble_file(sys.argv[1], sys.argv[2])
-
-
-if __name__ == "__main__":
- main()
diff --git a/nandgame/assembler/simple_assembler_main.py b/nandgame/assembler/simple_assembler_main.py
new file mode 100644
index 0000000..20f9615
--- /dev/null
+++ b/nandgame/assembler/simple_assembler_main.py
@@ -0,0 +1,17 @@
+import sys
+
+from py_nand_ass.simple_assembler import (
+ assemble_file,
+) # pyright: ignore[reportImplicitRelativeImport]
+
+
+def main():
+ if len(sys.argv) != 3:
+ print(f"Usage: {sys.argv[0]} input.asm output.bin")
+ sys.exit(1)
+
+ assemble_file(sys.argv[1], sys.argv[2])
+
+
+if __name__ == "__main__":
+ main()
diff --git a/nandgame/assembler/tlexer.py b/nandgame/assembler/tlexer_main.py
index 13ee095..9c068ab 100755
--- a/nandgame/assembler/tlexer.py
+++ b/nandgame/assembler/tlexer_main.py
@@ -2,7 +2,10 @@
import sys
-from .lexer import lexer
+from py_nand_ass.lexer import lexer # pyright: ignore[reportImplicitRelativeImport]
+
+if len(sys.argv) != 2:
+ sys.exit(-1)
with open(sys.argv[1], "rb") as f:
data = f.read()
diff --git a/nandgame/assembler/tparser.py b/nandgame/assembler/tparse_main.py
index b1697ed..09f5e8e 100755
--- a/nandgame/assembler/tparser.py
+++ b/nandgame/assembler/tparse_main.py
@@ -2,7 +2,10 @@
import sys
-from parser import parser
+from py_nand_ass.parser import parser # pyright: ignore[reportImplicitRelativeImport]
+
+if len(sys.argv) != 2:
+ sys.exit(-1)
with open(sys.argv[1], "rb") as f:
data = f.read()