I also had some fun modelling the chips in verilog and model checking a verilog interpreter against them. https://www.philipzucker.com/td4_ebmc/ George Rennie got a similar thing working using the yosys toolchain https://github.com/georgerennie/philip_zucker_sby_demo
Back in 1983 or so, I had a TI/99 computer and found a BASIC program called "PicoProcessor" in one of the home computing magazines. It emulated a 4-bit microprocessor. It only had a handful of instructions, 16 bytes of memory, and a couple of registers but it was enough to illustrate the concepts of how a processor runs machine code, in a way that was much more understandable than just reading about it.
Could I write any useful programs with it? No. But could I see how a CPU adds two numbers? Yes. And that was enough of an introduction that assembly language was suddenly not so mysterious.
Last time I tried I ended up getting sidetracked by making a tool to help me. https://fingswotidun.com/PerfBoard/
But at least that's made the job of building a nice compact ALU module much easier. (One of the test boards in the app shows it)