It might seem impossible, but what you’re looking at is a Sony PlayStation game being played on a Nintendo Game Boy Advance. The resolution is miserable and the GBA doesn’t have nearly enough buttons to do most 3D games justice, but it’s working. There’s even audio support, although turning it on will slow things down considerably.
How does it work? The trick is that creator [Rodrigo Alfonso] is actually emulating the PlayStation on a Raspberry Pi and simply using Nintendo’s handheld as an external display and controller. We say “simply”, but of course, it’s anything but. The GitHub page for the project goes into impressive detail on how the whole thing works, but the short version is that the video data is sent from the Linux framebuffer to a small program running on the GBA over the handheld’s serial port using SPI. In testing he was able to push 2.56 Mbps through the link, which is a decent amount of bandwidth when you’ve only got to keep a 240 × 160 screen filled.
Perhaps the best part is that you don’t even need a flash cart to try it at home. [Rodrigo] is using a trick we’ve seen in other GBA projects, where the program is actually transferred to the handheld over the link cable at boot time.
Nintendo introduced this “multiboot” feature so multiplayer games could be played between systems even if they didn’t all have a physical cartridge, but now that hackers have cracked the code, it means you can run arbitrary code on a completely unmodified console; though it does get wiped as soon as you power it off.
[Rodrigo] provides all the information and software you need to try it at home, you just need a Raspberry Pi, a Game Boy Advance, and Link Cable you don’t mind cutting up; far less hardware than is required by the similar project to run DOOM on the NES. Since he’s tied everything into the popular RetroPie frontend, we imagine it would even work when emulating earlier 2D consoles; which would be a much better fit for the GBA’s display and limited inputs.
Last year we brought word of a project from [Shyri Villar] that turned a stock Game Boy Advance into a Bluetooth controller by exploiting the system’s “multiboot” capability. The prototype hardware was a bit ungainly, but the concept was certainly promising. We’re now happy to report that the code has been ported over to the ESP32, making the project far more approachable.
To clarify, the ESP32 is now the only component required for those who want to play along at home. Just five wires connect the microcontroller to the GBA’s Link Cable connector, which is enough to transfer a small ROM over to the system and ferry user input to the Bluetooth hardware. Even if you aren’t interested in using it as a game controller, this project is an excellent example of how you can get your own code running on a completely stock GBA.
While the original version of the hardware was a scrap of perfboard dangling from the handheld’s expansion connector, reducing the part count to one meant [Shyri] was able to pack everything into a tidy enclosure. Specifically, a third party GBA to GameCube link cable. This not only provides a sleek case for the microcontroller that locks onto the handheld with spring loaded tabs, but also includes a male Link Cable connector you can salvage. It looks as though there’s a bit of plastic trimming involved to get the ESP32 to fit, but otherwise its a very clean installation.
The GBA will be 20 years old soon, but that doesn’t mean the hardware and software exploration is over. The original Game Boy is over 30, and people are still giving talks about it.
While it might not be quite as revered as its predecessor, the Game Boy Advance is arguably the peak of “classic” handheld gaming, before things got all 3D and dual screen on us. One of its best features is the so-called multiboot mode, which allows the GBA to download a program from its link port. Officially this feature was introduced so you could play multiplayer with your friends even if they didn’t have the game cartridge, but naturally it didn’t take long for hackers to realize you can use it to run arbitrary code on an unmodified system.
[Shyri Villar] has put this capability to excellent use with a plug-in board that allows a stock GBA to be used as a general purpose Bluetooth HID controller. Now you can emulate GBA games on your computer while using the real thing as your input device. Or if that’s a bit too redundant for you, then any 2D game you think could benefit from the classic Game Boy control layout.
An ATmega328P on the board initiates the multiboot sequence when the system powers up, and feeds it the GBA program that’s stored on a W25Q32 chip. Once the code is running on the GBA, it communicates with a common HC-05 Bluetooth module through the same link port. To perform this handoff, [Shyri] uses a HCF4066 switch IC to literally change the pin assignments in the connector from the SPI used to upload the ROM to the UART lines of the Bluetooth module.
With everything powered from the 3.3 V provided by the GBA’s link port, and some software niceties like the ability to store Bluetooth pairing information for subsequent device connections, this is actually a very practical gadget. The fact that you can do this on a completely stock GBA is very compelling, especially considering some of the previous Bluetooth Game Boy modifications we’ve seen. Granted the market might be somewhat limited, but with a custom PCB and a 3D printed enclosure, we could see this potentially being a popular accessory for the classic handheld. It’s not like it can be any more niche than using the GBA as a remote display for your multimeter.