summaryrefslogtreecommitdiff
path: root/nandgame/assembler/assembler_main .py
blob: f77d07a4e9170c5bb9b1694a155becd860d0780e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)