Your idea for a foundation of practical computing sounds a lot like MIT's 6.004 Computation Structures [1], which is available on OpenCourseWare and edX.
In 6.004, you start by learning about the digital abstraction and MOSFETs, then go on to logic gates, flip-flops, pipelining, instruction sets, and halfway through the course you use a circuit simulator to build a RISC processor called the Beta. Then you go on to I/O buses, virtual memory, and interrupts, and at the end of the course you can compile C programs for the Beta.
To get from having a processor to having a self-contained programming environment, you could work through a variation on jonesforth [2]. (You'd have to port it from i386 to the Beta if you wanted to keep the same architecture.)
In 6.004, you start by learning about the digital abstraction and MOSFETs, then go on to logic gates, flip-flops, pipelining, instruction sets, and halfway through the course you use a circuit simulator to build a RISC processor called the Beta. Then you go on to I/O buses, virtual memory, and interrupts, and at the end of the course you can compile C programs for the Beta.
To get from having a processor to having a self-contained programming environment, you could work through a variation on jonesforth [2]. (You'd have to port it from i386 to the Beta if you wanted to keep the same architecture.)
[1] https://ocw.mit.edu/courses/electrical-engineering-and-compu...
[2] https://github.com/AlexandreAbreu/jonesforth/blob/master/jon...