...Not yet, but it's a start!
Download Here*
Programs currently don't even evolve, but I just finished this version up this morning as a sort of 'proof of concept' for the laying out how everything will work in the future.
When you open up the main program, and select 'new universe' (Checked by default) you must code your first organism by hand. Currently the program syntax is atrociously clunky and not very well defined in its behaviour- but currently it works.
Here is a list of all of the commands and lots of detail on how they work!
Organisms use a stack and ten registers, dealing with signed 64 bit integers. DNA is stored and retrieved as 8bit integers / Bytes or WORDS in the case of the DNA VM. Numbers must be
explicitly push'd onto the stack.
Where X is the top item of the stack, Y is the second item, etc... And r is the result which is placed in the hidden register. Normalization just converts abitrary lengths into -/+ 1 or 0
Ironicall, all commands are case-sensistive and must be typed in lower caps :V
[x y # ]MOVE Attempt to move the cell in a normalized direction <x,y>. Return 1 if the cell can move, 0 otherwise.
[x y # ]POKE Attempt to destroy a cell in the normilized direction <x,y>. Return 1 on success, 0 on failure.
[x # ]JUMP Jump to an arbitrary place <x> in the genome.
[ # ]POP Pop the top item off of the stack.
[ # ]PUSH Push the hidden register onto the stack and deactivate the hidden register.
[ # ]SWAP Swap the top two items on the stack.
[x y # ]SWITCH Switch two arbitrary items on the stack.
[x # ]PULL Pull an arbitrary item off of the stack.
[x y # ]SET Set an arbitrary item <x> on the stack to an arbitrary value <y>.
[ # ]DUP Place a copy of the top item of the stack on top of the stack.
[x # ]PICK Pick an arbitrary item on the stack <x>, and move it to the top of the stack.
[ # ]TRIP Place two copies of the top item of the stack on top of the stack.
[x # ]BASE Puts arbitrary base <x> into the hidden register. BASE = 2bits of a WORD. Equivalent to A, T, C, or G as 00, 01, 10, or 11 respectively.
[x # ]WORD Puts arbitrary word <x> into the hidden register.
[ # ]WORD-LENGTH Puts the length of the genome in words into the hidden register.
[ # ]BASE-LENGTH Puts the length of the genome in bases into the hidden register.
[x y # ]IF Checks if the top item on the stack is nonzero. If not, jump to a point in the genome specified by the second item on the stack.
[ # ]AGE Puts the age of the cell into the hidden register.
[ # ]REG(0-9) Sets the hidden register to the top item of the stack, pops that item off the stack, then activates and sets register X to the hidden register's value, and finally deactivates the hidden register.
[ # ]REG(0-9)POP Pushes the value of register X onto the stack and clears the register.
[ # ]REG(0-9)PUSH Activates and sets register X to the value of the hidden register- deactivating the hidden register.
[ # ]?REG(0-9) If the value of register X is nonzero, continue normally, otherwise skip the next instruction.
[x y z a # ]INJECT-WORD Grabs an arbitrary WORD at position <a> in the cell's genome and injects it at position <z> in another cell adjacent to the current cell at <x,y>
[ # ]CLEAR-ALL Clear and deactivate all registers and the entire stack.
[ # ]CLEAR-REG Clear and deactivate all registers.
[ # ]CLEAR-MEM Clear the stack.
[x y # ]DIVIDE Divide into two cells, placing the daughter cell into an adjacent position at <x,y>. The stack of the parent cell becomes the DNA of the daughter cell.
[x y # ]?JUMP If the top item of the stack is nonzero, jump to a point int the genome specified by the second item.
[x y # r]+ r = x + y
[x y # r]- r = x - y
[x y # r]* r = x * y
[x y # r]/ r = x / y
[x y # r]% r = x % y
[x y # r]^ r = x ^ y
[x y # r]& r = x & y
[x y # r]| r = x | y
[x # r]~ r = ~x
[x # r]! r = !x
[x y # r]&& r = x && y
[x y # r]|| r = x || y
[x y # r]< r = x < y
[x y # r]> r = x > y
[x y # r]= r = x == y
[x y # r]<= r = x <= y
[x y # r]>= r = x >= y
[x y # ]SET-PATTERN Sets pattern register <x> to value <y>
[x # r]ABS r = |y|
[x # r]NEGATE r = -y
[ # r]UINT8 Hidden command; specifies that the next WORD in the genome be interpretted as an unsigned number, and to have the hidden register set to this number.
[ # r]UINT16 Hidden command; specifies that the next 2 WORDs in the genome be interpretted as an unsigned number, and to have the hidden register set to this number.
[ # r]UINT32 Hidden command; specifies that the next 4 WORDs in the genome be interpretted as an unsigned number, and to have the hidden register set to this number.
[ # r]SINT8 Hidden command; specifies that the next WORD in the genome be interpretted as a signed number, and to have the hidden register set to this number.
[ # r]SINT16 Hidden command; specifies that the next 2 WORDs in the genome be interpretted as a signed number, and to have the hidden register set to this number.
[ # r]SINT32 Hidden command; specifies that the next 4 WORDs in the genome be interpretted as a signed number, and to have the hidden register set to this number.
[ # r]SINT64 Hidden command; specifies that the next 8 WORDs in the genome be interpretted as a signed number, and to have the hidden register set to this number.
I'm pretty beat, but I'll post up a sample program as soon as I can.
*Updated 2-23-11
"I have faith, that I shall win the race, even though I have no legs, and am tied to a tree." ~Mark75