Beforge
Designed by | User:Shriansh |
---|---|
Appeared in | 2024 |
Memory system | Stack&Cell based |
Dimensions | two-dimensional |
Computational class | Turing complete |
Reference implementation | Unimplemented |
File extension(s) | .bfo , .bfr |
Beforge is a fungeoid and brainfuck-based esolang created by User:Shriansh. It also takes (little) inspriration from malbolge
Note
This is cringe.
this esolang is also not completed yet and will need some help.
Language overview
Beforge works like brainfuck and befunge combined .It adds Integers and many more functions. There is a 2d grid that is infinite. Switching between the languages and having some new commands are the main features.(the tape and stack work differently and they do not get a reset for each switch). The commands are:
Cmd | Description |
---|---|
>
|
Move the pointer to the right |
<
|
Move the pointer to the left |
+
|
Increment the memory cell at the pointer |
-
|
Decrement the memory cell at the pointer |
.
|
Output the character signified by the cell at the pointer |
,
|
Input a character and store it in the cell at the pointer |
[
|
Jump past the matching ] if the cell at the pointer is 0
|
]
|
Jump back to the matching [ if the cell at the pointer is nonzero
|
Cmd | Description |
---|---|
+
|
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 |
v
|
PC 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 |
g
|
A "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 |
p
|
A "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 |
@
|
Halts program (Works in any mode) |
0 – 9
|
Push corresponding number onto the stack |
New Commands
Cmd | Description |
---|---|
A
|
Change all the characters vertical to it in the fungespace by +1 in the ASCII table |
S
|
Switch between Befunge and Brainfuck mode (default : Brainfuck) |
I
|
checks if the stack contains nothing if yes then it goes vertically else horizontally |
G
|
Does the same as I but with the tape |
H
|
Performs a random command from the list of commands (excluding itself and the @ ) |
U
|
Same as A but it does a -1 instead |
J
|
Shifts top of stack or tape by 1(depends on mode) eg: 10 -> 1 , 34-> 3 |
V
|
Shifts top of stack or tape by -1 (depends on mode) eg: 10 -> 0 , 34-> 4 |
K
|
Splits into two Universes(use again to mix into one(removes and erases the existence of second Universe) |
P
|
Switches between the two Universes (default:Universe1 or without using p) |
y
|
Seperates the interpreter line by cloning it and moving one of them up by one and another one down |
t
|
Sets a macro using string mode to a certain character/symbol or itself or reset it. Can be used later |
o
|
Sets a timer according to the current tape value in seconds (can mess with the y command) |
m
|
Show stack and tape , current universe |
n
|
Gets binary of the current tape and stack(depends on mode) and switches the last value with the first . Eg 4 (100 -> 001) which is 1 |
s
|
Set a Signal. More details at section s |
q
|
Merge stack and tape. |
w
|
Unmerge stack and tape.(Resets stack and tape) |
o
|
Comments |
k
|
Undo last action |
u
|
Redo last action |
i
|
(string/input)i(formula) [store in fungespace at x and y (x is first cell/top stack) and y is (second cell/second top stack)] |
h
|
switch between integer mode and non-integer mode (default:non-integer mode) |
to write a formula for i
- Use Q and W to convert character/string to ASCII and vice versa. eg: "LOL"iQN will make LOL to 76 79 76.
- Use A,S,D,M to add,substract,divide and multiply first with second in string/character. eg: " "iQAN will add two spaces in ASCII to give string.
- Use N to stop formula.
- Use V to clone selected and put it to the right
- Use T,Y to change pointer like brainfuck's > and <.
- Use C#hexcode to color the text with hexcode.
s
NOTE:Other characters can be used to modify signal too.
The 's' command allows you to set a signal. it goes with a number behind it to set the singal being unary , ternary etc and infront of it to represent amount of digits which can be used in memory (only in 0s) . eg 1s which sets one signal (2s is default and 1s is the lowest one) ..To create a set of commands for a ASCII set(binary), use
2s000000000
to make the 255 memory in ternary in this programming language use,
3s000000
s can be stored with p and g . It converts to decimal when its stored/gets in/from fungespace.
Here, It is brought with three more commands for setting the signal and modifying the signal properly.
They are:-
Cmds | Functions |
---|---|
z | Set to tape and stack (depends on mode) (converts from binary to ASCCII) |
x | Adds or subtracts with + or - respectively. Use a number with it to denote how many (example to add 1 from decimal:+1x) . Automatically adjusts to ,unary,binary,ternary etc. |
c | Sets the s with a character before it. S~c allows u to set a character for the signal 's'. |
b | bitwise compliment (0 -> 1 & 1 -> 0) eg: 00100 -> 11011 |
t and y
NOTE:Since the t and y have long explainations , it was put here too.
t
the t command allows you set a macro using string mode to a certain character. to reset use "(character to reset)"t(character to reset) It ignores commands unknown by the user.It is seperate for both modes. Look at examples.
y
y allows u to deperate the interpreter line by cloning it and moving one of them up by one and another one down. Both run at same speed and can be stopped by one of the two reasons
If the line in one of the two interpreters stop/end , that interpreter will go away. |
If the interpreter line touch each other then it will stop/end. |
Examples
Execute some random commands (Might do a Hello World) by User:Shriansh
HHHHHHHHHHHHHHHHHHHHHHHHHH@
Hello World (from befunge page) edited from User:None1
S"!dlroW olleH">:#,_@
Unknown String Macro Loading(brainfuck mode using befunge comamnds) by User:Shriansh
S"++++++Ë"ttS@ oIt will ignore Ëo
Normal Macro Loading by User:Shriansh
S"00g"tt@
Resetting Macro by User:Shriansh
S"n"tn@
Example signal s program to print A by User:Shriansh
2s000000000+65xz.