summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2026-01-05 13:29:32 +0100
committeruvok2026-01-05 13:29:32 +0100
commit4aebb30c43906697f60b437abe049f1cb8153f16 (patch)
tree6869e5b4faed8e9680ef72dd27ef3a52e8293c4a
parentc43bd7342ccc976d28c75954f964e2da674333a7 (diff)
Improve assembler syntax
- 3 letter jumps - encode literal zero - no space between dests - consistent spacing, commas
-rwxr-xr-xnandgame/assembler/disas.py24
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():