__________________________________________________

The environment and physics of the simulations

In principle more or less every aspect of the physical environment can be adjusted or implemented via the execution of special instructions.

The biggest issue with these special physics-emulation instructions is the number of bits needed to specify a replicating program. The more instructions needed, to specify details which could  be handled otherwise by the physics, the larger the search space is. Sequence-space sizes larger than 224 are already to big for being exhaustively searched by current day computers. Also, utilizing the dynamic properties of all the none-replicative micro-controllers will not solve the problem. It might be the case that a cascade of 10 different micro-controllers in a network each doing some particular job will in the end result in a replicator-system. But it might also be that this cascade of 10 different micro-controllers actually tries to avoid the development of a replicator because the intermediate steps are more sensitive to perturbations for the system than doing nothing - indeed this is what almost always happens. Robustness is one of the most severe selection pressures in these dynamical systems. Avoiding disturbance is much more rewarded than trying to change something which of course in the beginning might be bad for the whole system. So far, this striving for becoming robust has been the major bottleneck for explaining how non-replicators eventually would evolve or better develop into enzyme-like replication systems.
Intriguing enough, this need for simplification - minimizing the number of bits needed - could be best accomplished by assuming physical behavior and removing the according physics' specifying instructions from the instruction-set. Thus, it was possible to come to an instruction-set which still is universal, man-programmable and which only needs 22 significant bits in the minimum-replicator case, see table 5 (left part). With these 22 bits evolution from scratch is possible though still not trivial.

Specific versus unspecific attachment

What turns out to be an important physical property is the distinction between specific attachment (a communication shall only be realized with a specified other micro-controller) or any unspecific connection, see [48]. This distinction is needed because otherwise micro-controllers either simply replicate their genomes (programs) in small cycles without being able to proliferate the sequences or they are replicating everything and become vulnerable to information dilution. Specificity can be realized in several ways: either with a fixed-recognition-site and an additional wild-carding, see classifier systems and building-block hypothesis [24] or a composition of the recognition-site from smaller modules. Both variants allow to adjust specificity and both variants have been studied. A structural drawback of the wild-carding approach is the length of the recognition-site. This means that one recognition site can at most have the length of the width of the cargo-part, which in the simplest case, is two bits. This problem is not existent with the modular-approach where it is easy to concatenate many modules (cargo-parts of the Site-instructions) to one large recognition-site.

Containment or avoiding the parasites

Containment can be done in two aspects: either to introduce space, in our case the containers connected like beads on a ring, or, in sequence-space to communicate only via specific recognition. Both aspects have beneficial consequences in reducing the number of foreign machines to communicate with but exert the drawback of not letting new information, resources and energy diffusing into the container or the occupied sequence-space domain. A vesicle which has no channel-proteins protects the inside pretty well from perturbations from the outside but makes it also extremely difficult to exchange educts and products of chemical reactions in the vesicle. This dichotomy was the rational for the open-container-concept. A further point is the need to somehow specify the compartment in the heritable part of the information constituting the replication system. This can be a huge amount of information which has to be stabilized against perturbation events and which is not available right from the beginning, thus it would have to be created de novo by evolution.

Recognition sites and protection

