diff options
| author | uvok | 2026-01-05 13:29:32 +0100 |
|---|---|---|
| committer | uvok | 2026-01-05 13:29:32 +0100 |
| commit | 4aebb30c43906697f60b437abe049f1cb8153f16 (patch) | |
| tree | 6869e5b4faed8e9680ef72dd27ef3a52e8293c4a /nandgame/assembler/disas.py | |
| parent | c43bd7342ccc976d28c75954f964e2da674333a7 (diff) | |
Improve assembler syntax
- 3 letter jumps
- encode literal zero
- no space between dests
- consistent spacing, commas
Diffstat (limited to 'nandgame/assembler/disas.py')
| -rwxr-xr-x | nandgame/assembler/disas.py | 24 |
1 files changed, 12 insertions, 12 deletions
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 "<unknown>" @@ -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(): |
