diff options
| author | uvok | 2026-01-05 13:49:13 +0100 |
|---|---|---|
| committer | uvok | 2026-01-05 13:49:13 +0100 |
| commit | f0ea83ca7a5342d7cb1bdebeda7b80c1e4392543 (patch) | |
| tree | a1c15c035caa56eb74258ad445d02147e6a4089d /nandgame/assembler/disas.py | |
| parent | 4aebb30c43906697f60b437abe049f1cb8153f16 (diff) | |
Nicer disas output
- move jump in instruction
- have better zero args
- canocicalize some instructions
Diffstat (limited to 'nandgame/assembler/disas.py')
| -rwxr-xr-x | nandgame/assembler/disas.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/disas.py index f7669c0..cabdcdd 100755 --- a/nandgame/assembler/disas.py +++ b/nandgame/assembler/disas.py @@ -9,6 +9,9 @@ I don't like the "C-style" one nandgame introduces. import sys +ZERO = "#0" +DEST_NONE = "_" + def decode_jump(ins: int) -> str: if (ins & 0x7) == 0: @@ -74,7 +77,7 @@ def decode_arg1(ins: int) -> str: sw = (ins & (1 << 6)) != 0 if zx: - return "#0" + return ZERO if not sw: return "D" return "M" if use_mem else "A" @@ -105,7 +108,7 @@ def decode_dest(ins: int) -> str: if dM: dest += "M" - return dest if dest else "_" + return dest if dest else DEST_NONE def decode_instruction_complete(ins: int) -> list[str]: @@ -122,16 +125,22 @@ def decode_instruction_complete(ins: int) -> list[str]: op1 = decode_arg1(ins) op2 = decode_arg2(ins) if two_op else "" jumpdest = decode_jump(ins) + + # fixups + if op1 == ZERO and codename == "sub": + return ["neg", dest, op2, "", jumpdest] + return [codename, dest, op1, op2, jumpdest] def print_decoded(ins: int) -> str: (codename, dest, op1, op2, jumpdest) = decode_instruction_complete(ins) + jumpdest_str = f".{jumpdest}" if jumpdest else "" + opcode_str = f"{codename}{jumpdest_str}" dest_str = f"{dest}, " if dest else 7 * " " op1_str = f"{op1}{", " if op2 else ""}" - jumpdest_str = f"; {jumpdest}" if jumpdest else "" - return f"{codename:<5}{dest_str:<6}{op1_str:<4}{op2:<5}{jumpdest_str}" + return f"{opcode_str:<9}{dest_str:<6}{op1_str:<4}{op2:<5}" def main(): |
