The feature that I’m currently working on is adding subcircuits. This is relatively complex, but doing this well is central to Toves’ design, potentially cutting across all layers of its design, so I want to tackle it early.
I’m beginning, naturally, with the interface for managing circuits. In Logisim, to the left you find the canvas, to the left of which you find the “explorer pane” with the “attribute table” below it. In the explorer pane, you find a list of the loaded “libraries,” including the project’s subcircuits as the first “library”. So far, what I’ve implemented for Toves is basically the same. The only significant difference is in terminology: I’m planning to call this the “toolbox” with “drawers” (rather than an explorer pane with libraries). But the appearance is identical.
(On a tablet, screen real estate is more precious, so I think the toolbox wouldn’t always be visible. Instead, there’d be an icon of a toolbox, which when tapped would pop up basically the same structure (though shown as an accordion rather than as a tree). On a desktop computer, being able to see the toolbox continuously seems a good way to use the extra real estate – plus clicking an icon is more laborious with a mouse than with a finger.)
I’d like to think about this more creatively, but ultimately I’m not coming up with good alternatives.
So what’s going on with the name “Toves”? After all, Logisim has built up solid name recognition over the years.
When I started it back in 2000, I didn’t put much thought into the name at all. I was simply interested in building the software for my students without any hope of the project going further. So I simply chose a functional name summarizing the purpose of the software. But I posted it in case somebody else would like the project, and as Logisim began being picked up by other schools, the software began becoming more sophisticated. But while I never really liked the name much, it was never time to split with it.
The name Logisim has some disadvantages. For one, a domain name isn’t available. Even on SourceForge, Logisim is filed under a different directory because a previous open-source Logisim project already existed. (It didn’t exist when I started Logisim, but my Logisim didn’t go to open-source and go onto SourceForge until much later.)
Besides, keeping the name Logisim could lead people to expect backward compatibility. But Toves is planned as a clean break: Several of the components will be designed with different appearances, incompatible with what appears in Logisim.
What’s more, if I kept the name Logisim, I was left wondering what to do with version numbering while Toves was in the middle of development.
So what’s behind the name “Toves”?
Since I was thinking that it would eventually have Verilog support, I decided to look for short words with the letter v in them. I knew I needed a rare word so that I had a ghost of chance of landing a domain name. So I looked through a dictionary, and Toves stood out.
Of course, anybody thinking of a tove is bound to think of Lewis Carroll’s books, and Lewis Carroll was himself a logician. A bonus: Carroll’s book contains some nice public-domain artwork depicting a tove, which I’ve reused liberally.
There is no other software package named toves, and the domain name toves.org was available.
I could come up with a tortured acronym that perhaps would apply some day:
The Omnific Verilog-based Editor and Simulator.
Lots of open-source projects have a mascot. GNU has its gnu, Linux its penguin, GIMP its coyote, Firefox its firefox, Hadoop its elephant. But the tove has sadly been neglected.
Why Toves? I’ve developed Logisim for over twelve years, but over time I’ve found some inherent limitations that are deeply embedded in the system but prevent it from maturing to “the next level.” Rather than try to find some route to overcoming these several limitations within the current framework, I wanted to build on a replacement system from scratch. Hence this project.
Logisim represents a lot of accumulated work, so naturally replacing it will take a lot of work. Though I’ve put significant work into what Toves is today, it’s not very far. Right now, all Toves can do is allow you to build and simulate a simple circuit out of 2-input AND, OR, and NOT gates. No subcircuits, no multibit wires, not even copy-and-paste or opening a file. For now, what makes Toves interesting is primarily what’s under the hood, which I’ll discuss in later posts.
But while it’s hardly useful, I’ve now uploaded the first working version – version 0.0.1. While it’s not particularly useful, it’s there for you to look at and critique.
In this blog, I hope to chronicle the progress of Toves development. Some posts will present user-facing design decisions, seeking feedback on ways to improve. Others will describe internal architectural decisions, reflecting lessons learned the hard way from Logisim. My hope is that others will contribute comments, leading to ideas that ultimately will lead Toves to be even better than it would be if I worked in isolation.
To give you a taste of what to hope for from this project, here are a few of the features that I eventually hope to include in Toves, but which aren’t in Logisim:
- Diagonal wires [This is in Toves today: Horizontal/vertical is the default, but alt-drag creates a diagonal wire.]
- Canvas extends infinitely in all directions (rather than having a fixed upper left corner) [This is in Toves today.]
- Z-ordering of components preserved
- Drawing arbitrary shapes like rectangles or lines in a layout
- Modules of varying types – usually a layout (the only Logisim option), but a module might also be a memory, a truth table, or a state machine – and hopefully one day source code (perhaps written in Verilog)
- No delay in sending signals into a subcircuit (Logisim introduced a one-step delay when sending a signal into or out of a subcircuit)
- Bidirectional connections into subcircuits
- Eight-valued logic, allowing weakly-driven 1’s and 0’s – particularly useful for open-collector circuits
- An oscilloscope for viewing how signals change over time
- Components that must be “closed” once the simulation becomes inactive – particularly file and network I/O
- Components that “time out” after a period, like a monoflop.
- Tablet support under iOS and Android.
I invite you to follow along in the coming months – maybe years – and to participate in the discussion!
What features would you particularly like to see (or not see)?