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
| 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]
|
| 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[editovat]
| 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 |
>[-]<<[->>+<<]>[-<+>]>[-<+>] |
#@%&++@#%&-#@%&-@#%&++#@%&-@#%
|