From a computer-science point of view software with many existing recognition sites per program should be benign for evolution because contact can be made easily. On the other hand, exactly this high connectivity might be a curse, because everyone can interfere. Only one recognition site per program turned out to be a good choice for the moment. For example, molecules in the RNA-world [26] have to be small and probably will not be able to maintain several recognition sites per molecule. Similar with protection, in chemistry it is quite standard to work with protecting groups. It is easy to implement protection in the micro-controller, e.g. if the PF2-bit (see table 4) of a micro-controller is set then this micro-controller becomes invisible. Unfortunately, being protected also hinders others to do the necessary changes. Protection without control of the protection is an evolutionary dead-end.
An important problem concerning specificity is the specificity of recognition sites. In [48] a special wild-carding system was used but handling the wild-cards is computationally expensive. Furthermore, wild-cards are somehow difficult when mapping them to biochemistry. In this work a more promising approach was considered, the concatenation of Site-instructions to form a larger recognition-site. This makes handling easy, solves the problem of specificity and is biologically more convenient. If no Site-instructions precede, for example a Load-instruction, then only the bits in the cargo-part of the Load-instruction are used for recognizing a neighboring micro-controller. With several Site-instructions before Load and the cargo-part not pointing to one of the attachment-slots the bits of the cargo-part are appended to the already existing virtual recognition-site, giving a larger recognition-site. If the Load-instruction, see table 2, wants to access the program section of a neighboring micro-controller (address 0 or 1) then a micro-controller is searched for with the appropriate virtual recognition-site, address 0 or 1 bits are not appended to this virtual recognition-site. If no Site-instructions are preceding the Load-instruction a micro-controller is chosen at random - yielding unspecific recognition. It is assured that this neighboring micro-controller is not already attached to a different slot. Self-attachment is not possible. If no appropriate micro-controller was found nothing is done and the next instruction is executed. A small difference holds for the write-instruction (Store to address 0 or 1). If no other micro-controller was found the program is stopped, because finding a suitable micro-controller at a later stage lacks synchronization anyway. This attempt to reduce computer utilization is arguable and can of course be changed at a later stage. Another solution would be to search for the next smaller recognition-site but this again will be postponed to future research.

Bi-molecular versus tri-molecular reactions and the instruction-pointer counter (IPC)

This point is probably the most controversial one: in nature bi-molecular reactions are abundant. Only rarely tri-molecular chemical reactions will occur. And thus the experiments before have been of the bi-molecular type, [48].
In general, replication requires three different algorithmic steps: 1) take the information to be replicated, e.g. a nucleotide, 2) process it somehow, e.g. via a synthetase and 3) store it at the destination place, e.g. create the peptide-bond. Translated into computer-science language this means a Load-operation, writing the data into a local register (ACCU) and exert a subsequent Store-operation. Usually Load- and Store-operations require a register-address as well. Now, with only bi-molecular processing this means for the Load-operation to attach prior the information donor (template) - typically a micro-controller of the same kinship, read out a specific instruction from a specific location in the genome (program) and store this value in the local accumulator (ACCU). Following this, the template-molecule (micro-controller) has to be released and a new micro-controller, preferably not from the same kinship, has to be attached and the value of the ACCU be stored into a specific location of the destination genome (program, prey). This means for each single instruction to be copied, two attachment processes have to be made - reliably. Of course, with any attachment event a completely different micro-controller could be attached, destroying the synchronization between template and offspring. Not using the double-attachment procedure strongly requires a tri-molecular reaction. Biomolecules must be specially designed to allow for this.
For the replication of a full program, e.g. with 50 instructions, the pointers of where to read in the foreign instruction and where to write into the other foreign program (prey) have to be maintained. Experiments showed even slight errors with the replication counters made emergence of replication impossible. Usually these counters are realized via registers which are incremented and wrapped around after reaching the end of the template. This requires not only two additional registers which must be addressed, it also requires the incrementing or better decrementing of the values in these registers. Counter operations require pretty expensive Boolean hardware (typically done with arithmetic instructions). All these instructions and addresses require many bits with the according explosion of the search space.
The only solution to this coding-dilemma is to assume that the micro-controllers somehow do have physical contact when attached and that one processor is sliding along the other during the copy- process. This sliding, well known in protein-chemistry, makes complex counter arithmetic superfluous. In the current model sliding is realized with an auto-increment feature. After reading (Load) a value from a foreign program the read-counter is incremented automatically, the same holds for write-operations (Store). Each micro-controller has "physically realized" the Load- and Store-counters. These counters are initialized with a value of zero. They might as well be preset randomly or by the position of the recognition-site. These two options are currently not studied because preliminary experiments showed a drastic decrease of the emergence-probability for stable replication.

Two-bit or quaternary encoding

