Gamers have enjoyed the fruits of emulation for decades. Though I grew up with the NES and SNES, I actually discovered Chrono Trigger first by playing it as a ROM on my desktop computer as a teenager before getting a cartridge. There are many products on the market that are essentially hardware running a software emulation of classic systems. I sidestepped those costs by being one of those obnoxious people who set up RetroPie on a Raspberry PI over a decade ago, complete with 3D-printed case meant to look like a US SNES. I still use this to this day and so do my kids.

There is another approach to playing old games on new hardware (other than porting) and that’s using FPGAs (field programmable gate arrays) to replicate the same exact circuitry of the original system instead of running software emulation on a general-purpose OS. This is the approach used by nice but expensive products such as the Analogue Pocket.
Now there’s a cool open source project, Game Bub that can play GBA, GB and GBC games with a host of cool features. As its author, Lipsitz describes:
Game Bub can play physical cartridges, as well as emulated cartridges using ROM files loaded from a microSD card. Game Bub also supports the Game Link Cable in both GB and GBA modes for multiplayer games. I designed the hardware with a number of bonus features, like video out (HDMI) via a custom dock, a rumble motor, real-time clock (for certain games). Additionally, the hardware is designed with extensibility in mind, allowing future software improvements to expand its capabilities.
Game Bub has a custom-designed 6 layer PCB featuring a Xilinx XC7A100T FPGA with integrated memory, display, speakers, rechargable battery, GB/GBA cartridge slot, all packaged up in a custom 3D-printed enclosure.
You can also check out the video here:
The evolution of the prototypes can be seen in this photo of three side-by-side from old to new:

I would love to get my hand on one of these but I might just wait to see what cool enhancements the open source/open hardware community comes up with first!