diff options
| author | uvok | 2026-01-03 12:47:00 +0100 |
|---|---|---|
| committer | uvok | 2026-01-03 12:47:00 +0100 |
| commit | 19a235d1bf714ac084b262085ccbc537f831cc60 (patch) | |
| tree | 3b8daadf8bffa2c2a1cd224c9f9ba8941177c1ed | |
| parent | 10021fb57a6f924a85142c58372df7ad8a2970bf (diff) | |
document nandgame/HACK
| -rw-r--r-- | nandgame/instruction.txt | 70 |
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 |
