This Raspberry Pi project, created by a maker known as Breadcodes over at Reddit, is guaranteed to bring out your inner Pokémon trainer. Using our favorite microcontroller, the Raspberry Pi Pico, Breadcodes is able to sniff data that would normally be transmitted from the original link port and manipulate that data for some cool hacking. With this setup, you can trade any pokémon you want over to an original cartridge.
In the post shared to Reddit, Breadcodes demonstrates the system in action. In the demo, we see a Game Boy Advance SP connected to a breadboard using the original link port. A Pico is also attached to the breadboard and is responsible for handling the emulation side of the project. The Game Boy Advance SP can interact with the Pico as if it were a second Game Boy, making it possible to trade pokémon using the original trade functions, in this case, on a real copy of Pokémon Yellow.
According to Breadcodes, the configuration relies on two logic-level shifters, as the Game Boy uses 5V while the Pico is a 3.3V module. The system is also able to print images to an original Game Boy Printer that's connected using a Game Boy color cable. This cable is a little easier to come across than the original link cable used with the original DMG Game Boy.
In addition to creating this setup, Breadcodes is also working on developing a desktop application that can work as a user interface. This interface will allow users to set images for printing and configure pokémon for trading. The desktop app is still a work in progress and at the moment is intended for regular Pico modules, rather than Pico Ws.
To interface with the link cable, Breadcodes is using the Pico’s SPI library. This allows for basic control of the printer but gets a little more complicated when trying to operate between two Game Boys. There are a few tricks you can use to make this process a little easier, which Breadcodes explains in the project thread. If you want to read more about this project and dig into the details about how it works, check out the original thread shared to Reddit and be sure to follow Breadcodes for future updates.
One correction: I did not use the SPI library, because the GameBoy protocol has a bi-directional clock and SPI does not support that. I did use it specifically for the Printer initially, but that is the only instance where that would work and I decided to make the entire project manually implemented for consistency.