diff options
Diffstat (limited to 'nandgame/assembler')
| -rw-r--r-- | nandgame/assembler/assembler_main .py | 28 | ||||
| -rwxr-xr-x | nandgame/assembler/createbin_main.py (renamed from nandgame/assembler/createbin.py) | 0 | ||||
| -rwxr-xr-x | nandgame/assembler/disas_ins_main.py (renamed from nandgame/assembler/disas_ins.py) | 4 | ||||
| -rw-r--r-- | nandgame/assembler/disas_main.py | 43 | ||||
| -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-x | nandgame/assembler/py_nand_ass/disas.py (renamed from nandgame/assembler/disas.py) | 40 | ||||
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/disas_test.py (renamed from nandgame/assembler/disas_test.py) | 0 | ||||
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/lexer.py (renamed from nandgame/assembler/lexer.py) | 0 | ||||
| -rwxr-xr-x | nandgame/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-x | nandgame/assembler/py_nand_ass/simple_assembler.py (renamed from nandgame/assembler/simple_assembler.py) | 14 | ||||
| -rw-r--r-- | nandgame/assembler/simple_assembler_main.py | 17 | ||||
| -rwxr-xr-x | nandgame/assembler/tlexer_main.py (renamed from nandgame/assembler/tlexer.py) | 5 | ||||
| -rwxr-xr-x | nandgame/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() |
