It really is super satisfying to get this far, I still turn it on sometimes just to check if it really works.
And I also had zero experience with electronics (and I still don't know as much as I should...), so yeah I think you could piece together something like this. :)
> I still turn it on sometimes just to check if it really works.
I feel this on a personal level, albeit on my much smaller, less complicated projects. Thanks for the amazing write-up, you are an inspiration to us all.
The only multi-input game I have right now is Tetris for 2 players.
My girlfriend doesn't complaint while playing it (except when I win :P), so I'd say it's pretty responsive, even with the somewhat convoluted way the CPU communicates with the PPU and the double-buffering.
I think it will work for other types of games as well.
With all the hardware, firmware for the 3 microcontrollers, bootloader software, compiler toolchain and tools, I still haven't gotten around to actually make a lot of games for it.
I would totally pay (~$300) to jump on a pre-packaged MOOC like course that has a batch of students working together and the course fee would include the hardware needed and access to a TA like resource (when the batch of students can't solve a problem together).
I can even imagine a part II with modern components after learning this level of basics.
Out of curiosity, have you thought about trying to port "real" games over to it, as in running a ROM of something commercially released? This is already really cool, but it would be nerd-cred-for-life cool if you could say "Oh, you have a gameboy? Yeah, I built my own."
I was doing a little bit of Z80 work a while back, but I didn't particularly seem to appreciate its design (compared to say MIPS). Why do you think it's beautifully designed?
Admittedly, I do not have a lot of experience in other CPUs, but to me its just the way its designed. A simple syntax for assembly and the way it maps to byte values is clever. It doesn't require a lot of work to make things happen, ie "hacks" for interacting with IO. I also like how there is a separate IO bus from the data bus, which means IO doesn't take up memory. The register naming convention is simple, and having "alternate" registers is cool.
I think GP's use of "hand-clocking" to refer to the factthat the z80 can run on a very low clock rate, to the extent that you can have a hand switch that sends individual clock pulses to the processor. This can be useful for testing purposes as well as for low power operation in embedded applications.
As the Z80 doesn't use dynamic registers (I think basically the only "modern" CPU to make this decision) it doesn't need a minimum clock signal speed to refresh the registers as every other CPU does.
This means you can rig up a push button switch and manually advanced the clock one button press at a time.
To me that's super cool. It also makes them really easy to debug.
You should check out Adafruit and Sparkfun as well. They have a lot of solid tutorials to get you started, and a bunch of inexpensive microcontrollers that are easy to get going with, as well as all sorts of lights and sensers and switches to connect to them.
It really is super satisfying to get this far, I still turn it on sometimes just to check if it really works.
And I also had zero experience with electronics (and I still don't know as much as I should...), so yeah I think you could piece together something like this. :)