Brainfunk: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Smazaný obsah Přidaný obsah
Bez shrnutí editace |
|||
| (Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
| Řádek 1: | Řádek 1: | ||
==Overview== |
==Overview== |
||
Brainfunk is derivative of [ |
Brainfunk is derivative of [https://esolangs.org/wiki/Brainfuck Brainfuck] language with aims to: |
||
* Unify cell pointer and cell value increment and decrement operations to single + and - operations. Remove > and < operations. |
* 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. |
* Fast copy instruction for instant data transfer usable between all address spaces. |
||
| Řádek 70: | Řádek 70: | ||
| 9 || (SP) || Stack value || Data memory |
| 9 || (SP) || Stack value || Data memory |
||
|- |
|- |
||
| |
| 10 || DP2 || Data pointer 2 || Registers |
||
|- |
|- |
||
| |
| 11 || (DP2) || Data value 2 || Data memory |
||
|} |
|} |
||
| Řádek 189: | Řádek 189: | ||
| Remove top stack item || || <code>"^</code> |
| Remove top stack item || || <code>"^</code> |
||
|- |
|- |
||
| Call subroutine || || < |
| Call subroutine || || <code>?@~"v@'~@?~</code> |
||
|- |
|- |
||
| Return from subroutine || || < |
| Return from subroutine || || <code>'@~"^@^^^^^^^^^?~</code> |
||
|} |
|} |
||
Aktuální verze z 15. 1. 2024, 21:13
Overview[editovat]
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
| 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 : |
| 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 |
| Address | Description |
|---|---|
| 0 | Null |
| 1 | Standard output |
| 2 | Standard input |
| 3 | Delay [ms] |
| 4 | Sound [Hz] |
Brainfuck compatibility code[editovat]
These are defined as macros for easy brainfuck code inclusion.
| Symbol | Code |
|---|---|
+
|
@$$^ |
-
|
@$$v |
<
|
@$^ |
>
|
@$v |
[
|
@$$( |
]
|
@$$) |
,
|
@$$$(v)^^@$$@$$$$~ |
.
|
@$$$(v)^@$$$$@$$~ |
Aditional macros[editovat]
| 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[editovat]
| 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 | ?@~"v@'~@?~
| |
| Return from subroutine | '@~"^@^^^^^^^^^?~
|