Hanoi Love
Hanoi Love is a minimal stack based language created by Jeffry Johnston, April 30, 2001. Its name was inspired by the Towers of Hanoi game, while the language itself was inspired by Spaz and brainfuck.
Command | Short Name | Description |
---|---|---|
.
|
nxtstk
|
next stack: selects next stack in order (A,B,C,D). loops back to A from D. |
'
|
cpyreg
|
copy register: copies byte in register and pushes it to the stack: unless stack D, then push location pointer -1 |
,
|
pfsmir
|
pop from stack move into register: unless stack D, then pop & goto location previously pushed location |
;
|
pfsatr
|
pop from stack add to register: unless stack D, then pop location and noop |
`
|
pfssfr
|
pop from stack sub from register: unless stack D, then pop location and noop |
'
|
iomode
|
io mode prefix: next instruction will pop from stdin or push to stdout instead of a stack. |
:
|
sifzer
|
skip if zero: if the register is zero, skip instructions until the ! instruction is reached.
|
]
|
eskhlt
|
end skip/halt: if matching a : , end skip. if not matching a : , halt.
|
All characters other than .',;`":!
should be considered comments and ignored.
Overview
There are 4 stacks and one register. A, B, C, D, REG.
Stack A is the initial stack. It pops a 1 if empty, holds 8bit values, and has boundless memory (limited only by physical memory)
Both Stack B and C pop a 0 if empty, hold 8bit values, and have boundless memory (limited only by physical memory)
Stack D is for storing the location of instructions. When a push operation is performed here, the previous instruction location (current location minus one) is pushed onto the stack. When a pop operation is performed the new instruction location is popped from the stack. If a ";" or "`" instruction is performed on this stack then the instruction location is popped, but no further action is taken (this is useful for breaking out of loops).
The register holds one 8 bit value, used for swapping between stacks. It is initalized to 0.
The original implementation does not specify EOL behavior or wrapping behavior.
BF to HL
Any brainfuck program can theoretically be run in Hanoi Love using a simple translation table. The original implementation provides this:
Brainfuck | Hanoi Love |
---|---|
>
|
..,...'...
|
<
|
.,.'..
|
+
|
,.;'...
|
-
|
.,...`.'...
|
.
|
.,'"'...
|
,
|
.,",'...
|
[
|
...'..,'...:
|
]
|
...,!...;.
|
Cat program example
...'.,'";:`"'...,!
Hello world example
.'...,;';';;';';';'.,...;"'.'...,;;';;';';;'.,...;"';;;;;;;"'"';;; "'.'.,...'...,;';';';';'.,...;"'..'...,'...,;;';';';'.,...`"'.'..., ;;';';';'.,...;"';;;"'``````"'````````"'.'.,..;"'.'.,..;;;;;;;;;;"'