I also wrote a gameboy emulator a few years ago... But I disagree about it being fun.<p>The truth is it's rather tedious. There are 256 opcodes you will need to create. Each has certain flags you will need to check that change it's operation.<p>Some of those flags are undocumented, and several of the opcodes actually have hardware level bugs that make them act differently than the CPU document describes.<p>So after creating every opcode, you will inevitably have bugs which you need to fix.<p>After fixing those you will still not have games running because of so many undocumented/buggy opcodes, so now you need to figure out how an actual gameboy operated.<p>At this point I was only able to solve it be getting a working emulator and executing the same program on each until their states diverged.<p>I did find it interesting to learn about low level hardware, but I'd say the project is 50% reading specs, 10% interesting, and 40% tedious pain-in-the-butt.<p>I never did get sound working, and the graphics are buggy, but I think I got far enough that I learned all there was to learn.