The canonical encoding of instructions in micro-controllers takes 4, 8, 16 or 32 bits per instruction. In a Harvard architecture, especially with 8 and more bits, controllers register-addresses are a fixed part of the bits available. In principle, the register width might be arbitrary. But it is feasible if one register, as well as the accumulator, can be preset by one instruction, otherwise, many instructions must be sequentially executed, with appropriate counters set accordingly. Because of this problem the instruction-structure used here is divided into three parts, the cargo-part (magenta), a special-instruction part (SP, green) and a conditional part (C, orange), see figure .
A structural problem is apparent: if the program wants to write a full instruction into a neighboring micro-controller the width of the cargo-part has to be the instruction-width. This of course is only possible if the register width is of instruction-width size but then a register cannot be preset by one single SetAccu-instruction. The only solution to this problem is a sub-coding of a full instruction. In principle, blocking an instruction can be chosen freely. Bit-wise or two-bit-wise encoding is a natural choice here. Because of nature using a quaternary encoding (AUGC-alphabet with RNA) and the work of [15] who showed that the quaternary encoding has the best evolutionary properties we have chosen to encode an instruction with blocks of two-bits each. This means copy-operations which are the combined action of Load- and Store-instructions copy only blocks of two-bits per operation. The consequence is that a full genome copy in the simplest case takes 3*n copy-operations with length n of the genome or program to be copied and 6-bit instruction width, see table 1.

Dissociation or detachment and loops

In origin of life studies the major problem after copying a sequence is the dissociation of the product from the template, also called product inhibition [43]. This also is a problem in the model presented here because there is no obvious choice on what to do after copying is finished. Only a continuous copying and wrapping around after the End-instruction results in the emergence of stable replication systems. The maximum program length currently is 128 quaternary blocks with a maximum program length 42 instructions in the 6-bit case. The copying loop can either be realized via recursively calling a sub-program or via a Goto-instruction. In the case of an infinite long loop the acting micro-controller runs out of energy, reaches a maximum age or is overwritten by another micro-controller. Energy and age parameters are useful knobs to adjust the dynamics of the whole system.

2.3.7  Registers and special registers

Micro-controllers have and do require registers. The question is how many and for what purpose. When trying to emulate biochemistry or molecular biology registers provide a real problem. There is no easy mapping from a storage-place like a register towards an equivalent molecule. For example, a one-bit-register could be realized via a conformation change of a biomolecule, e.g. two different secondary structures of an RNA-molecule due to some reversible chemical modification, for example a disulphide-bridge. Hybridization of co-factors also can mimic such register accesses. Because of this difficulty the number of registers used by the micro-controllers must be as small as possible. We have already seen that we were forced to introduce two further registers to avoid lengthy and improbable pointer arithmetic during the copying process. It is also obvious that we need an accumulator, somewhere we have to store the intermediate values from the template-program. The problem of accessing foreign micro-controllers is solved here by defining the register address 0 or 1 as the access to the program of the attached micro-controllers when reading (Load) from, or writing (Store) into, the attached micro-controller. Furthermore a status-register, see table 4, is defined. The instruction pointer as such is a register which again is subsumed in the physics of the system.
The register-address is used for the recognition-procedure, with prepending Site-instructions for specific registers. If the micro-controller's accumulator which serves as a register for another micro-controller is processed independently the register value is probably changed. On the other hand, this register value can be used for communication also, e.g. a micro-controller simply could run in an infinite loop and looking for specific accumulator values in foreign micro-controllers. Complex communication networks can be realized with this setup.

Conditional execution, communication and sensing the environment

The conditional-part (C), is currently two bits wide. This coding was chosen because conditional execution is powerful and avoids the need of several instructions to code for conditional expressions. Two types of instructions exists: instructions are always executed and instructions are subjected to a conditional evaluation, see table 3.
High-level communication between micro-controllers is not only realized using other micro-controllers as registers, but also utilizing the PF1-flag, see table 4. Additionally, indirect communication can be realized by setting other bits of the partner machine's status register. The value of the accumulator is mapped into the status-register of the attached micro-controller. Affected is the micro-controller which is available after a read-instruction (Load). Please note, this read-instruction has as a side-effect: the increment of the read-counter.
The PF1-flag is the only flag which can be sensed directly by the executed program, see table 3. Providing the system from the outside with additional information is done by issuing the PF1-flag of specific micro-controllers, for example with a pixel-value of a black-and-white image. Output of the system can be realized in the same way, simply look at the PF1-flags of other specific micro-controllers or their accumulator values. With this procedure arbitrary communication networks can be evolved and trained. Furthermore, this output could be utilized to specify the hardware of micro-controllers, important in questions of hardware-evolution.

