summaryrefslogtreecommitdiff
path: root/nandgame/assembler
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame/assembler')
-rw-r--r--nandgame/assembler/disas.cpp4
-rwxr-xr-xnandgame/assembler/disas.py4
2 files changed, 8 insertions, 0 deletions
diff --git a/nandgame/assembler/disas.cpp b/nandgame/assembler/disas.cpp
index 8f6ff3b..ac7ca0c 100644
--- a/nandgame/assembler/disas.cpp
+++ b/nandgame/assembler/disas.cpp
@@ -171,6 +171,10 @@ static Decoded fixup_ins(uint16_t ins) {
}
std::string print_decoded(uint16_t ins, bool simplify) {
+ // illegal instruction
+ if ((ins & 0xC000) == 0x8000)
+ return "halt";
+
Decoded d = simplify ? fixup_ins(ins) : decode_instruction(ins);
std::string jumpdest_str = d.jumpdest.empty() ? "" : "." + d.jumpdest;
diff --git a/nandgame/assembler/disas.py b/nandgame/assembler/disas.py
index 56b44c4..5d8ccf5 100755
--- a/nandgame/assembler/disas.py
+++ b/nandgame/assembler/disas.py
@@ -183,6 +183,10 @@ def fixup_ins(ins: int) -> list[str]:
def print_decoded(ins: int, simplify: bool) -> str:
+ # illegal instruction
+ if ins & 0xC000 == 0x8000:
+ return "halt"
+
if simplify:
(mnemonic, dest, op1, op2, jumpdest) = fixup_ins(ins)
else: