Before I started on my Arduino AVR emulator project, I did some searching to see whether there was any other emulator in existence out there (open source, since I did know about AVR Studio which is Windows-only). Somehow during my searches, perhaps by not thinking to use the word "simulator" instead of "emulator", I failed to find SimulAVR which is an AVR emulator that has been around for a long time. The original version was in C and has been abandonware for a number of years. A couple of years ago it was ported to C++ and has had activity as recently as a few weeks ago.
The design of SimulAVR turns out to be very much like mine, although having been around much longer it's got far more features. Nevertheless, I plan to continue working on mine just because I've already come this far. And I do have some features and plans that aren't part of SimulAVR.
Another idea I had was to build a GUI on top of the emulator, which would let you connect up virtual switches or LEDs or servos or whatever, and "run" the emulated circuit powered by the emulator core. I've got the basics of this working, except instead of being drag-and-drop, the "circuit" is hard coded into the Qt interface layer. I even thought about implementation, like how SVG might be a great way of representing circuit component graphics.
But then I found Fritzing, which is a really cool open source circuit design application that support drag-and-drop circuit design (with multiple views such as physical layout, circuit diagram, and PCB routing). This is very much like what I had in mind! But again, much more extensive. Sure enough, it even uses SVG to represent graphics elements.
Now, given a circuit design in Fritzing (that includes an Arduino of course), my next idea is to try to "run" the circuit using the AVR emulator core. This could be considered a fusion of the emulator and circuit design. We'll see how this goes. If anybody knows whether this has already been done, please let me know!