The Simultac Fonton Simulator

 

 

 

The picture shows the Simultac Fonton simulator display during calculation of the Lisp programme to calculate Fibonacci(9).

 

The source Lisp is shown in the top left hand text area.

 

Each Fonton is shown connected to its four nearest neighbours. The appearance of the Fonton indicates whether it is inactive, has tagged data stored in its registers (Orange register), is performing a calculation in the ALU (green ALU) or is writing to or reading from its registers (red register).

 

The Simultac can be configured as an NxM array of Fontons (in this example 8x8).

 

The source Lisp programme is first parsed for correctness, before being sent to be simulated.

 

The programme initially is sent to an off-screen “socket” Fonton, whose function is to simply create a Burton that carries the programme (as data) into the Simultac.

 

The programme-carrying Burton arrives at a Fonton, which parses it and creates new Burtons for non-atomic tokens that cannot be immediately calculated in the ALU. These new “Request” Burtons are sent to adjacent Fontons.

 

The algorithm used to decide which of the four adjacent Fonton neighbours to send each Burton to is configured by the user: either a round-robin, or random selection mechanism may be chosen.

 

The selection mechanism makes a striking difference to the Fonton activity patterns generated in the Simultac!

 

When Request Burtons are created by the Fonton, they are tagged, and the Fonton itself keeps a set of tagged data items that are used when a Result Burton arrives back.

 

Result Burtons, when arriving at a Fonton, match themselves against the unresolved token list in the deposited Lisp expression. If, after replacing the unresolved token that matches with the value carried, a new Result Burton is created which carries the value of the resolved Lisp expression back to its source in turn.

 

Final results eventually percolate back to the socket Fonton as they must. They then appear in the text box in the top right hand corner. (The result of a previous calculation can be seen in the pricure above: Result=[55]).