2.3.9  Codon mapping

Reading and writing to other machines can be subjected to a codon-mapping - resembling the Watson-Crick pairing in biology. A special option of the simulation program allows to specify the mapping used. The identity-mapping has the value \mathnormalc=0xe4 (\mathnormal11 10 01 00) assuming a quaternary coding scheme. Thus a value \mathnormali=0x2 is mapped to \mathnormala=0x2 with a=((c >> (i*2))Ù0x3). With a mapping table \mathnormalc=0x53 the value \mathnormali=0x2 is mapped to \mathnormala=0x1. If the mapping table creates a complementary mapping (e.g. \mathnormalc=0xb1) a second application of the mapping brings back the old starting value. The cycle length is exactly one. According to the maximum length sequence (MLS) theory [21, 9], the maximum cycle-length of a quaternary mapping can be 22-1=3. For example with \mathnormalc=0x4b (0,1,2,3)->(3,2,0,1)->(1,0,3,2)->(2,3,1,0)->(0,1,2,3) a cycle of length three is realized.
With these mapping-tables even unnatural translations can be tested for their evolutionary properties. The experiments reported in this work all have been done with the identity-mapping \mathnormalc=0xe4. With the condition that there exists always a mapping to each possible codon two classes of mappings, apart from the identity-mapping, remain: Class A is of the Watson-Crick pair type \mathnormalc=0xb1 - after two steps the starting point is back again and Class B cycles through the full space of possible codons.
Class A has three members with c={0x1b, 0x4e, 0xb1} and a Class B comprises six members with c={0x1e, 0x39, 0x4b, 0x72, 0x8d, 0x93}. With the identity-mapping \mathnormalc=0xe4 three possible evolutionary mapping-types are possible. A hypothesis is that the evolutionary behavior in between the classes will not change, though there might be peculiar interactions between the mappings in a class and the particular instruction-set. All other possible mappings restrict the codon-space and allow only a subset of codons to be executed in a usual way. Of course, it might be that through mutations non-reachable codons by chance still come into play.
The identity-mapping for a binary-base (only 0 and 1 as base) is \mathnormalc=0x2 and an eighth-base-system (3 bits per base) is \mathnormalc=0xfac688. Preliminary experiments with Watson-Crick-type mappings so far did not reveal viable replication systems.

Energy management in the system

