We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
RaiseAfloppaFan's Stupid Idea 0
RaiseAfloppaFan's Stupid Idea 0 or RSI0 (not to be confused with the x86-64 register rsi) is an esolang by User:raiseafloppafan7741 and User:Hammy (formerly User:Esolangist) where anyone on Codeberg can add any command that they want, as long as they follow the rules.
Base Specification
The "Base Specification" in RSI0 is the fundamental language without extensions. This is mostly rigid, however have commands added.
There are three separate memory regions -- an infinite-dimensional grid of cells, a tape of 2,763 cells, and three accumulators named A, B, and C. The cells and accumulators are all 32 bits in size, unsigned, and wrapping. On initialization, the program is loaded with the top-left UTF-32 character being at (0, 0), the character below that at (0, -1), and the character to the right at (1, 0). Empty spaces, like in Befunge, are the space character U+0020 .
There is an instruction pointer that starts out at (0, 0, 0...) and starts of with an IP delta of (1, 0, 0...) which is moving to the right in 2D. If the IP hits a space, then the pointer falls off and the program halts. If the IP reaches an unknown command, then it prints the following and halts.
The pointer got lost.
Sanity
Sanity is an important stat in the program that starts out as 100% but decreases by 0.3% per instruction by default, unless specified otherwise. If the sanity is lower than 75%, then the instruction pointer will have a 5% chance of turning left per instruction. If the sanity is lower than 50%, then it will decrease by 5% per instruction, making it unrecoverable. At less than 25%, the instruction pointer will start "hallucinating" and running a completely random instruction instead of the one that it's on. During this, the instruction pointer may also change direction randomly. Below 10%, the pointer will print "Hello, World", run a cat program, do a truth-machine or something else seemingly randomly, because it is hallucinating the commands needed. At 0%, the program halts and prints this:
The pointer hallucinated a halt command, even though there isn't even a halt command in this esolang.
Base Commands
| Command | Action | Creator |
|---|---|---|
みく or ミク or D
|
Decrements sanity by 3.9% | User:raiseafloppafan7741 |
てと or テト or I
|
Increments sanity by 4.1% | User:raiseafloppafan7741 |
|
|
Reflects the IP horizontally, not affected by insanity | User:raiseafloppafan7741 |
-
|
Reflects the IP vertically, not affected by insanity | User:raiseafloppafan7741 |
<
|
Makes the IP move left | User:raiseafloppafan7741 |
>
|
Makes the IP move right | User:raiseafloppafan7741 |
^
|
Makes the IP move up | User:raiseafloppafan7741 |
v
|
Makes the IP move down | User:raiseafloppafan7741 |
o
|
Makes the IP move forward along the Z-axis | User:raiseafloppafan7741 |
O
|
Makes the IP move backward along the Z-axis | User:raiseafloppafan7741 |
.
|
Outputs a UTF-32 string starting at the cursor with the A register containing the amount of characters to output. | User:raiseafloppafan7741 |
,
|
Asks the user for a line of UTF-32 and lays it out in the memory tape, with the A register containing the length. | User:raiseafloppafan7741 |
X
|
No-op. | User:raiseafloppafan7741 |
A
|
Swaps the values of A and B | User:raiseafloppafan7741 |
B
|
Swaps the values of B and C | User:raiseafloppafan7741 |
w
|
Writes the value in the A register to the current memory cell | User:raiseafloppafan7741 |
r
|
Reads the value from the current memory cell to the A register | User:raiseafloppafan7741 |
+
|
Increments the current cell | User:raiseafloppafan7741 |
x
|
Decrements the current cell | User:raiseafloppafan7741 |
$
|
Copies the command 2 steps forward in the IP's direction to the current tape cell. Decreases sanity by 0.45%. | User:raiseafloppafan7741 |
P
|
Sets the command 2 steps forward to the current tape cell. Decreases sanity by 0.5%. | User:raiseafloppafan7741 |
#
|
Jumps 2 steps forward in the IP's direction. Decreases sanity by 0.6%. | User:raiseafloppafan7741 |
/
|
If the IP is coming from above then redirects it to the left and vice versa. If the IP is coming from the right then redirects it downwards and vice versa. (Immune to insanity as it is a physical barrier) | User:raiseafloppafan7741 |
\
|
If the IP is coming from above then redirects it to the right and vice versa. If the IP is coming from the left then redirects it downwards and vice versa. (Immune to insanity as it is a physical barrier) | User:raiseafloppafan7741 |
`
|
If the current tape cell is zero, then it behaves like # but consumes 0.65% sanity. Otherwise, behaves like a NOP and consumes 0.4% sanity.
|
User:raiseafloppafan7741 |
←
|
Moves the tape pointer left. The tape pointer wraps around at the ends. | User:Hammy (User:Esolangist) |
→
|
Moves the tape pointer right. The tape pointer wraps around at the ends. | User:Hammy (User:Esolangist) |
🔝
|
Moves forward in Nd. | User:Hammy (User:Esolangist) |
🔙
|
Moves backward in Nd. | User:Hammy (User:Esolangist) |
¶(user) |
Loads the extensions by the user user. For example, ¶Esolangist loads the User:Esolangist extensions.
|
User:Hammy (User:Esolangist) |
Extensions
These must first be loaded using the ¶ command. They add onto the base set of instructions and may also modify the behavior of the whole language. Extensions may also depend on other extensions. (for example, the AMM sub-extension depends on the User:Esolangist extensions) By default, if an extension depends on an extension not loaded yet, the program prints the following and halts.
You are missing something.
Two extensions may redefine the same command, however if they are both loaded at the same time and the conflicting instruction is executed, then the program prints "The pointer is indecisive, why don't you go help them out?" and halts. This behavior also applies to redefining an instruction in the Base Specification.
As of 31 August 2026, there are only two extensions.
- raiseafloppafan7741 extensions
amm- Arbitrary Memory Manipulation sub-extensions
- User:Hammy extensions, archived at RaiseAfloppaFan's Stupid Idea 0/Esolangist
Computational class
With the base specification alone, RSI0 is likely either a bounded-storage machine or linear bounded automaton since despite the infinite playfield, it can only get and set the command two steps in front of the IP. However, using the Arbitrary Memory Manipulation sub-extension it should be close to Turing-complete.
RSI0 is Plushie-complete, Storm-complete level 1, Crystal-complete, and is anti-Non-Plushie-complete.
Examples
Hello, world!
This one works for the reference implementation.
v>v>v>v>v>v>v>v>v +トテトvトvトvテvトvテA++ rテトテvテvテvテvテvトw++ テトvトvトvトvトvトvテ++A トテ$.$.$.$.$.$ト+テ. テ.#r#r#r#r#r#.+ト トHello, world!テト テ#.#.#.#.#.#.#トテ ト$テ$テ$テ$テ$テ$テ$テ+ v^ト^ト^ト^ト^ト^ト^ト+ >^>^>^>^>^>^>^>^
This one also works too. (If you're lucky enough for the pointer to hallucinate a "Hello, world!" program then hallucinate a space right after.)
>YZv # /--\ |>v| |^<| \--/
Infinite loop
>テト<
Vertical version
v テ ト ^
Square version
>テトv テ ト ト テ ^テト<
They most likely do not look aligned unless your font has Latin, CJK, emojis, and other symbols all have the same width.
Cat program
,.
Vertical version
v , .
Truth machine
Alternated
>™
(kinda cheating though.)
Nondeterministic Multi-tool
This program simply loops until the sanity level reaches zero. Because of the effects of a low sanity level, this program can do any of these. You can interpret that any way you want, as either the program does that or it hallucinates the instructions to do that.
- Print "Hello, world!"
- Run a truth machine
- Print its source code
- Run deadfish
- Maybe even interpret RSI0?! (if you're lucky enough somehow)
>v ^<
One with borders to prevent the IP from escaping.
>v # /--\ |>v| |^<| \--/
Error quine
The pointer got lost.
This works because T does not mean anything in the base specification.
Plushie-completeness proof
Print 4
>$#4A→+r←.
Print 31
>$#3A→+r←.$#1.
Store the number 2 in the playfield
>++P| | <- stored between these walls
Store the number 2 in the A, B, or C registers
>++rAB |^^ ||| ||+-- store in C from B |+--- store in B from A +---- store in A
Store the number 2 in the tape
>++
See also
- Befunge-93 and Funge-98, probably the main inspirations for RSI0.
- ><>
External resources
- Codeberg repository, this is where the specification lives. You can add your own commands and send a pull request.
- The reference implementation of RSI0. It is very limited however. Program files can only be 2-dimensional, the third dimension is never entered, and the majority of User:Hammy's extensions are not supported.
- The original specification is archived here, and it is a copy of both the original version of this article and RaiseAfloppaFan's Stupid Idea 0/Esolangist, as the primary place for editing the specification has moved off the wiki.