summaryrefslogtreecommitdiff
path: root/nandgame/instruction.txt
blob: 01ad7d000bd16810597f183186fefd0fb3543de3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
NANDGAME instruction set

| 15 | 14 | 13 | 12 | 11 | 10 |  9 |  8 |  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0 |
|Op/I| -  |  - | PnA|  X |  u |  opcode | zx | sw | dA | dD | dM | jl | je | jg |
|    | -  |  - |    |    | AnL|         |    |    |    |    |    |    |    |    |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|  _ |  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