What is chord?

Chord is a monophonic synth program for the original nintendo gameboy. The idea was to make something that can be played like an instrument, but with the limitations of the few buttons available. No extra accessories. No midi keyboards.

You build "chords" of five notes and play them back using the pulsewave channel, with full sound register settings control and optional arpeggiator.
Chord 1.0.6 [+]
chord 1.0.6
+ Updating timer code to work around bug in openFPGA. + Adding extra checks to preset data, to avoid loading garbage.

chord 1.0.5
+ Adding 3 channel polyphonic mode.

chord 1.0.4
+ Back to normal.

chord 1.0.4 movember
+ Adding midi sync capability. Please find instructions and software below.

chord 1.0.3 movember
+ Adding moustache logo.

chord 1.0.3
+ Tweaking buttons in edit mode. Use D-pad for navigating, a and b for setting control values. + Adding edit mode exit button combination (select and d-pad left).

chord 1.0.2
+ Improving noise levels for cartridges.

chord 1.0.1
+ patching rom header for emulator save.
+ loading save slot 0 on startup.

chord 1.0
+ original release.
If you enjoy the application please consider supporting me by either buying any of my other apps for iOS or make a small donation below. I sell my iOS apps for $1.99 and $0.99, if that helps.

You name the price!

iOS applications

humble bundle

How do I get it on my gameboy?

Chord is best enjoyed on a real gameboy. There are a few programmable cartridges out there. I did all development using ems usb 64m smart card.


Ems usb 64m smart card
Drag'n derp
ROM only 32k


Kitsch bent (US)
Nonfinite Electronics
Retro towers (UK)


GBA4ios (iOS)
My OldBoy (Android)
Goomba (Gameboy Advance)

Tiny examples

First midi clock sync test

Arpeggio test

Gameboy development kit first code tests, with e-l-s-a


Play mode

#tip: D-pad is sticky, meaning that if the right button is pressed it will only be released once all d-pad buttons are released.


1. Channel mode:
+ Monophonic or 3 channel polyphonic.
2. Left button mode:
+ Shift octave up 1 / move current chord back to start
3. Save/load:
+ 8 slots avalable for saving (press A to save/load)
4. Arpeggio:
+ External clock sync.
+ Timer: An overflow timer incremented at 4096 Hz.
+ Arpeggio mode: none, random, up and down.
+ Number of octaves.
5. Pitch sweep:
+ Sweep Time.
+ Frequency increase/decrease.
+ Nr of sweeps.
6. Sound:
+ Wave duty: (12.5%, 25%, 50% or 75%)
+ Sound length.
7. Envelope:
+ Initial envelope value.
+ Evelope direction (up,down).
+ Number of envelope sweeps.
8. Selected control:
+ Navigate with d-pad. Change values with a and b.

#tip 1: Some conrols allow notes to be played with a, b, start and select. For example to test arpeggios.
#tip 2: When editing notes d-pad up and down can still be used to shift the current chord up and down.

Polyphonic Mode

Polyphonic mode works slighlty different to monophonic mode. All notes are sustained during button presses and less settings are available, in order to match the sound across all three channels. The channels available are divided into groups to prevent root notes of a chord being discarded, by new key presses.

MIDI Clock Sync

Gameboys are ok at keeping time but sometimes you just need that perfect timing. Below are instructions on how to sync chord with an external midi clock. Also, it has been comfirmed by users that chord syncs with arudino boy set to lsdj slave mode.


The circuit proposed for syncing chord with a midi clock is very simple, all you need is a teensy 2.0, a gameboy link cable and a mini usb cable.

Teensy 2.0


Chord Midi Sync is a little program that runs on teensy interpreting the incoming midi signals and talks to the gameboy. Teensy is programmed with teensy loader.

Chord Midi Sync 1.0
Teensy Loader

Assembling the Components

This is the part where you need to cut your gameboy cable in half and expose the cables inside. You only need 3 of them for midi clock sync, the actual clock cable, 5V and ground.

You might want to find a nice box and solder the parts together for a robust product, I simply assembled mine on a breadboard. The diagram below shows what goes where.
#tip 1: The midi clock sends 24 ticks every beat. This is much less than the internal gameboy clock. The arpeggio overflow buffer therefore should also be much smaller.


Found any bugs, missing any features or just want to say hi, please contact me here.