summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nandgame/instruction.txt70
1 files changed, 70 insertions, 0 deletions
diff --git a/nandgame/instruction.txt b/nandgame/instruction.txt
new file mode 100644
index 0000000..d31ef45
--- /dev/null
+++ b/nandgame/instruction.txt
@@ -0,0 +1,70 @@
+NANDGAME instruction set
+
+| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
++----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
+| _ | X | X | _ | X | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | ununsed
+| 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Load value in A
+| 1 | _ | _ | 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Use A as second operand
+| 1 | _ | _ | 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Use M as second operand
+| 1 | _ | _ | _ | _ | 0 | 0 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 & op2
+| 1 | _ | _ | _ | _ | 0 | 0 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 | op2
+| 1 | _ | _ | _ | _ | 0 | 1 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 ^ op2
+| 1 | _ | _ | _ | _ | 0 | 1 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | logic: ~op1
+| 1 | _ | _ | _ | _ | 1 | 0 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 + op2
+| 1 | _ | _ | _ | _ | 1 | 0 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 + 1
+| 1 | _ | _ | _ | _ | 1 | 1 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 - op2
+| 1 | _ | _ | _ | _ | 1 | 1 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 - 1
+| 1 | _ | _ | _ | _ | _ | _ | _ | 0 | 0 | _ | _ | _ | _ | _ | _ | op1=X, op2=Y
+| 1 | _ | _ | _ | _ | _ | _ | _ | 0 | 1 | _ | _ | _ | _ | _ | _ | op1=Y, op2=X
+| 1 | _ | _ | _ | _ | _ | _ | _ | 1 | 0 | _ | _ | _ | _ | _ | _ | op1=0, op2=Y
+| 1 | _ | _ | _ | _ | _ | _ | _ | 1 | 1 | _ | _ | _ | _ | _ | _ | op1=0, op2=Y
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | _ | _ | dst A
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | _ | dst D
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | dst M
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | jlz
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | jez
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | jgz
+
+HACK computer,
+taken from https://en.wikipedia.org/wiki/Hack_computer
+2026-01-03
+
+| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | ...
+| | | | a | c1 | c2 | c3 | c4 | c5 | c6 | ALU output: f(x,y) | Mnemonic
+| | | | MnA| | | | |AnL?| |
++----+----+----+----+----+----+----+----+----+----+--------------------------------------------------------+----------
+| 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | Load value in A
+| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | ALU / c:
+| _ | X | X | _ | _ | _ | _ | _ | _ | _ | don't care / usually 1
+
+| | | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Outputs bitwise logical And of D and A; ignores M | D&A
+| | | | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Outputs D + A; ignores M | D+A
+| | | | 0 | 0 | 0 | 0 | 1 | 1 | 1 | Outputs A - D; ignores M | A-D
+| | | | 0 | 0 | 0 | 1 | 1 | 0 | 0 | Outputs D; ignores A and M | D
+| | | | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Outputs bitwise negation of D; ignores A and M | !D
+| | | | 0 | 0 | 0 | 1 | 1 | 1 | 0 | Outputs D - 1 (decrements D); ignores A and M | D-1
+| | | | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Outputs 2's complement negative of D; ignores A and M | -D
+| | | | 0 | 0 | 1 | 0 | 0 | 1 | 1 | Outputs D - A; ignores M | D-A
+| | | | 0 | 0 | 1 | 0 | 1 | 0 | 1 | Outputs bitwise logical Or of D and A; ignores M | D|A
+| | | | 0 | 0 | 1 | 1 | 1 | 1 | 1 | Outputs D + 1 (increments D); ignores A and M | D+1
+
+| | | | 0 | 1 | 0 | 1 | 0 | 1 | 0 | Outputs 0; ignores all operands | 0
+| | | | 0 | 1 | 1 | 0 | 0 | 0 | 0 | Outputs A; ignores D and M | A
+| | | | 0 | 1 | 1 | 0 | 0 | 0 | 1 | Outputs bitwise negation of A; ignores D and M | !A
+| | | | 0 | 1 | 1 | 0 | 0 | 1 | 1 | Outputs 2's complement negative of A; ignores D and M | -A
+| | | | 0 | 1 | 1 | 0 | 1 | 1 | 1 | Outputs A + 1 (increments A); ignores D and M | A+1
+| | | | 0 | 1 | 1 | 0 | 0 | 1 | 0 | Outputs A - 1 (decrements A); ignores D and M | A-1
+| | | | 0 | 1 | 1 | 1 | 0 | 1 | 0 | Outputs −1; ignores all operands | −1
+| | | | 0 | 1 | 1 | 1 | 1 | 1 | 1 | Outputs 1; ignores all operands | 1
+
+| | | | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Outputs bitwise logical And of D and M; ignores A | D&M
+| | | | 1 | 0 | 0 | 0 | 0 | 1 | 0 | Outputs D + M; ignores A | D+M
+| | | | 1 | 0 | 0 | 0 | 1 | 1 | 1 | Outputs M - D; ignores A | M-D
+| | | | 1 | 0 | 1 | 0 | 0 | 1 | 1 | Outputs D - M; ignores A | D-M
+| | | | 1 | 0 | 1 | 0 | 1 | 0 | 1 | Outputs bitwise logical Or of D and M; ignores A | D|M
+
+| | | | 1 | 1 | 1 | 0 | 0 | 0 | 0 | Outputs M; ignores D and A | M
+| | | | 1 | 1 | 1 | 0 | 0 | 0 | 1 | Outputs bitwise negation of M; ignores D and A | !M
+| | | | 1 | 1 | 1 | 0 | 0 | 1 | 0 | Returns M-1 (decrements M); ignores D and A | M-1
+| | | | 1 | 1 | 1 | 0 | 0 | 1 | 1 | Outputs 2's complement negative of M; ignores D and A | -M
+| | | | 1 | 1 | 1 | 0 | 1 | 1 | 1 | Outputs M + 1 (increments M); ignores D and A | M+1