After finishing the build I got tired of toggling programs into RAM one byte at a time with the DIP switches. Every solution I found online used a microcontroller, and I wanted to stay in the spirit of the original project, so I built a bootloader out of nothing but TTL logic, EEPROMs and passives.
How it works:
A 74LS74 D flip-flop acts as a LOAD flag, preset on power-up. Its output drives A10 on the microcode EEPROMs, so the fetch & decode cycle changes depending on the mode: LOAD mode fetches from a Boot ROM instead of RAM, RUN mode is the normal fetch from RAM.
The Boot ROM holds a 16-byte bootstrap (LOAD 0 ... LOAD 14, RUN) that copies one program from a Program ROM into RAM, then clears the flag to start executing it.
A third EEPROM extends the control word from 16 to 24 bits, adding 8 new signals
(PRI PRO BRI BRO RUN NXT RES PCE) and three new instructions: LOAD, RUN and NEXT.
The Program ROM holds 16 programs, bank-switched by a 74LS161 acting as a "program pointer". Each program ends with NEXT, which resets, flips back to LOAD mode and increments the pointer — so the machine cycles through all 16 programs forever, completely on its own, from the moment you plug it in.
I also reprogrammed the 7-segment display EEPROM: the two's complement half of the table goes unused in LOAD mode, so I replaced it with animation frames and get a loading animation while a program is being copied:
https://raw.githubusercontent.com/marcoava00/8bit-computer-custom-bootloader/main/docs/img/loading.gif
The case in the video is mine too: I designed it in Fusion and 3D printed it in a semi-transparent material, with a door and plexiglass. That's what gives the glow you see here in the dark.
Full write-up, KiCad schematics and all the Arduino sketches:
https://github.com/marcoava00/8bit-computer-custom-bootloader