I've been thinking a lot lately about computer processors and design, and was thinking about actually implementing my own simple virtual CPU as a learning exercise. These days, young programmers grow up on very high level languages without much knowledge of how the language (and the processor) actually work. I am one of those young programmers, so I thought I would implement a tool that would allow me to learn assembly and "Rediscover" things like time sharing OS's, the internet, etc. in a convenient and simplified way.
I've been designing the CPU to result in the simplest instructions possible to allow a smooth learning curve (at least for programmers). It's been quite a challenge seeing that it's difficult to find books on assembly language design, not just learning assembly language, but things have been going quite smooth. The CPU will likely be implemented in C++ and take a simple binary input file that will fill the main memory, allowing the player to edit their code using a hex editor. It probably won't be very fast, but it's about learning, so that's OK.
I've thought of a list of challenges the player is asked to complete (they self check), such as:
- Set certain memory cells to two others plus each other (set/mov, add)
- Add certain memory cells X amount of times (jmp, set/mov, add)
- Make a checker board pattern on the screen
- Use interrupts to stop a process with a key press
- Use interrupts to stop a process after X milliseconds
- Perform all basic mathematical operations
- Add a new I/O device hard disk (really just another binary file on their hard drive) and save something to the disk
- Make a Rediscover CPU assembly compiler in any way you want (on CPU or in high level language off board CPU)
- Build a time sharing OS that allows you to start, stop, and execute multiple processes
- Extend the OS to allow loading programs from an I/O hard disk (ideally make the programs position independent)
- Add keyboard input & basic text editing to your OS
- Allow programming the OS on the OS (at this point the CPU is independent of the real host computer)
- Network a friend and your CPU's together & send each other simple messages or files (networking possible by having a layer over the actual internet that simulates a simple wire)
- Extend your networking code to allow multiple CPU's and addresses
- Create a higher-level language compiler for your OS
- Continue building your OS, network, programs, and I/O devices
- Connect to another Rediscover CPU network
- Assist in development of new versions of Rediscover CPU
As you can see by that list, this game would be a very nerdy, very niche game (but very educational).
Do you guys think this is a viable game? Would any of you play it, or is it just me?