2 Bits, 1 Byte
2 Bits, 1 Byte is an assembly language for a 2-bit CPU, made by User:Gilbert189. With 1 byte of memory, this machine could store at least 2 instructions.
Operations
The following are instructions of 2 Bits, 1 Byte:
| Code | Name | Description | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | DON | DO Nothing. Or in other words, NOP. | ||||||||||
| 01 | ACT | ACTion. Given value in memory, change the value according to the following table:
| ||||||||||
| 10 | JMP | JuMP. Jump (unconditionally) to address specified. | ||||||||||
| 11 | END | END. Print the entire memory as character and end the program. |
The instruction pointer can wrap around, thus allowing more "complicated" programs.
Programs
Since the memory is one byte, you can represent the entire program with just one character.
For example:
I
becomes:
01001001
which, when disassembled, becomes:
ACT 00b JMP 01b
Example codes
Endless loop
'
Disassembled:
DON JMP 01b END ; lol
Output 'm'
a
Disassembled:
ACT 10b DON ; becomes END
Alternative
]
Quine
Any digit outputs itself. For example:
7
Each ASCII digit starts with 0011 in binary, so the first two instructions are DON END.
Also, any character with ASCII value not less than 0xC0 is a quine, because the first instruction is END.
Another Quine
?
Output "|"
~
Output "{"
t
Truth-machine
nn 01 01 11
Where nn is replaced with the two-bit representation of the input: 00b or 01b. In line with truth-machines with limited IO, the memory location to monitor is the first two bits, and can be "read" every time the IP = 1. The final memory dump is not relevant under this convention. The zero input program is \x17 and the one input is W.
All examples
\x00 → Does not terminate
\x01 → Does not terminate
\x02 → Does not terminate
\x03 → \x03
\x04 → \xC4
\x05 → 5
\x06 → Does not terminate
\x07 → 5
\x08 → Does not terminate
\x09 → Does not terminate
\x0A → Does not terminate
\x0B → \x0B
\x0C → \x0C
\x0D → \x0D
\x0E → \x0E
\x0F → \x0F
\x10 → \xD0
\x11 → Does not terminate
\x12 → Does not terminate
\x13 → \xD3
\x14 → Does not terminate
\x15 → Does not terminate
\x16 → Does not terminate
\x17 → '
\x18 → \xD0
\x19 → m
\x1A → Does not terminate
\x1B → \x13
\x1C → \x1F
\x1D → \x1F
\x1E → \x1F
\x1F → Does not terminate
\x20 → Does not terminate
! → Does not terminate
" → Does not terminate
# → Does not terminate
$ → Does not terminate
% → Does not terminate
& → Does not terminate
' → Does not terminate
( → Does not terminate
) → Does not terminate
* → Does not terminate
+ → +
, → Does not terminate
- → Does not terminate
. → Does not terminate
/ → /
0 → 0
1 → 1
2 → 2
3 → 3
4 → 4
5 → 5
6 → 6
7 → 7
8 → 8
9 → 9
: → :
; → ;
< → <
= → =
> → >
? → ?
@ → Does not terminate
A → \x8D
B → Does not terminate
C → \x83
D → \xC4
E → \xB9
F → Does not terminate
G → Does not terminate
H → Does not terminate
I → Does not terminate
J → Does not terminate
K → \x8B
L → \x8C
M → \x8D
N → \x8E
O → \x8F
P → l
Q → q
R → n
S → c
T → Does not terminate
U → \xB9
V → n
W → Does not terminate
X → l
Y → Does not terminate
Z → Does not terminate
[ → k
\ → l
] → m
^ → n
_ → o
` → l
a → m
b → n
c → o
d → l
e → Does not terminate
f → Does not terminate
g → k
h → l
i → q
j → n
k → c
l → Does not terminate
m → \xB9
n → n
o → Does not terminate
p → s
q → r
r → s
s → \x9E
t → {
u → {
v → Does not terminate
w → \xB9
x → {
y → Does not terminate
z → {
{ → y
| → \x7F
} → ~
~ → |
\x7F → }
\x80 → Does not terminate
\x81 → Does not terminate
\x82 → Does not terminate
\x83 → Does not terminate
\x84 → Does not terminate
\x85 → Does not terminate
\x86 → Does not terminate
\x87 → Does not terminate
\x88 → Does not terminate
\x89 → Does not terminate
\x8A → Does not terminate
\x8B → Does not terminate
\x8C → Does not terminate
\x8D → Does not terminate
\x8E → Does not terminate
\x8F → Does not terminate
\x90 → \xD0
\x91 → m
\x92 → Does not terminate
\x93 → \x13
\x94 → Does not terminate
\x95 → Does not terminate
\x96 → Does not terminate
\x97 → \xA7
\x98 → \xD0
\x99 → \x9E
\x9A → Does not terminate
\x9B → \x93
\x9C → \x9F
\x9D → \x9E
\x9E → \x9F
\x9F → Does not terminate
\xA0 → Does not terminate
\xA1 → Does not terminate
\xA2 → Does not terminate
\xA3 → \xA3
\xA4 → Does not terminate
\xA5 → Does not terminate
\xA6 → Does not terminate
\xA7 → Does not terminate
\xA8 → Does not terminate
\xA9 → Does not terminate
\xAA → Does not terminate
\xAB → \xAB
\xAC → \xAC
\xAD → \xAD
\xAE → \xAE
\xAF → \xAF
\xB0 → Does not terminate
\xB1 → \xBD
\xB2 → Does not terminate
\xB3 → \xB3
\xB4 → Does not terminate
\xB5 → \xB9
\xB6 → Does not terminate
\xB7 → \xB7
\xB8 → Does not terminate
\xB9 → \xB1
\xBA → Does not terminate
\xBB → \xBB
\xBC → Does not terminate
\xBD → \xB5
\xBE → \xBE
\xBF → \xBF
\xC0 → \xC0
\xC1 → \xC1
\xC2 → \xC2
\xC3 → \xC3
\xC4 → \xC4
\xC5 → \xC5
\xC6 → \xC6
\xC7 → \xC7
\xC8 → \xC8
\xC9 → \xC9
\xCA → \xCA
\xCB → \xCB
\xCC → \xCC
\xCD → \xCD
\xCE → \xCE
\xCF → \xCF
\xD0 → \xD0
\xD1 → \xD1
\xD2 → \xD2
\xD3 → \xD3
\xD4 → \xD4
\xD5 → \xD5
\xD6 → \xD6
\xD7 → \xD7
\xD8 → \xD8
\xD9 → \xD9
\xDA → \xDA
\xDB → \xDB
\xDC → \xDC
\xDD → \xDD
\xDE → \xDE
\xDF → \xDF
\xE0 → \xE0
\xE1 → \xE1
\xE2 → \xE2
\xE3 → \xE3
\xE4 → \xE4
\xE5 → \xE5
\xE6 → \xE6
\xE7 → \xE7
\xE8 → \xE8
\xE9 → \xE9
\xEA → \xEA
\xEB → \xEB
\xEC → \xEC
\xED → \xED
\xEE → \xEE
\xEF → \xEF
\xF0 → \xF0
\xF1 → \xF1
\xF2 → \xF2
\xF3 → \xF3
\xF4 → \xF4
\xF5 → \xF5
\xF6 → \xF6
\xF7 → \xF7
\xF8 → \xF8
\xF9 → \xF9
\xFA → \xFA
\xFB → \xFB
\xFC → \xFC
\xFD → \xFD
\xFE → \xFE
\xFF → \xFF
Interpreters
- JavaScript interpreter by User:Hakerh400
- x86 assembly interpreter by User:Bangyen
- Interpreter in Snap!
- C++ interpreter by User:None1
- Haskell interpreter by User:Hakerh400
- User:Tommyaweosme/2 bits 1 byte HTML interpreter by User:Tommyaweosme
See also
- 3 Bits, 3 Bytes
- 4 bits, 8 bytes
- 2 Bits and Bytes, a relative variant of this language
- 2 poets, 1 poem
- 2 Bits, 1 Byte but 01 and 10 are swapped