@bridgeenjoyer @dfs_comedy Or build yourself an RC2014 and get the full 1980 experience. It's modular solder-it-yourself hardware (maybe not a beginner project but it's mostly thru-hole components) and runs CP/M on an actual Z80. I don't have a ton of nostalgia for CP/M (getting Linux in 1994 was a godsend - so many good tools) but it's a great exercise in working with small machines and learning the limitations (and benefits) of PCs in the pre-DOS era.
So the way CP/M seems like an operating system instead of a normal program is that it gets loaded in at the top of memory with the rest of memory filled with no-op instructions. On boot, the hardware sets the program counter at the bottom of memory, and all those no-ops are executed before CP/M runs. You put your program below CP/M in memory so when it terminates, the program counter runs through all the remaining no-ops until it hits CP/M - no need to keep track of CP/M's location in memory and know where to jump back to when your program terminates. It's a clever hack that makes the system feel more interactive than it really is. Learning this low-level stuff takes some of the mystery out of the machine without losing its magic.