From 4aebb30c43906697f60b437abe049f1cb8153f16 Mon Sep 17 00:00:00 2001 From: uvok Date: Mon, 5 Jan 2026 13:29:32 +0100 Subject: Improve assembler syntax - 3 letter jumps - encode literal zero - no space between dests - consistent spacing, commas --- nandgame/assembler/disas.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'nandgame/assembler/disas.py') diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/disas.py index 11f7508..f7669c0 100755 --- a/nandgame/assembler/disas.py +++ b/nandgame/assembler/disas.py @@ -14,7 +14,7 @@ def decode_jump(ins: int) -> str: if (ins & 0x7) == 0: return "" if (ins & 0x7) == 0x7: - return "j" + return "jmp" jl = (ins & (1 << 2)) != 0 je = (ins & (1 << 1)) != 0 @@ -32,11 +32,11 @@ def decode_jump(ins: int) -> str: # implied: only one flag is 1 if jl: - return "jl" + return "jlt" if je: - return "je" + return "jeq" if jg: - return "jg" + return "jgt" return "" @@ -54,7 +54,7 @@ def decode_ins(ins: int) -> (str, bool): if opcode == 0b010: return "xor", True if opcode == 0b011: - return "neg", False + return "not", False if opcode == 0b100: return "add", True if opcode == 0b101: @@ -74,7 +74,7 @@ def decode_arg1(ins: int) -> str: sw = (ins & (1 << 6)) != 0 if zx: - return "0" + return "#0" if not sw: return "D" return "M" if use_mem else "A" @@ -99,13 +99,13 @@ def decode_dest(ins: int) -> str: dM = (ins & (1 << 3)) != 0 dest = "" if dA: - dest += "A " + dest += "A" if dD: - dest += "D " + dest += "D" if dM: dest += "M" - return dest + return dest if dest else "_" def decode_instruction_complete(ins: int) -> list[str]: @@ -128,10 +128,10 @@ def decode_instruction_complete(ins: int) -> list[str]: def print_decoded(ins: int) -> str: (codename, dest, op1, op2, jumpdest) = decode_instruction_complete(ins) - dest_str = f"{dest:<5}, " if dest else 7 * " " + dest_str = f"{dest}, " if dest else 7 * " " + op1_str = f"{op1}{", " if op2 else ""}" jumpdest_str = f"; {jumpdest}" if jumpdest else "" - op2_str = f", {op2}" if op2 else "" - return f"{codename:<5}{dest_str}{op1:<2}{op2_str:<5}{jumpdest_str}" + return f"{codename:<5}{dest_str:<6}{op1_str:<4}{op2:<5}{jumpdest_str}" def main(): -- cgit v1.2.3