Write your own NES emulator
-Me (inspired by Joel Spolsky)
“There is almost no reason to re-write a huge software codebase from scratch. If anything, evaluate wrapping it with an emulator that can filter for the things you want to change before a re-write.”
javidx9 walks us through his 3 month adventure writing a NES emulator in C++. He does a great job walking through the topics with beginner friendly explanations and good production values of diagrams and coding.
Other resources: