HACKER Q&A
📣 purple-leafy

Understanding basic computer architecture via emulation?


I have a very basic understanding of how computers work. I’m a full stack developer but didn’t do a CS degree.

I want to have a deeper understanding of CPUs, GPUs, how it all connects.

I want to learn by building chip emulators in Go

What’s a good resource/s to get started?


  👤 mikewarot Accepted Answer ✓
I'd recommend the Nand Game[1], a schematic based version of Nand2Tetris[2].

[1] https://nandgame.com/

[2] https://www.nand2tetris.org/


👤 toast0
IMHO, if you want to learn by building emulators, I'd suggest working on video game emulation. If you go back to NES or similar, you won't have much modern information, but it's a well trod path with lots of information available (some of which happens to be accurate and correct and useful). Much of it is not too complex, so you can make progress starting out, and you can bail out whenever you want, because if the world doesn't get another complete NES emulator, it's not a big deal.

If you enjoy what you're doing, but want to learn about more modern CPUs and modern GPUs, you can progress towards more recent systems. The sixth generation systems (Dreamcast, PS2, Gamecube, Xbox) are comparable to modern architectures, but with a lot less horsepower.

The NESdev Wiki is a good source of information [1] to get started.

[1] https://www.nesdev.org/wiki/Nesdev_Wiki


👤 musicale
One classic textbook is Patterson and Hennessy, Computer Organization & Design: The Hardware-Software Interface.

Learning how to program FPGAs (in verilog, etc.) is also a nice way for software people to start getting into hardware.