Hey HN,
Over the past ~1.5 years, I built an open-source FPGA retro emulation handheld that can play Game Boy, Game Boy Color, and Game Boy Advance cartridges. To my knowledge, there isn't an existing open-source FPGA emulator that can play physical cartridges like this.
One of my main goals was to do all of the pieces myself, and be able to understand every component of it, so I designed my own PCB, wrote the firmware, wrote a Game Boy and Game Boy Advance emulator for the FPGA (using the Chisel HDL), and designed a 3D-printed case.
I detailed the design and development process in the linked post. It's quite long, but there are a lot of pictures and videos.
Code and design files available on GitHub: https://github.com/elipsitz/gamebub, and an overview of the architecture: https://github.com/elipsitz/gamebub/blob/handheld/docs/archi...
One cool advantage of real cartridge compatibility I hadn't really thought about is that lets you not have to think about memory mappers (I'm mostly familiar with NES's dozens of different mappers, not sure if GB carts work the same way) and other custom cartridge hardware since you're just "emulating" up to the cartridge boundary. I guess this means even crazier hardware like the camera/rumble/sewing machine would "just work" with an original cartridge without any special support right?
I guess that doesn't save too much for this though if it supports loading ROMs. For that do you still end up having to emulate all the different mappers in the FPGA?