This is the set of assignments they do at the university of Illinois (a top 10 computer engineering school): https://courses.grainger.illinois.edu/ece391/fa2025/assignme...
It looks roughly the same as when I took 15 years ago, except they switched to riscv from x86. Honestly, what you're describing sounds too difficult for a first assignment. Implementing irq handlers or syscalls on an existing codebase is far more realistic, plausible, and useful.