Version 0.0.2 is now up. The sole goal of this version is to enable subcircuits. Admittedly, if the immediate goal were to simply bring Toves to a usable level, I might concentrate on copy-and-paste or saving files, which it still lacks in this version. But subcircuits are central to Toves’ core, and I wanted to make sure it was built into Toves as quickly as possible. Indeed, in implementing this I found that it is already more complicated than I had expected.
Subcircuits are implemented by adding “Input Pins” and “Output Pins.” This is something of a departure from Logisim, where the toolbar had these pins that doubled as Toggle Switches and LEDs. In Toves, this is currently separate, and my plan is to keep them that separate unless there’s a groundswell of disapproval. (However, I do hope to make Input Pins be interactive in the same way that Toggle Switches are.)
Unlike Logisim, signals are propagated into Toves subcircuits instantaneously. That is, suppose I have a subcircuit “Invert” that consists simply of an input feeding into a NOT gate feeding into an output. In Logisim, using “Invert” would be a bit slower than simply using a NOT gate: If I were to connect a signal into a simple NOT gate and also into an “Invert,” and if I were to connect both into a XOR gate, the XOR gate would occasionally (though very quickly) have an output of 1. In Toves, the XOR gate is always 0.
Also unlike Logisim, the pins are genuinely bidirectional. The terms “input” and “output” are somewhat misleading: The only difference is in which way they face and in what side of the subcircuit they appear. If you wanted to send a signal out the left-hand side of the subcircuit (which admittedly is a bit confusing), then you’d simply use an “input pin.” If Toves already had controlled buffers, then you could easily have a pin that sometimes acts as an input and sometimes acts as an output.