toast0 5 hours ago

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

mikewarot 3 days ago

I'd recommend the Nand Game[1], a schematic based version of Nand2Tetris[2].

[1] https://nandgame.com/

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

  • ActorNightly a day ago

    Nandgame is very good, id skip the nand2tetris as its a bit outdated.

    My recommendation is to move to playing around with microcontrollers and writing stuff in C for them, compiling it to assembly and understanding what each instruction does.

    Past that, there is the whole "how to write an OS" which is a fairly complicated topic. You can skip that as you are never gonna really be in that area unless you are working on consumer facing product that needs some ABI.

    You can go straight to using ghidra to decompile linux executables, and understanding things like elf files, dynamic linking and so on.

    • cinntaile 18 hours ago

      What about nand2tetris is outdated?

musicale 2 days ago

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.