# Brainfuck extended

Brainfuck extended is extended Brainfuck, which can do complicated stuff easier than Brainfuck, developed by User:None1.

You can call it Bx for short.

## Memory Model

Brainfuck stores its memory in a tape, so does Bx. But Bx also has a 8 bit register (which is 0 initially), which means it is more powerful.

## Commands

There are 8 commands in Brainfuck, but Bx had much more.

### Standard Commands

Standard commands are derived from brainfuck.

But in Bx, the + and - commands are replaced with / and \, because + and - have other uses.

### Register Commands

Commands that access the register.

@ Rewrites the register with the pointer value. % Rewrites the pointer with the register value. ~ Swaps the pointer value with the register value. + Add the register and the pointer, and store the result into the register (modulo 256). - Subtracts the register by the pointer, and store the result into the register (modulo 256). * Multiplies the register and the pointer, and store the result into the register. (Modulo 256) | Compares the register value with the pointer value, if the register value is greater than the pointer value, store 1 into the register, otherwise 0. & Bitwise and the register value and the pointer value, and store it into the register. ^ Bitwise or the register value and pointer value, and store it into the register. ! Bitwise not the register value. ; Rewrites the register with a random integer from 0 to the register value before. The random generator can either be a psuedo random generater or a real random generator.

### Other Commands

A command that is neither a standard command nor a register command belongs to the 'Other Command' group.

( Reads a decimal integer (unsigned) from standard input, and stores it into the pointer (modulo 256). ) Writes the pointer value to standard output as an unsigned decimal integer. { Reads a hexadecimal integer (unsigned) from standard input, and stores it into the pointer (modulo 256). } Writes the pointer value to standard output as an unsigned hexadecimal integer. _ Followed by exactly 2 hexadecimal digits (either uppercase or lowercase), rewrites the pointer with the value represented by these digits. ?<code>:<code>' Conditional operator, if the pointer value is not zero, then run the code between ? and : , otherwise run the code between : and '. The ' IS mandatory. $<string>$ Treats the string as a C-style string, and rewites the tape with it, starting from the pointer. Each $ matches the nearest $ after it. # Comment, each # matches the nearest # after it, just like that each /* matches the nearest */ in C++.

## Example Programs

### Hello World

_48._65._6c.._6f._20._57._6f._72._6c._64._21.

### Cat Program

/[,.]

### Random Integer Between 1 and 6

_05~;/~)

### An easier way to print Hello World

$Hello World!$[.>]

### Add two unsigned integers, the result is guaranteed to be less than 256

(@(+%)

### Truth Machine (Characters that are not 0 are treated as 1)

_30~,~-~?_31[.]:.'

### Randomly choose a number from two numbers read from user input

(>>(</~;~[>>]<)

## Turing Complete?

This language is certainly turing complete, because Brainfuck is, and this language is a superset of Brainfuck.

## Implementation

Bx is not implemented yet, but is implementable, but very hard because there are so many commands.