Thanks for that! You put it into a very understandable form
I learned about the basics here http://www.emulator101.com
Then I read the docs at NESdev Wiki and eventually wrote my own NES emulator.
https://www.nesdev.org/wiki/Nesdev_Wiki
If you have good documentation then you're just following the specs and turning that into code. Next level difficulty is reverse engineering the hardware, figuring out how it works when there isn't any documentation. These guys did that for NES back in the 90s and early 2000s, writing little test ROMs to see what the hardware does, in addition to whatever official or unofficial developer docs they could find.