So instead of using some fantasy machines such as LC-3, students can directly get into the world of 6502.
First semester: mostly concentrated on 6502 with a full 6502 CPU emulator as the final project.
Second semester: concentrate on a real machine such as the NES. Students need to learn to improve their emulators to program in it (so, do you need a debugger? a decompiler?), as well as hacking roms, burning roms, using carts to load the games into a real NES, and programming new games for it. The game must run in the emulator as well as a real NES.
Third semester for honour: upgrade to a 16/24/32-bit machine, e.g. 80286, SNES, 68K, whatever, and get some serious project done. Can use C if applicable. The project can even be a simple OS or a BASIC interpreter to pave the way for advanced classes. Or maybe a computer virus, anything that is fun and creative.
OS and compiler classes can also be designed around real hardware and projects. e.g. Porting an early version of Linux to a once popular architecture and add a few small functionalities; Write a compiler for a LISP-like language for that architecture and OS.
You don't even need Data Structure and Algorithm and those BS Java programming classes - they learn them on the way. And if they miss anything they can pick them up on the job.