Overview
Brainfunk is derivative of Brainfuck language with aims to:
- Unify cell pointer and cell value increment and decrement operations to single + and - operations. Remove > and < operations.
- Fast copy instruction for instant data transfer usable between all address spaces.
- Macro definition for custom symbol definition and code reduction
- Read program space
- Multiple data pointers
- Multiple I/O ports for additional hardware addressing
- Execution of standard brainfuck code
- Absolute integer constants
- Stack support (PUSH, POP, PEEK)
- Call subroutins with return
Base commands
Command
|
Description
|
^
|
Increment selected object
|
v
|
Decrement selected object
|
(
|
Jump past the matching ) if the object value is zero
|
)
|
Jump back to the matching ( if the object value is nonzero
|
@
|
Save object index as previous state. Set new object selection index to 0. Index 0 means accumulator.
|
$
|
Increment object selection index
|
~
|
Copy value from previous selected object to current selected object
|
:
|
Start macro, first symbol to the right is new defined symbol
|
;
|
End macro started by :
|
Object table
Index |
Short name |
Name |
Area
|
0 |
A |
Accumulator |
Registers
|
1 |
DP |
Data pointer |
Registers
|
2 |
(DP) |
Data value |
Data memory
|
3 |
IP |
Interface pointer |
Registers
|
4 |
(IP) |
Interface value |
I/O ports
|
5 |
PC |
Program counter |
Registers
|
6 |
PP |
Program pointer |
Registers
|
7 |
(PP) |
Program value |
Program memory
|
8 |
SP |
Stack pointer |
Registers
|
9 |
(SP) |
Stack value |
Data memory
|
10 |
DP2 |
Data pointer 2 |
Registers
|
11 |
(DP2) |
Data value 2 |
Data memory
|
Port address table
Address
|
Description
|
0 |
Null
|
1 |
Standard output
|
2 |
Standard input
|
3 |
Delay [ms]
|
4 |
Sound [Hz]
|
Brainfuck compatibility code
These are defined as macros for easy brainfuck code inclusion.
Symbol
|
Code
|
+
|
@$$^
|
-
|
@$$v
|
<
|
@$^
|
>
|
@$v
|
[
|
@$$(
|
]
|
@$$)
|
,
|
@$$$(v)^^@$$@$$$$~
|
.
|
@$$$(v)^@$$$$@$$~
|
Aditional macros
Symbol
|
Code
|
Description
|
#
|
@$ |
Shortcut for data pointer DP object
|
*
|
@$$ |
Shortcut for data value (DP) object
|
&
|
@$$$ |
Shortcut for interface address IP object
|
%
|
@$$$$ |
Shortcut for interface value (IP) object
|
?
|
@$$$$$ |
Shortcut for program counter PC object
|
"
|
@$$$$$$$$ |
Shortcut for stack pointer SP object
|
'
|
@$$$$$$$$$ |
Shortcut for stack top value (SP) object
|
!
|
(v) |
Clear selected object.
|
Sample code
Description
|
Brainfuck
|
Brainfunk
|
Increment accumulator |
|
@^
|
Decrement accumulator |
|
@v
|
Cat |
,[.,] |
,[.,]
|
Clear accumulator |
|
@!
|
Move value |
>[-]<[->+<] |
*@~*!#^@*~
|
Copy value |
>[-]>[-]<<[->+>+<<]>>[-<<+>>] |
*@~#^@*~
|
Swap values |
>[-]<<[->>+<<]>[-<+>]>[-<+>] |
*@~#^^@*~#v*@~#v@*~#^^*@~#v@*~
|
Jump to accumulator (Moves A to PC) |
|
@?~
|
Halt program (Decrement PC) |
|
?v
|
Push A to stack |
|
"v@'~
|
Pop A from stack |
|
'@~"^
|
Peek top stack item to A |
|
'@~
|
Remove top stack item |
|
"^
|
Call subroutine |
|
<cope>?@~"v@'~@?~
|
Return from subroutine |
|
<cope>'@~"^@^^^^^^^^^?~
|