If you want to get down to the hardware, try checking out microcontrollers like PIC and AVR. I recently had the chance to work with some of those platforms, where the code you write (in C or assembler) actually runs on bare metal.
Of course, that only means that you have to implement some core OS services yourself, like interrupt routines to handle input. Much of it is available as example code, but still small enough to read and understand the whole system.
As far as computer archaeology goes, try taking the basic courses in digital circuits, computer architecture and compiler technology at you nearest university. That satisfied my curiosity, as well as my need to write programs with raw binary opcodes :-)