A list of Game Boy development resources
github.com
github.com
If you were to send this talk to someone, with basically just the videe they could likely build a faithful Gameboy clone. It's so dense, easy to understand, and comprehensive.
I'll listen to it form time to time and think about all the cool tricks it reveals. Super impressive to have that much knowledge for a system that only had a couple thousand programs ever written for it.
Released for it. Officially.
During the further work I needed more details (list of CPU opcodes, timing of the IRQs, a list of audio and timer bugs, etc.), but the list links to all required resources - as far as I know this is everything we know about the Game Boy at the moment. It doesn't mean the console is fully reverse-engineered - especially the STAT IRQ timings is still very hard to get right.
Particularly interesting link is the "Pan Docs", moved and updated in the gbdev wiki [2]. Maybe it's not the best place to get the general information about the hardware, but it provides a lot of specifics.
[1] https://github.com/trekawek/coffee-gb [2] http://gbdev.gg8.se/wiki/articles/Pan_Docs
Probably would require some effort to get it to build again, but it was a fun, if a little intense programming project.
The architecture is very approachable, although I never got the sound working.
There's no greater feeling of toiling away for months on the CPU/GPU/MMU code where you eventually reach the point where you can successfully boot the emulator into rendering the "Nintendo" logo that scrolls down the screen.
One of the most formative events for me as a programmer was playing with the gameshark on ps1. It had a debugger where you could press a button on the device and it would halt the system. Then you could search through the memory and alter values. Realizing that everything you saw and did, everything about the state of the entire game world was just numbers in memory was mind blowing. It instantly broke the illusion, but what it was replaced with was even more magical.
I realized that I could do things like set the health bar, or number of lives to a fixed value. I could change the height of the character and "fly" around. I could do anything, as long as I could figure out how it was represented in ram.
It was a pretty big deal to 10-year old me. A few days later I was using a computer and it dawned on me that the same thing applied to the computer I was using at school.