Our vision for the GoL computer is one similar to real computers. That is, it’s built from logic gates, has memory, adders, clocks, etc., and is programmed in a format comparable to real assembly language. Just like regular computers, we have to start from the basics: wires and logic gates. The first task is to find implementations of those simple components in metapixels.
The order in which I present the various building blocks is a combination of discovery order, relevance, and complexity.
There’s actually a couple different options as far as wire goes. You can see some options in this simulation.
We chose the 3-wide wire, with electron tails 2 blocks behind, which is shown on the top row. There are some other variations on electron which are shown in the second row. The third row shows a type of 2-wide wire (discovered later) which has some inherit side-to-side flexibility. This 2-wide wire ends up being useful only as a single “module” within a larger wire, to help squeeze around an obstacle. The 3-wide wire is superior, in my opinion, because it is uniform (can take on any length) and handles 90 degree turns better. The electron as shown in the first row is the kind that arises most naturally in various circuits, such as the clock at the bottom. Care must be taken, however, to ensure that the tails are properly formed, since several logic gates malfunction if the tails are incorrect. Furthermore, a sporadic signal in the wire can end up reverberating to both ends.
There are probably other potential designs for a wire, using other metapixel rules or other arrangements, but I believe the B1/S and B2/S combination is one of the most useful. For comparison, wireworld electrons are B12/S (but have a third “dying” state).
I made some mention of corners in the last post, but here are some more variations:
The best kind of corner is one whose delay we can ignore, meaning that we do not have to count the number of corners to calculate the time it takes for a signal to travel down a long wire. Each corner above follows the correct Manhattan-distance-based timing, so they will all be compatible with each other and with any other circuits that obey Manhattan distance (which is not a give-in with a Moore neighborhood).
- The most common corner used in our designs is the one in the top-left and bottom-right of the animation.
- The corner in the top-right has the advantage of being narrower on one side, but is likewise wider on the others.
- The corner in the bottom left is the widest, which can be both an advantage and disadvantage.
One important rule to keep in mind is that “something cannot be created from nothing,” when it comes to our CA, at least. The only way to generate an electron is if we already had one. The only way to increase our total electron count is through wire splitters.
The corners listed above can be converted into wire splitters, quite conveniently actually. The first corner can be transformed into a 2-way wire split (turning left and right). The second can be transformed to a 2-way turn-or-go-straight split. The third one can be converted into any kind of 2- or 3-way split.
Wire crossings allow signals to pass directly through each other. Since we are limited to a 2D world, a compact wire crossing is one of the most important building blocks. The discovery of the wire crossing actually came after a couple of the more simple logic gates. After the team did a decent amount of trial-and-error, El’endia found the wire crossing below. He introduced the B12/S1 rule, shown in red, as the fourth (and currently last) type of metapixel in our project.
I figured out a slightly more compact version, but so far I’ve never actually used it in bigger circuits:
Rarely in actual circuitry are parallel wires this close together, so the circuit will probably involve diagonal wiring to bring them together.
Diagonal wire is wire that shifts to the side as it travels forward, which enables the wire to cut corners if need be.
Or, less practically (requiring larger distances between electrons and dependent on the exact distance):
Also of importance is delay wire, which is wire that slows down the passage of electrons. Delay wire is classified by its length and delay (how long it is versus how long electrons take to flow through it). The only useful generic delay wire I’m currently aware of is this 4:3 wire by El’endia: