A stack-based Esolang that allows 2d programming.

Commands

CmdDescription
+Addition: Pop two values a and b, then push the result of a+b
-Subtraction: Pop two values a and b, then push the result of b-a
*Multiplication: Pop two values a and b, then push the result of a*b
/Integer division: Pop two values a and b, then push the result of b/a, rounded down. According to the specifications, if a is zero, ask the user what result they want.
%Modulo: Pop two values a and b, then push the remainder of the integer division of b/a.
!Logical NOT: Pop a value. If the value is zero, push 1; otherwise, push zero.
`Greater than: Pop two values a and b, then push 1 if b>a, otherwise zero.
>PC direction right
<PC direction left
^PC direction up
vPC direction down
?Random PC direction
_Horizontal IF: pop a value; set direction to right if value=0, set to left otherwise
|Vertical IF: pop a value; set direction to down if value=0, set to up otherwise
"Toggle stringmode (push each character’s ASCII value all the way up to the next ")
:Duplicate top stack value
\Swap top stack values
$Pop top of stack and discard
.Pop top of stack and output as integer
,Pop top of stack and output as ASCII character
#Bridge: jump over next command in the current direction of the current PC
gA “get” call (a way to retrieve data in storage). Pop two values y and x, then push the ASCII value of the character at that position in the program. If (x,y) is out of bounds, push 0
pA “put” call (a way to store a value for later use). Pop three values y, x and v, then change the character at the position (x,y) in the program to the character with ASCII value v
&Get integer from user and push it
~Get character from user and push it
@End program
09Push corresponding number onto the stack