The distribution of energy must be organized such that at least a very small number of micro-controllers can survive without doing something special. Additionally, energy should be distributed according to given external objectives. The natural choice would be the PF1-flag as the sensor for external input. A set of dedicated accumulators can serve as output-channels. A first simple task to be performed might be the counting of set PF1-flags and write the result into an output-register. The amount of energy distributed per container would then be proportional to the correctness of the output. In the experiments reported energy was not subjected to some external tasks.
*  Six parameters for the simulations with energy-processing are defined:
_OPT_TOTAL_ENERGY_
(-te #i) The total energy provided by the environment per generation and container. This energy is delivered to each living or newly instantiated micro-controller.
_OPT_DEATH_ENERGY_
(-de #i) A micro-controller which energy-resources drop below this threshold is interpreted as dead. Dead means that the micro-controller does not get CPU-time for execution. The program of the micro-controller instead remains intact as a type of crystal, meaning the information in the program will be conserved (as long as not an external mutation or rewriting event changed this information). Not only the information of the micro-controller remains intact, also the content of the accumulator is still accessible via others. The rational is the argument that the energy to access the accumulator of the dead micro-controller is already provided by the acting micro-controller.
_OPT_EARN_ENERGY_
(-ee #i) The amount of energy which can be earned when doing a successful operation. An operation is defined as an action which somehow connects the micro-controller to the outside world. Thus, success is defined from the outside of the simulation and either part of the physics in the system or some external task to be solved. In the experiments reported this value remained constant throughout the simulation.
_OPT_SPENT_ENERGY_
(-se #i) Energy to be spent for each executed instruction. It is possible to separate the real energy costs per specific instruction by coefficients. E.g., a register-access might be much more expensive than a SetFA-operation, and calling another micro-controller as a subroutine is energetically certainly different from attaching a different micro-controller.
_OPT_PROG_ENERGY_
(-pe #i) Energy to be spent for each program execution. The reason is the freedom of micro-controllers to do nothing and never going to die because simply surviving by the background-energy. With this cost high enough these parasitic micro-controllers will die and be replaced by new micro-controllers.
_OPT_MIN_MICROS_
(-mm #i) This is the minimum number of micro-controllers living at the beginning of a new generation. If less than the minimum number of living micro-controllers are in a container, dead micro-controllers are picked at random and reinitialized with the energy reservoir set to the total amount of energy. With reinitialization the accumulator value is set to the initial value and the program is preset with default values, e.g. random values. No former state of the micro-controller is maintained. The only exception is in the beginning of the simulation: then each micro-controller gets a starting energy. The reason is that starting with a totally randomized population will yield most of the micro-controllers dead after the first generation.
_OPT_GRAB_ENERGY_
(-ge #) This is an anergy packet which can be grabbed by a micro-controller. This micro-controller finds a prey in its environment either specific or unspecific. The number of energy packets allocarted is defined in the cargo-part.
_OPT_MOVE_ENERGY_
(-me #) Energy spent for one moving step, see instruction Move
Several different energy coefficients have been tested but none of them systematically. It turned out that more or less neutral coefficients are most suited for evolutionary purposes.

Introducing variable length programs

Variable length programs are even more akin to physico-chemical systems found in nature. They immediately require operators utilizing length dynamics of the informational sequences. The first two most obvious operators are Ligation and Splitting, see table 7. But there are subtle problems or features as well: e.g. when does copying stop? With fixed-length programs copying was stopped after encountering the End-instruction. It simply did not make sense to waste CPU-time and also copy the rest of the program. In the same way it was feasible to overwrite the program of the prey without taking into account what was written in the prey's program before. With variable sequence-lengths instead the situation changes. Sequences are now seen as physical molecules which are to be copied. Copying itself becomes a construction process, not a replacement process, as in the former case, and thus the length of the prey's program is changed with the copying process. For example, this requires the adjustment of the instruction-pointer of this machine because after copying the prey might have shrunken and the pointer is addressing illegal memory locations. The dynamics with variable length sequences alter, data not shown, even providing replicative sequences at instantiation time only yield extremely bad proliferation and high sensitivity to parasites.
Execute S0 S1 S2 S3

J0 SetAccu Site Load Store
J1 Action Call SetFA SetFB
J2 (ZF) " " " "
J3 (PF1) " " " "
Table 6: Instructions available when variable program lengths are used. This it the right part of table 1. The End/Cycle instruction has be replaced by the instruction Action. Depending on the bits provided by the cargo-part certain actions are executed. All defined actions are specified in table 7. The instruction SetAccu took the place of the former End/Cycle-instruction. Please look at the symmetry of the instructions. SetAccu and Site are accessible with a machine-mask of 0x1. Machine-mask 0x3 adds the instructions Load and Store which empower the machine to copy other programs. Machine-mask 0x7 (0xb when three bits are used for the special command (SP)) further adds two procedural commands Action and Call and two property changing commands SetFA and SetFB.
Variable sequence lengths also revealed a further problem for the emergence of replicative systems. It turned out that very short, typically one instruction long sequences with a single Site-instruction occurred as targets for the replicating machines. Because of being extremely short these sequences easily could outperform the machines with a valid replication program. With a simple and biologically plausible trick this problem could be mitigated. Only sequences with a length of at least three instructions can partake at binding. Sequences shorter than this are not considered in specific binding though they still can be bound unspecifically as preys of the replication process.
Action Description

Ligate (00) If there are two machines located, one in the reading and another in the writing-slot, the program of the machine in the writing slot is appended to the program in the reading-slot. The machine in the writing slot is invalidated after that and will be replaced by a newly created machine at the next simulation round.
Split (01) If there are two machines located in the reading and writing-slot the program of the machine in the writing slot is replaced by the program right after the current remote instruction pointer (typically after the recognition site). The program in the reading slot is shortened accordingly.
CopyMask (10) Copy the machine-mask from the reading-slot-machine into the machine's machine-mask attached at the writing-slot.
CopyLen (11) Copy the length of the machine in the reading-slot into the machine of the writing-slot, which resembles a truncation or an elongation.
Release reading-slot (100) If a machine is attached at the reading-slot it will be released via this action.
Release writing-slot (101) If a machine is attached at the writing-slot it will be released via this action.
Table 7: Possible action-commands. Depending on the number of bits in the cargo-part of the instruction, see Figure , the shown actions can take place.
An additional problem occured with the emergence of replicators. Looking at the evolving programs revealed that many codes with a length of only one instruction occured utilizing most of the CPU-time, see above on the minimum template length. Especially when these programs consisted of one Store-instruction neighboring machines could be overwritten with a single value independent of what useful functionality had been evolved before. This sort of denial of service or vandalism in the system made the emergence of replicative systems impossible. With a minimum program length of two instructions this problem is no longer existent. It is biologically plausible to require a certain minimum complexity or length of sequences before emergent replication can occur. This gives a lower bound of the length of nucleotides considered in biochemical origin-of-life experiments.

Different types of micro-controllers

Execute S0 S1 S2 S3
J0 SetAccu Site Load Store
J1 Action Call SetFA SetFB
J2 (ZF) " " " "
J3 (PF1) " " " "
S4 S5 S6 S7
Nand SL SR Goto
GetFA GetFB Decr RND
" " " "
" " " "
Table 8: Instruction set used with three bits in the special-commands part (SP). The possible flags are described in table 4. The default instruction for (J0:S0) is Cycle. This instruction lets the instruction pointer jump to address zero. The instruction (J0:S0) can be changed by clearing the _CYCLE_-flag with the SetFB instruction.
Acronym Description
Nand Calculate a Boolean NAND function of the accumulator and the register address with the cargo-part. The result is stored in the accumulator. Prepending Site-instructions increase the specificity of the register-addressing.
Goto Continue the execution at program address given with the cargo-part of the instruction.
SL, SR Shift ACCU left (right) cyclically.
GetFA Get flags of foreign micro-controller which is located in reading-slot. If no micro-controller available accumulator is not changed.
GetFB Get my own flags and store them in the accumulator.
Decr Decrement the accumulator. If zero, wrap around to the maximum accumulator value.
RND Fill the accumulator with a random value.
Table 9: Eight further commands can be coded with a third bit available for the special command section (SP). See table 2 for the other possible instructions.
Before delving into the area of hardware-evolution, an intermediate step can be investigated: allowing different types of machines to participate in the evolutionary course. The special-command part (SP) in figure was extended from two to three bits. This means an instruction with a cargo-width of two bits is then seven bits wide. See tables 2 and 9 for the additional instructions available.
To simulate now a machine with only six-bits of instruction-width the one added bit in the special-part of the instruction is simply masked out. A special property of a machine, the machine-mask, was introduced. This masking procedure in addition allows to simulate a three-bits instruction-width machine, which of course with two possible instructions is not able to evolve something (End and Site in the fixed program length scenario, or SetAccu and Site in the variable length scenario, see table 1). But with four bits width Load and Store become part of the instruction set and a replicating systems can evolve. With these machines (machine-mask is 0x3) 12 bits are needed for the minimal replication program, see 5 (right part). Experiments could show that the emergence of replicating systems was considerably easier in this case. Even with a machine-mask of 0x7 evolution starts more or less right from the beginning. The only drawback is that these machines are no longer universal. The interesting question arises is there an evolutionary pathway from simple machines to complex machines possible when the machine-mask is subjected to evolution.

Interactions and more physics

Currently the physics of the programs as such is a one-dimensional string of instructions, once formed, being strict and rigid. This rigidity can be changed by looking at these programs as pools of molecules (one molecule resembles one instruction) and these molecules somehow attached to each other via specific bonds. These bonds can be strong and unbreakable meaning forming a rigid string of instructions which is processed from beginning to the end. On the other hand the bonds can be extremely weak or even absent such that processing of the machine would result in a more or less randomized sequence of execution of the instructions. In between all flavours and variants of bond can be envisioned.
In a first approximation each of these instructions is thought to have two connection sites, allowing the formation of linear strings only. The degree of freedom then available is the affinity of forming bonds between the various instructions. An affinity-matrix can be defined which tells the system how likely a bond between to instructions is going to be formed.
Primitive operators in the physical environment can work on these bonds, exchanging elements or even breaking or creating bonds. This means an existing bond determines with its corresponding value in the affinity-matrix whether during execution the following instruction is executed or a randomly chosen other instruction of the program. Also the primitive operators obey the affinity-matrix when working on pairs of instructions.
In addition to the primitive bond-forming and breaking-operators other machines have access to bonds and also could be able to change the affinity-matrix. This is a natural choice because instructions are no atom, in reality they are expected to be more or less complex agglomerations of either nucleotides, peptides or other organic molecules which certainly are subjected to the operations of other enzyme-like catalysts.
Execute S8 S9 S10 S11
J0 SetXA SetYA LoadA StoreA
J1 GrabE Move FastM Drag
J2 (ZF) " " " "
J3 (PF1) " " " "
S12 S13 S14 S15
SetXT SetYT LoadT StoreT
RMove Strans - -
" " " "
" " " "
Table 10: Instruction set used with three bits in the special-commands part (SP). The possible flags are described in table 4. The default instruction for (J0:S0) is Cycle. This instruction lets the instruction pointer jump to address zero. The instruction (J0:S0) can be changed by clearing the _CYCLE_-flag with the SetFB instruction.
Acronym Description
SetXA Set the x-coordinate of the affinity matrix. Accessing the affinity-matrix the next time is done at this given x-coordinate.
SetYA Set the y-coordinate of the affinity matrix. Accessing the affinity-matrix the next time is done at this given y-coordinate.
LoadA Load the current value of the affinity matrix into the accumulator. The coordinate has been specified before by the SetXA and SetYA instructions.
StoreA Store the current accumulator into the affinity-matrix. The coordinate has been specified before by the SetXA and SetYA instructions.
GrabE Grab quantums of energy from a neighboring micro-controller. The size of the energy-quantum is defined via the coefficient _STAT_GRAB_ENE_. The number of energy-packets grabbed is given by the cargo-load.
Move Move the micro-controller to the next container. This is an active move. The energy spent for moving is defined by the coefficient _STAT_MOVE_ENE_. The direction of move is defined via the cargo-load. In a one-dimensional system bit 0 of the cargo specifies whether the micro-controllers moves to the next container (con_id + 1, bit0 = 1) or to the previous container (con_id - 1, bit0 = 0). In a two-dimensional system bit1 defines the y-direction of the move.
FastM Fast move of the micro-controller to the next n-th container. This is an active move. The energy spent for moving is defined by the coefficient _STAT_MOVE_ENE_ times two times n the energy. The direction of the fast move is defined via the cargo-load. See Move instruction for the direction.
Drag Same as Move with the exception that the attached micro-controllers are moved as well. The energy costs are as in the Move-instruction. Each dragged micro-controller costs the same amount of energy which is taken from the dragging micro-controller.
Acronym Description
SetXT Define the x-coordinate of the translation table
SetYT Define the y-coordinate of the translation table
LoadT Load a value from the translation table (coordinate XYT)
StoreT Store a value into the translation table (coordinate XYT)
RMove Move k-containers into a random direction. The value k steems from the accumlator.
STrans Switch the active translation table




The translation table  
Objective of the translation table is to allow a secondary structure mapping system to be simulated. The raw bits are mapped into certain instructions bits. The active mapping table can be chosen with the instruction STrans.
__________________________________________________

© 2004-2008 All rights reserved by PACE Consortium .   Email.   Web Managers: U. Tangen & J. S. McCaskill