These are some notes and an excuse to build a WireWorld web component and re-build some logic gates using the WireWorld++.
Wireworld is a cellular automaton played on a grid. It simulates electrons travelling along conductive cells. Please find below a tiny bunch of experiments I put together to better understand WireWorld.
Thanks to the “Wireworld++: A Cellular Automaton for Simulation of Nonplanar Digital Electronic Circuits” paper for peaking my interest in the topic, and The Wireworld computer site for providing scaffolding for these computer constructs. All of the examples here are taken from those two references. I will not be covering the rules of WireWorld++ here and recommend reading the start of the paper for the ruleset. It’s 9 rules!
I’ve also created some special cells outside the ruleset for generating test signals to pass as an input into the logic gates.
Signals are how we communicate data along the WireWorld wire. Because the WireWorld automata simulates individual electrons travelling on wires, we abstract a signal to a synchronized pulse with varied frequency.
A length of wire is divided into cells. If we expect an electron every 3 wire segments, that is called 3-micron technology.
Below see an example of three wire segments, 3-micron, 4-micron, and 6-micron. Pause the simulation and count the gap between electron heads.
I created “helper cells” for generating different frequencies of electrons:
And here is how you create the same sequences using the rule set.
A diode enforces a direction on the circuit. Using the weak conductor we can enforce the signal direction.
A 4-micron not gate. The timing of the input is important, as an offset signal results in the not gate not registering the input.
In the above example, I’ve placed 4 micron sensors to denote the on and off status of the signal.
An AND gate! Only if both inputs are powered will the output be powered. This is very elegant in WireWorld++ because it takes two weak conductors to power a strong conductor.
An XOR gate. The output is powered if exactly one input is powered. Elegant with WireWorld++ because a weak conductor is powered by exactly 1 strong head.
Wireworld++ gives us a technique for creating signal crossings by using weak conductors.
The timing matters because collisions will block outputs.
Maybe in the future I’ll add more. Here’s a very minimal and janky editor I made for these examples.
Clicking Play or Step pastes the html in the console that can be directly pasted on the page to save the wireworld state.
This was fun, onto other adventures.