Most chiptune hardware projects begin with a screwdriver. Getting a Nintendo handheld's sound chip into a modular rig usually means opening the case, tapping signals off the board, or replacing a cartridge with a flash cart running custom code. A new program for Music Thing Modular's Workshop Computer does it with no changes to the console at all. GBA PSG Voice, written by Andy Jenkinson (credited as [Andy] by Hackaday), loads a synthesizer into a stock Game Boy Advance over the link cable, then plays that synth from the Workshop Computer's jacks.

Hackaday covered the project on October 23, pointing out how it differs from chiptune approaches that disassemble consoles. Version 1.0.3 is available to download from the program's page on the Workshop Computer site.

How the GBA Gets Its Code: Multiboot

The trick is the Game Boy Advance's multiboot feature. As Hackaday describes it, multiboot lets code be sent over the link cable into the console's RAM, so no cartridge is needed. The program page gives the sequence: take the cartridge out, switch on the Workshop Computer first, then the GBA. The LEDs light in sequence as the software loads (about six seconds), the GBA screen goes green and the main page appears. Audio comes out of the GBA's own headphone jack, and the sound editor is on the GBA's own screen.

Because the payload sits in RAM, nothing is written to the handheld. Turn it off and it is an ordinary Game Boy Advance again. That is the main difference from the modding route.

The Wiring Is a Serial Bus Made of Pulse Jacks

The program page spells out what each jack on the Workshop Computer does, and the link-cable signals land on the module's pulse jacks:

  • Pulse 1 out drives the GBA's SC (clock) line, the master serial clock driven by the RP2040's PIO.
  • Pulse 2 out drives GBA SI (MOSI). It carries the payload upload, then the live input stream.
  • Pulse 1 in reads GBA SO (MISO) directly via PIO.

So the Workshop Computer acts as the clock master on the GBA's serial link. The same SI line handles both jobs: it boots the console and then streams performance data to it. Six front-panel LEDs show link status, upload progress, fault-code bits, whether a note is sounding, and the current edit page, according to the program page. That helps, since a failed multiboot handshake would otherwise be silent.

The Workshop_Computer GitHub repository, owned by Music Thing's Tom Whitwell, is where code for the platform is gathered. Its README points developers to starter code for Arduino, the Pico SDK, CircuitPython and MicroPython. It also points to a releases folder of working and work-in-progress program cards, which contributors claim by number through pull requests. GBA PSG Voice is program 108 on the public metadata site.

CV Mapping

On the modular side, the program page lists this I/O mapping:

  • CV 2 in: 1V/oct pitch input
  • CV 1 out: gate, at 5V while a note is sounding
  • CV 2 out: quantised pitch
  • Audio outs 1 and 2: gates from the GBA's A and B buttons

Signals go both ways. External sequencers can play the GBA through the 1V/oct input. The GBA can also act as a controller: its A and B buttons appear as gates on the audio outputs, and the quantised pitch output can drive other oscillators in the rack. The program page also describes the CV 2 out pairing as turning the setup into a quantiser for the rest of the rack. Note that audio outs 1 and 2 carry button gates here, not audio. The synth's sound comes only from the GBA's headphone jack.

An Eleven-Page Editor on the Console

The synth's settings live on the GBA's screen. Pressing START opens the editor, and SELECT plus Left/Right moves between pages. The program page lists eleven of them:

  • MEM: 16 patch slots
  • CHAN: channel settings
  • TRIG: trigger settings
  • ENV: envelopes
  • MIX: mix
  • BTN: button behaviour
  • MAP: a modulation matrix
  • ORN: ornaments (arpeggios)
  • DRUM: drum settings
  • CAL: 1V/oct tracking trim
  • SET: key and scale quantising

The CAL page is worth noting. The program page says the Workshop Computer's CV inputs are not factory calibrated, so a tracking trim on the console itself is a practical fix. The SET page's key and scale quantiser connects to the quantised pitch on CV 2 out. The page names in this list come from the program page. Where we describe a page's function beyond its name (for example "envelopes" for ENV), that is our reading of the label, not a documented parameter list. The full details are in the user manual PDF, README.md and TECHNICAL.md that the program page references.

The program's name refers to the GBA's PSG, the programmable sound generator channels the console inherited from the original Game Boy. The program page says the CV, knobs and gates play the GBA's four sound channels, that the main knob sets channel 3's level by default, and that the X and Y knobs set attack and release for both envelopes together. It does not spell out the voice allocation, so check the TECHNICAL.md file before assuming any particular voice architecture.

What It Means for Makers

This is mainly for Workshop System owners who have a Game Boy Advance in a drawer. They get a chiptune voice with CV integration without opening the console or adding a cartridge. For players who are happy using the GBA's headphone output as the audio source, it is an alternative to modding a handheld. The program page says it works with the Game Boy Advance, the GBA SP (with the SP headphone adapter) and the Analogue Pocket.

Embedded developers can also learn from it. It is a working example of driving a legacy console's serial link with RP2040 PIO: clock generation, payload upload and live data on the same line, with the editor interface running on the handheld itself.

Availability, as the sources state it: GBA PSG Voice version 1.0.3 is downloadable from the Workshop Computer program page (a 2MB download), with a user manual PDF, README.md and TECHNICAL.md. Neither source we read gives a price for the program or for Workshop Computer hardware. You need a Workshop Computer, a Game Boy Advance and a modified link cable, since the cable is wired to the pulse jacks. Per the program page, GBA pin 5 (SC) goes to Pulse Out 1 and pin 3 (SI) to Pulse Out 2, each through a 1k resistor, with pin 2 (SO) to Pulse In 1 and pin 6 to ground; pins 1 and 4 stay unconnected. The page warns not to leave out the resistors, because the pulse outputs swing to about 6V while the GBA runs at 3.3V. It also says a Game Boy Color cable is best, as it has all six wires. Hackaday notes that [Andy]'s video shows the synth playing alongside other musical hardware.

Sources