Rediscover CPU: a very niche educational game

Started by
6 comments, last by makuto 11 years ago

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:

  1. Set certain memory cells to two others plus each other (set/mov, add)
  2. Add certain memory cells X amount of times (jmp, set/mov, add)
  3. Make a checker board pattern on the screen
  4. Use interrupts to stop a process with a key press
  5. Use interrupts to stop a process after X milliseconds
  6. Perform all basic mathematical operations
  7. Add a new I/O device hard disk (really just another binary file on their hard drive) and save something to the disk
  8. Make a Rediscover CPU assembly compiler in any way you want (on CPU or in high level language off board CPU)
  9. Build a time sharing OS that allows you to start, stop, and execute multiple processes
  10. Extend the OS to allow loading programs from an I/O hard disk (ideally make the programs position independent)
  11. Add keyboard input & basic text editing to your OS
  12. Allow programming the OS on the OS (at this point the CPU is independent of the real host computer)
  13. 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)
  14. Extend your networking code to allow multiple CPU's and addresses
  15. Create a higher-level language compiler for your OS
  16. Continue building your OS, network, programs, and I/O devices
  17. Connect to another Rediscover CPU network
  18. 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?

Want to get to know my work and I better? See my website: Au 79 Games

I wrote General Tips on the Process of Solo Game Development

Advertisement

Do you guys think this is a viable game?

Yes...but only in the sense that any game can be viable.

Would any of you play it, or is it just me?

Personally I would probably not play it unless it was helping out on a beta test. But the truth is "I don't know", it would very much depend on how well it is implemented and how much I felt a sense of accomplishment in achieving set goals. As you have observed this is a very niche game idea and the only attractiveness it holds to me is that I have fond memories of programming in Assembly many years ago.

---------------------------------------------------

However -- and this come down to experience you might gain out of making such a game. If you are going to learn/gain experience by creating such a game then you should consider making it, not to mention that a completed game incorporating an unusual topic would contribute to your own resume/portfolio.

You might also find that there is a market associated with students and you could possibly design your game towards an educational viewpoint in conjunction with existing assembly language courses which might lead to sale opportunities through the tertiary education markets.

Hope this helps :)

I was thinking it would have a stronger hold on the educational side of things.

Thanks for your thoughts!

Want to get to know my work and I better? See my website: Au 79 Games

I wrote General Tips on the Process of Solo Game Development

Do you guys think this is a viable game? Would any of you play it, or is it just me?

By itself, probably not but some programming games are there. For example, after Minecraft, it's supposed to be 0x10c, where writing efficient programs is... was? supposed to be important.

There are some games requiring to implement programs, typically not in asm. I recall Manufactoria and Bureau of Steam Engineering.

In general, I'm afraid you're going to spend a lot of effort on this. After reaching point 7, everything goes incredibly complicated by a design standpoint.

My virtual CPU is now a few years old and it's not going to have interrupts, much less a "virtual hard drive" architecture designed around it.

8 is complicated.

9 sci-fi

Previously "Krohm"

I think instead of taking on the whole thing, take on just a part or two. For instance, You get a certain number of drag and drop commands, and a certain problem that must be solved with it. You explain how the pieces work together, like a push, or a copy, and ultimately get the final value that you need. You can make the other additional notes available, so people can understand that this game actually is assembly, setting the registers, etc... As you add more layers, you can slide over to the next section, where you interact with different parts of the processor, and as command types come in, you route them to the different parts of the processor. Then in another section dive in further. by getting basic gate logic, and create the IC's. Presenting puzzles to resolve. Even dive down to the electron, and how it is pushed through the wire at a very slow rate. Push electrons through like water/pipes game. but showing how it works. Add a resistor, a capacitor, and see how it affects the flow.

I think a key trick to this is finding existing games that you can apply the same logic to. IC's could be part of a pipe game. Some let water through some slow it down, some store it up, but each "pipe" carries the IC symbol. giving a realistic approach to the nature of it. Diodes producing one way. Then you have to get the power back to complete the pipe circuit.

