Brainfunk

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání

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