Three possible concrete ideas for anyone to do with as they will.
1/ I actually wrote a CPU/machine simulator recently as a side project which had two parts:
- an assembler for creating load modules.
- an emulator for running the load modules.
The assembler was just a command line tool but the emulator was a full-blown GUI which showed register contents, memory contents, stack area and so on.
It wasn't just a CPU emulator, rather a system emulator since it had memory mapped I/O for keyboard and screen.
The hardest bit was getting the CPU instructions correct so that they were useful, the coding up was quite fun and now it's earning (small amounts of) cash for me.
2/ Another idea I've had is a graphical interface for a pipeline (feel free to run with this, I've done nothing but design it due to the constraints of work and family).
The basic idea is to drag'n'drop elements into a pipeline to transform text. So, instead of having to learn the intricacies of:
cat infile
| grep '^ERROR: '
| grep -v 'errno=-100'
| cut -c1-80
| tee outfile
you could instead design:
+------------+ +--------------+ +----------------+
| InputFile | | Filter | | Filter (not) |
| infile | -> | '^ERROR: ' | -> | 'errno=-100' |
| | | | | |
+------------+ +--------------+ +----------------+
|
V
+------------+ +--------------+ +----------------+
| OutputFile | | Duplicate | | Cut |
| <stdout> | <- | | <- | 1-80 |
| | | | | |
+------------+ +--------------+ +----------------+
|
V
+--------------+
| OutputFile |
| outfile |
| |
+--------------+
and have it generate any text processing language you want, such as:
- bash and the text tools (sed, grep, cut, paste, etc).
- Perl with a "while ()" loop.
- Python.
I think this would be useful as a learning tool (and possibly a production tool for transformation). You could even have a debugging tool that single-stepped the pipeline, showing inputs and outputs at each stage.
3/ A full-blown Physics planetary motion emulator where you can put various-sized planets and other bodies (powered or unpowered) into space (2D since 3D would be too hard to visualize on a monitor).
At each step, you would have to calculate all the gravitational (and other) forces to figue out the next frame. I think it would be interesting to see the evolution of a solar system (or the fun we would have had in a binary star system).