Overview

The Gameboy Player accessory allowed Gamecube owners to play Gameboy Advance, Gameboy Color and Gameboy games via their console. It connected via the accessory port and a boot disc provided the software to allow the Gamecube to interface with it, providing control, video and audio output.

Inside the Gameboy Player

For my project I'm working with a European (UK) version. Opening up the case revealed a single PCB, shielded with metal casing. My board is marked as DOL-GBS-20. I've seen photos of boards marked DOL-GBS-01 and DOL-GBS-10 which are slightly different; for this project I'll only be describing information and modifications for the DOL-GBS-20. They may not work if repeated on other board revisions.

There are three main areas of interest on the board. At the back is the Gamecube connector/interface, at front right are various voltage regulators and lastly at front left is the CPU and ancillary components.

The CPU (marked CPU AGB A) on the bottom of the board is the same as the CPU in the original Gameboy Advance. There's a supporting SRAM chip, link port and of course the game slot.

The board naturally lacks other normal GBA components such as the screen, buttons and speaker. There also isn't a clock crystal directly connected to the CPU - more on this later.

The interface takes up the job of communicating between the Gamecube and the GBA CPU. This area is dominated by the GBS-DOL chip which on one side connects to the Gamecube port and on the other to the pins of the GBA CPU. In theory GBS-DOL emulates the screen, button and speaker circuitry, passing control inputs from the Gamecube and returning audio/visual data to be processed by the Gamecube.

Finally the power zone regulates power to the interface and GBA zones.

Options for taking the Gamecube out of the loop

There are two ways to achieving this that sprang to mind. The first is to emulate the Gamecube through the interface port with some kind of microcontroller. The second is to take GBS-DOL out of the loop as well and hook up control, audio and video circuitry directly to the GBA CPU. The latter seemed within my abilities.

Let there be light - or at least, power

The first thing I tackled was the power zone. There were test points for the various voltage lines, including the line for the interface zone and lines for the GBA zone. Analysing the board layout led me to believe the board was probably powered by 3.3V, as there were regulators for 2.5V and 5V but not 3.3V as needed by the GBA zone. Hooking up a 3.3V power supply to the board via Gamecube connector pin 1 and GND to connector pin 2 resulted in power to GBS-DOL but not the GBA zone.

After analysing the components and routing in the power zone, it appears that TP50 controls the power transistor and regulators for the GBA zone. I hooked up TP50 to 3.3V, checked the other power TPs and confirmed that the expected voltages were present - and thus the GBA zone should be 'switched on'. This means that GBS-DOL can turn just the GBA components on and off, and that I could do so too.

Test Point

Expected Voltage

Equivalent GBA voltage line

TP46

3V

VDD3

TP47

5V

VDD5

TP48

2.5V

N/A (GBS-DOL VDD)

TP49

2.5V

VDD2

TP51

3.3V

N/A (board VCC)

Clock and control

One obvious missing component from the GBA zone is the clock crystal. Instead there is a clock crystal labelled 33WKSS4BT connected to GBS-DOL. This appears to be a 33.554432MHz Kinseki crystal, which is 8x the normal GBA crystal frequency. It's likely GBS-DOL does a clock division and outputs to the GBA CPU.

TP32 is connected to CK1 on the CPU and CK2 appears to be unconnected. With power to the board, there didn't appear to be a clock signal when hooked up to a basic logic analyser. This might not be the same for other board revisions - Mogi_codemasterv needed to lift the corresponding pin on GBS-DOL to hook up an external clock and get it working. Both of us are using a clock signal generated by gbaHD (more on this later).

TP25 is connected to the CPU reset pin, which is active low and thus needs to be held high to keep it out of reset.

TP14 is an interesting one. It's connected to pin 118 on the CPU and is not well documented. On the Gameboy Advance it appears to be connected to a voltage detector on the VDD5 line and thus probably halts CPU execution when the batteries are too low to power the LCD. Mogi_codemasterv identified that connecting this test point to GND via a 125ohm resistor keeps the CPU going.

In my build, I've hooked up each of these test points (except the clock) to Arduino outputs so that I could test different combinations of control signals. To kick the GBA zone into action, the following table gives the signals needed at each of the test points. All signals are 3.3V when high and ground when low.

Test Point
Signal
TP50High
TP32Clock
TP25High
TP14Low

Audio

To do

Video

At the outset of this project I planned to use InsideGadget's AdvanceVGA, designed to add VGA output to the original GameBoy Advance.

Sometime after buying an AdvanceGBA I discovered the gbaHD project which uses a Seeedstudio Spartan Edge Accelerator to add HDMI output to a GBA/GBA SP. Not wanting to limit my options, I picked up one of these too.

After mapping out the test points, I found that not all of the CPU display pins used by the AdvanceVGA appear to be connected. Luckily all the pins needed for gbaHD are connected to test points, making this the more viable of the two video options.

I didn't fancy the idea of trying to solder wires to each the test points and also still wanted to keep the two video options open if possible. To help with this I designed some simple (ok, maybe crude) flex PCBs to solder to the test points and break out to through-hole pads for soldering wires to and used a 40 pin FPC connector breakout board to add a connector like the LCD connector on the GBA board. The AdvanceVGA already has an FPC connector (ordered with the 40 pin connector but also available with the 32 pin connector) and I wired up a second breakout board to the Spartan Edge Accelerator for maximum compatibility.

I tried the AdvanceVGA first knowing that it wasn't likely to work due to the missing connections and as expected I didn't get an output on my monitor. At this point I still didn't know if the GBA zone was actually working, so I swiftly swapped the boards over and finished connecting up the gbaHD.

I hooked it up to my TV and after having to sort out some loose power wires I finally got video output! I currently have a couple of issues though. Firstly I'm not getting any audio and it seems some people have issues with certain TVs not playing the audio. This is a compatibility issue and hopefully something that can be fixed in future gbaHD releases. I'm not too worried about this at the moment.

More importantly the video output is not being vertically centered and I need to reset the ESP32 on the Spartan board repeatedly until it appears in 'the right place'. I checked the SPS (vsync) connection between the GameBoy Player and the Spartan board, and it seems fine. The video output is usually clipped off the top edge of the screen by about 160 lines. I have delved into the world of FPGA programming to try some changes to the video timings, such as vertical sync and vertical back porch, but so far I've been unable to get it to work. I think there may be some quirk of my Philips TV that causes it not to recognise the sync commands being sent by gbaHD or that the commands are malformed in some way that my TV can't recognise. I will try to investigate further but it's getting increasingly outside my comfort zone!

Controls

I'm using the same Arduino (a 3.3V Pro Mini) to connect up a SNES Classic Mini controller. The setup is similar to that described in gbaHD except the I2C pins on the Arduino need to be connected to the controller and in the code I'm using dmadison's excellent Nintendo Extension Controller library.

Using this style of connector also opens up the use of Wii Classic and Wii Classic Pro controllers, as well as 8BitDo's receiver and compatible controllers. Heck, you could even use a Wii Nunchuck or a NES Classic Mini controller but you'd be missing out on some much needed buttons.

Rumble

To do

References and credits

Thank you to Zwenergy for creating the gbaHD project and Mogi_codemasterv for writing up useful information on his build of the gbaHD project for the GameBoy Advance and GameBoy Player.

References:

Official gbaHD repository on Github

gbaHD build information by Mogi_codemasterv

GameBoy Player on Gekkio's GameBoy hardware database

GameBoy Player on GBATEK

Endrifts GameBoy Player Player