Ok, so after nearly a year, I actually have something to show for this (Holy crap!)
Introducing Mindf*ck:
A dialect of BF that on top of the original BF command set and principles, adds functionality for using addresses, splitting threads, moving throughout the code (read: subroutines), and the ability to insert values in the code itself easier.
The command list is as follows:
//////////////////////
//BrainF*ck Commands
//////////////////////
> Shift right
< Shift left
+ Inc
- Dec
[ Start while if nonzero
] End while - break if zero (Jump to address if nonzero)
. Get char
, read char
/////////////////////
//MindF*ck Commands
/////////////////////
# Get Int
$ Read Int
( Store address
) Pop address
{ Copy value to address
} Retrieve value at address
"" Insert string - overwrites its length
:: Insert binary num
^ Jump to address
| Split thread at code address
! Ends process
The main difference is the addition of a stack used for addresses as well as storing values. Think like what Z80 has. You are also able to move around the code itself to execute sections of code.
"<string>" allows for strings of chars to be inserted into the value array, it will overwrite its length in chars.
:<Number>: this will insert an int expressed in binary at this point in the value array
Another difference is that instead of chars, the array is composed of ints. I did this in order to support jumps using values in the value array.
Things to do:
Fix the split thread command. Weird stuff is happening and I'm not sure why.
More bug testing
Source:
https://sourceforge.net/projects/mindfck/Edit: I forgot to mention, I still need to write up the full documentation for how each command works and what exactly they read from/effect. Some of the address commands either affect the value array iterator or code iterator, for instance.