diff options
| author | uvok | 2026-01-14 20:26:20 +0100 |
|---|---|---|
| committer | uvok | 2026-01-14 20:26:20 +0100 |
| commit | 281414ea9b42e213b85b95b7072b73d1f1e3f240 (patch) | |
| tree | f3121258ec8796e45794c866881dd439e5b5fa34 /nandgame/assembler | |
| parent | b9923e600058348f1272bd99bc9b93350509c6aa (diff) | |
relative imports
Diffstat (limited to 'nandgame/assembler')
| -rwxr-xr-x | nandgame/assembler/disas.py | 6 | ||||
| -rwxr-xr-x | nandgame/assembler/disas_ins.py | 2 | ||||
| -rwxr-xr-x | nandgame/assembler/disas_test.py | 4 | ||||
| -rwxr-xr-x | nandgame/assembler/parser.py | 26 | ||||
| -rw-r--r-- | nandgame/assembler/parser_types.py | 3 | ||||
| -rwxr-xr-x | nandgame/assembler/tlexer.py | 2 |
6 files changed, 22 insertions, 21 deletions
diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/disas.py index 9353bb5..6f520bc 100755 --- a/nandgame/assembler/disas.py +++ b/nandgame/assembler/disas.py @@ -51,7 +51,7 @@ def decode_jump(ins: int) -> str: # return op, and whether it's a one-op or two-op -def decode_ins(ins: int) -> (str, bool): +def decode_ins(ins: int) -> tuple[str, bool]: opcode = (ins >> 8) & 0x03 ar_n_log = (ins & (1 << 10)) != 0 opcode |= ar_n_log << 2 @@ -73,7 +73,7 @@ def decode_ins(ins: int) -> (str, bool): if opcode == 0b111: return "dec", False - return "<?>" + return "<?>", False # normally, X = arg1 = D @@ -206,8 +206,8 @@ def main(): print(f"Usage: {sys.argv[0]} [filename]") sys.exit(1) + filename = sys.argv[1] try: - filename = sys.argv[1] with open(filename, "rb") as f: while True: insb = f.read(2) diff --git a/nandgame/assembler/disas_ins.py b/nandgame/assembler/disas_ins.py index 4841087..369d3c6 100755 --- a/nandgame/assembler/disas_ins.py +++ b/nandgame/assembler/disas_ins.py @@ -2,7 +2,7 @@ import sys -from disas import print_decoded +from .disas import print_decoded if __name__ == "__main__": if len(sys.argv) != 2: diff --git a/nandgame/assembler/disas_test.py b/nandgame/assembler/disas_test.py index 6c0ccbe..ed4430c 100755 --- a/nandgame/assembler/disas_test.py +++ b/nandgame/assembler/disas_test.py @@ -6,7 +6,7 @@ Test bench for dsassembler. import unittest -from disas import decode_instruction_complete as di +from .disas import decode_instruction as di def make_instruction(ins): @@ -184,7 +184,7 @@ class DisasUnitTest(unittest.TestCase): self.assertEqual(Y, "") # ~A | 0 | 1 | 1 | 0 | 1 - def test_negD(self): + def test_negA(self): ins = 0b01101 ins = make_instruction(ins) (mnemonic, _, X, Y, _) = di(ins) diff --git a/nandgame/assembler/parser.py b/nandgame/assembler/parser.py index 0b34ebe..7cc4930 100755 --- a/nandgame/assembler/parser.py +++ b/nandgame/assembler/parser.py @@ -70,12 +70,12 @@ def p_line(p: P) -> None: # if error handling else: p[0] = p[1] - assert(False) + assert False def p_instruction(p: P) -> None: """instruction : valid_instruction - | one_arg_invalid + | one_arg_invalid """ p[0] = p[1] @@ -102,8 +102,10 @@ def p_no_arg(p: P) -> None: def p_onearg_invalid(p: P) -> None: """one_arg_invalid : opcode argument""" - op: Tuple[str,str] = p[1] - p[0] = pt.ErrorInstruction(p.lineno(1), op[1], "No opcode only supports one argument.") + op: tuple[str, str] = p[1] + p[0] = pt.ErrorInstruction( + p.lineno(1), op[1], "No opcode only supports one argument." + ) pass @@ -146,14 +148,12 @@ def p_opcode(p: P) -> None: def p_opcode_jmp(p: P) -> None: - """opcode_jmp : OP DOT JUMP - """ + """opcode_jmp : OP DOT JUMP""" p[0] = (p[1], p[3]) def p_opcode_njmp(p: P) -> None: - """opcode_njmp : OP - """ + """opcode_njmp : OP""" p[0] = (p[1], None) @@ -164,19 +164,21 @@ def p_number(p: P) -> None: p[0] = pt.Immediate(p[1]) -def p_error(p: LexToken) -> LexToken: +def p_error(p: LexToken | None) -> LexToken|None: if p: - print(f"WARNING: Unexpected {repr(p.value)} on line {p.lineno}", file=sys.stderr) + print( + f"WARNING: Unexpected {repr(p.value)} on line {p.lineno}", file=sys.stderr + ) else: print("WARNING: Unexpected end of file.", file=sys.stderr) return while True: - tok = parser.token() + tok: LexToken = parser.token() if not tok or tok.type == 'NL': break parser.errok() return tok -parser = yacc.yacc() +parser: yacc.LRParser = yacc.yacc() diff --git a/nandgame/assembler/parser_types.py b/nandgame/assembler/parser_types.py index 473242d..3dd44b9 100644 --- a/nandgame/assembler/parser_types.py +++ b/nandgame/assembler/parser_types.py @@ -1,5 +1,4 @@ from dataclasses import dataclass -from typing import Any @dataclass @@ -39,7 +38,7 @@ class AsmLine: class Instruction(AsmLine): opcode: str jumptarget: str - dest: Register|None + dest: Register | None arg1: Symbol | Register | Immediate | None arg2: Symbol | Register | Immediate | None diff --git a/nandgame/assembler/tlexer.py b/nandgame/assembler/tlexer.py index a285401..13ee095 100755 --- a/nandgame/assembler/tlexer.py +++ b/nandgame/assembler/tlexer.py @@ -2,7 +2,7 @@ import sys -from lexer import lexer +from .lexer import lexer with open(sys.argv[1], "rb") as f: data = f.read() |
