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.
- Introduce fast copy instruction usable between all address spaces.
- Allow macro definition for custom symbol definition and code reduction
- Allow to read/write program space
- Support multiple I/O ports for additional hardware addressing
- Enable brainfuck compatible mode
- Allow absolute integer constants
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
|
@
|
Set object selection index to 0. This is index 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
|
Description
|
0 |
A - Accumulator
|
1 |
DP - Data pointer
|
2 |
(DP) - Data value
|
3 |
IP - Interface pointer
|
4 |
(IP) - Interface value
|
5 |
PC - Program counter
|
6 |
PP - Program pointer
|
7 |
(PP) - Program value
|
8 |
SP - Stack pointer
|
9 |
(SP) - Stack value
|
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
|
!
|
(v) |
Clear selected object.
|
Sample code
Description
|
Brainfuck
|
Brainfunk
|
Increment accumulator |
|
@^
|
Decrement accumulator |
|
@v
|
Cat |
,[.,] |
,[.,]
|
Clear accumulator |
|
@!
|
Move value |
>[-]<[->+<] |
*@~*!#^@*~
|
Copy value |
>[-]>[-]<<[->+>+<<]>>[-<<+>>] |
*@~#^@*~
|
Swap value |
>[-]<<[->>+<<]>[-<+>]>[-<+>] |
*@~#^^@*~#v*@~#v@*~#^^*@~#v@*~
|
|