Handling x86 instructional sets, like having a mask to identify which area of the ship to route the rest of the command through. This could be like a mail sorting game, or a canal game, opening up the gates based on the first 4 colors on the tip of the ship. and relating that to binary. or Hex, 16 color codes for the first letter.

Each style of game play could be continuous. As the player is working with IC's to control the water flow/return/use, it comes across with quiz questions related to what you've been doing, then continues with the level, and repeats the process. Once all the quiz questions for that starter level are completed, a new level of that puzzle is introduced. For instance, proven the use of resistors and lights, now you move on to capacitors and diodes, then add transistors and potentiometers, etc... then introduce logic gates, to give decisions to the pipes, Not, And, Or, Xor, then memory, etc.... Then add commands structures. Building the whole thing in pieces, trying to make a game that is fun on its own. I think I would play this game.

Moltar - "Do you even know how to use that?"

Space Ghost - “Moltar, I have a giant brain that is able to reduce any complex machine into a simple yes or no answer."

Dan - "Best Description of AI ever."

Do you guys think this is a viable game? Would any of you play it, or is it just me?

By itself, probably not but some programming games are there. For example, after Minecraft, it's supposed to be 0x10c, where writing efficient programs is... was? supposed to be important.

There are some games requiring to implement programs, typically not in asm. I recall Manufactoria and Bureau of Steam Engineering.

In general, I'm afraid you're going to spend a lot of effort on this. After reaching point 7, everything goes incredibly complicated by a design standpoint.

My virtual CPU is now a few years old and it's not going to have interrupts, much less a "virtual hard drive" architecture designed around it.

8 is complicated.

9 sci-fi

I see what you mean. I don't know if 9 would be sci-fi :) (I designed some intructions that would make it a lot easier).

Dan: That would definitely make for an interesting "learn everything about computers" game, but not exactly the direction I was going. Thanks for the awesome suggestion!

Want to get to know my work and I better? See my website: Au 79 Games

I wrote General Tips on the Process of Solo Game Development

I think you are going into the direction of

">gamification. Just a disclaimer, this isn't an easy field, furthermore this idea seems to be fairly new in game design and it seems to be one professional game designers struggle with.

I once used a Virtual CPU program that could run x86 like assembler and had some virtual devices to play with (like a Traffic Light and a heater and thermostat). Mind you it was the work of a bachelor thesis of two experienced programmers.

Why do you want to use C++? If this project is about bringing CPU architecture closer to the people, then the GUI is hugely important. From my experience higher level languages give you more bang for your time invested especially anything GUI related.

For me it seems like you follow two different goals, your personal goal is to learn assembler and lower level programming, while your project goal is to build a platform for teaching this. From my experience having different personal and project goals is a bad composition for hobby projects.

Project: Project
Setting fire to these damn cows one entry at a time!

I think you are going into the direction of

">gamification. Just a disclaimer, this isn't an easy field, furthermore this idea seems to be fairly new in game design and it seems to be one professional game designers struggle with.

I once used a Virtual CPU program that could run x86 like assembler and had some virtual devices to play with (like a Traffic Light and a heater and thermostat). Mind you it was the work of a bachelor thesis of two experienced programmers.

Why do you want to use C++? If this project is about bringing CPU architecture closer to the people, then the GUI is hugely important. From my experience higher level languages give you more bang for your time invested especially anything GUI related.

For me it seems like you follow two different goals, your personal goal is to learn assembler and lower level programming, while your project goal is to build a platform for teaching this. From my experience having different personal and project goals is a bad composition for hobby projects.

A GUI is definitely less imposing then my original idea of how they would interact with the computer (hex edit a binary file, then use the command line).

You're right about me following two different goals and I've been thinking about how they do conflict each other subtly. It would probably be best if I split them!

Thanks for all of the tips guys!

Want to get to know my work and I better? See my website: Au 79 Games

I wrote General Tips on the Process of Solo Game Development

This topic is closed to new replies.

Advertisement