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
Commands
Command
|
Description
|
^
|
Increment selected object
|
<
|
Decrement selected object
|
(
|
Jump past the matching ) if the object value is zero
|
)
|
Jump back to the matching ( if the object value is nonzero
|
_
|
No operation, clear object selection index
|
$
|
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 input
|
2 |
Standard output
|
3 |
Delay [ms]
|
4 |
Sound [Hz]
|
Macros
Brainfuck
|
Brainfunk
|
+
|
|
<
|
Decrement selected object
|
(
|
Jump past the matching ) if the object value is zero
|
)
|
Jump back to the matching ( if the object value is nonzero
|
_
|
No operation, clear object selection index
|
$
|
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 :
|
Brainfuck comparison
Description
|
Brainfuck
|
Brainfunk
|
Increment value |
+ |
#+
|
Decrement value |
- |
#-
|
Move the pointer to the right |
< |
&+
|
Move the pointer to the left |
> |
&-
|
Write cell to output |
. |
#$%
|
Read input to cell |
, |
$#%
|
Skip loop if cell is zero |
[ |
[
|
Loop back if cell is nonzero |
] |
]
|
Cat |
,[.,] |
$#%[$%#%]
|
Clear value |
[-] |
#[-]
|
Move value |
>[-]<[->+<] |
&+#[-]&-#[-&+#+&-#]
|
Copy value |
>[-]>[-]<<[->+>+<<]>>[-<<+>>] |
#@%&+@#%
|
Swap value |
>[-]<<[->>+<<]>[-<+>]>[-<+>] |
#@%&++@#%&-#@%&-@#%&++#@%&-@#%
|