Synchronisation with other gear

Running a chip tracker in lockstep with another Game Boy, a drum machine, a DAW or a modular. Both focus trackers support it natively.

LSDj#

Set SYNC in the project screen (source: s-lsdj-manual):

modehow
LSDJtwo Game Boys on a Nintendo Game Link cable, both set to LSDJ. START on one makes it LEAD, the other shows SYNC (WAIT in live mode until a phrase start). Copying groove/chain/phrase/instrument/table/wave/synth data on one Game Boy transfers it to the other's clipboard while stopped. To switch lead while playing: follower to OFF, stop the lead, follower back to LSDJ.
MIDIneeds a MIDI-to-Game Boy sync cable (build instructions on littlesounddj.com); START waits for incoming MIDI clock.
ANALOG INa spliced link cable + 3.5 mm plug (GND↔GND, CLK↔CLK) from a synth's SYNC OUT (tested with Korg Volca; Monotribe TICKS/STEP = 6, Volca = C).
ANALOG OUTLSDj sends the clock (different wiring) into the synth's SYNC IN.
KEYBDa PS/2 keyboard adapter turns the Game Boy into a piano (calibrate via PS/2 DELAY; F1/F2 octave, F3/F4 instrument, F5/F6 custom table on SPACE, F8 pulse channel routing, F9–F12 mutes).

Always use grooves based on 6 ticks per step when synced, or the speed is wrong; a following LSDj can nudge its tempo with A+LEFT/RIGHT on TEMPO if gear drifts. Double-check cable pins with a multimeter — "the diagrams are looking at the cable, not from it".

Forum knowledge (source: s-chipmusic-lsdj-faq): two Game Boys sync even if one is underclocked — make the normal one the master and the underclocked one plays at the same BPM an octave lower (Kedromelon), or make the underclocked one the master at twice the tempo (254 against 127; Jansaw). little-scale confirms the master direction from the other side — "You can sync your normal Game Boy as slave from your underclocked Game Boy as master" — and adds the caveat the forum leaves out: the sub-octave is only in tune if the crystal is exactly halved (2.097152 MHz) or the ROM's pitch table has been rebuilt for twice the fitted clock; a common 2 MHz crystal lands nearly a semitone past the octave (source: s-little-scale-underclocking-and-retuning; rom-retuning, game-boy). With a variable-speed knob on the master, the knob changes the master's pitch and tempo but only the slave's tempo; on the slave it changes only the slave's pitch (nickmaynard). A MIDI keyboard through an MC2 only sounds while the sequencer runs and is quantised to the step — use the smallest groove and a high tempo (aphasia). The PS/2 keyboard adapter uses the DMG-07 cable: brown +5 V, red serial out, yellow serial in, green clock out, blue ground (nordloef, quoting the LSDj wiki).

LSDj and nanoloop both sync over the Nintendo link connector, but they listen on different pins, which is why a sync box can support one and not the other (source: s-little-scale-arduino-gameboy-sync-boxes):

programpin drivennotes
lsdj slaveSC (serial clock)with a 22k–100k pull-down from SC to ground; GND, SI and SO all tied to the sender's ground
nanoloop 1.x slaveSI (serial in)ground to ground, nothing else; 2.x needs a series resistor on SI
lsdj masterSC, as an output32 clock transitions per sixteenth-note step — a 4040 counter tapped at Q5 gives one pulse per step (source: s-little-scale-syncing-things-to-lsdj; the ratio is read off the schematic, not stated)

The plug, viewed at the cable, is 6 4 2 over 5 3 1 (source: s-little-scale-teensy-usb-midi-sync):

pinnamewire
1VDD35no wire in the cable
2SO — data outred
3SI — data inorange
4SD — flow controlbrown
5SC — serial clockgreen
6GNDblue

Two colours disagree with the DMG-07 figures further up this page (nordloef: brown +5 V, yellow serial in); red = serial out, green = clock and blue = ground agree in both. Different cables and manufacturers, and neither source corrects the other — check with a multimeter before you cut. Pin 1 carries no wire in this plug, so a circuit that expects 5 V from the link cable has to be powered from inside the Game Boy instead — a documented cause of $1 sync boxes not working (source: s-little-scale-1-dollar-nanoloop-sync).

Rates: Nanoloop wants 12 ppqn where MIDI beat clock is 24, so a MIDI→Nanoloop box halves (source: s-little-scale-arduino-gameboy-sync-boxes). DIN sync 24 is 24 ppqn of positive pulses plus a separate run/stop line at 5 V / 0 V; little-scale's Teensy firmware emits a 3 ms pulse regardless of BPM (source: s-little-scale-teensy-usb-midi-sync).

Driving LSDj from a DAW, step by step#

Written down once, on the 2008 sync box built for the 8BC user Dexter (source: s-little-scale-arduino-gameboy-sync-boxes):

  1. Set the DAW to send beat clock — in Ableton Live, the MIDI output's Sync switch.
  2. In LSDj, set SYNC to slave in the project screen.
  3. Select the position in the song to start from, press START — LSDj shows WAIT.
  4. Start the DAW. LSDj follows, and follows tempo changes live.
  5. On stop, LSDj does not resume where it stopped: reselect the position and press START again before restarting the clock.

On a DMG, external MIDI clock is usable "from around 35 to over 200 beats per minute" (source: s-little-scale-arduino-gameboy-sync-boxes).

The 2008 device landscape#

little-scale's October 2008 census counted eighteen devices, peer-reviewed in its comments by nitro2k01; the full chart is transcribed in s-little-scale-sync-options-for-game-boys. The shape of it:

  • Passive, Game-Boy-to-Game-Boy only: the Nintendo link cable (2 machines), Delfy's Six Way Box (6), Low-Gain's 1x3 DMG-07 mod (one master in, three slave outs, daisy-chainable — the way to multiply a one-output MIDI box).
  • MIDI clock in: gwEm's DIY interface and little-scale's $1 4017 circuit, both microcontroller-free and both broken by any MIDI message that is not clock; the Official LSDJ Sync (discontinued by 2008); Firestarter's LSDJMC2 (premade, MIDI thru, LSDj keyboard notes); Trash80's Arduinoboy, the only device in the chart with MIDI in and out and thru; little-scale's syncThing (6 × LSDj + 6 × Nanoloop) and Sync Tank (15 Game Boys).
  • Clock out: Gijs' Master Clock Generator, which generates rather than follows — 4 × LSDj, 3 × Nanoloop, 2 × MIDI and 2 × Sync24 from a tempo pot.
  • Not sync at all, but on the same connector: the PS/2 keyboard adaptor, Vawter and Whitman's Pushpin (full MIDI control of the sound chip, Game Boy Color only) and Trash80's mGB.

If both ends are Game Boys you need a cable, not a box; every other device exists to get something that is not a Game Boy into the chain.

Making the Game Boy the master#

LSDj in master mode puts a clock on SC that plain CMOS logic can divide, with no microcontroller and no MIDI: little-scale drove an LED on odd sixteenths from a 4040 + 4017 pair, then used the same pulse to clock a step sequencer running a C64 filter (source: s-little-scale-syncing-things-to-lsdj). A 4040 exposes every power-of-two subdivision at once, so the tempo division is a choice of pin. This is the rarer direction and people ask for it — "I've been looking everywhere for something like this (lsdj master not slave)".

And the opposite: deliberate drift#

Sync is not always the goal. little-scale's earliest post in the wiki (2006-03-17) describes three grey Game Boys with their start buttons hardwired to one switch and no link cable at all: they begin together and "eventually they will drift, causing an unsyncing… a glitch of sorts". The piece is the divergence. He is careful to separate it from a fault — "LSDJ syncs very nicely to another LSDJ. The timing is great" (source: s-little-scale-syncing-things-to-lsdj). See live-tracking.

SID-Wizard#

Generates MIDI beat-clock, start and stop on MIDI devices that have an output, so other sequencers can be synchronised to the C64; MIDI-in supports Stop/Start/Reset, notes, pitch wheel, mod wheel, aftertouch, program change, brightness and volume (source: s-sid-wizard-manual).

MIDI-in details (SID-Wizard book)#

Interfaces: HerMIDI (Hermit's own, on the serial port, daisy-chainable behind a drive or SD2IEC — the only one that avoids the $DE00–$DFFF cartridge clash), Sequential Circuits, Passport/Syntech, JMS/Datel/Siel/CLAB, NameSoft, Maplin, Moog Song Producer; select the device and channel in the menu (: = OK, ! = problem; Shift+RETURN disables).

MIDI messageeffect
note on/offnotes
pitch wheel±2 semitones
mod wheel (CC 1), aftertouchvibrato (aftertouch in mono mode on the cursor channel)
brightness (CC 74)shifts the cutoff hi-byte like big-FX $1C while the filter program runs
volume (CC 7)channel volume
program changeinstrument
start / stop / continueplay from start / stop / continue

C=+D toggles monophonic+legato vs polyphonic jamming (all three voices); sustain 8 in an instrument's ADSR enables velocity; MIDI IRQs cause harmless border flashing (source: s-witchmaster-creating-chiptunes-with-sid-wizard).

MIDI sync IN: sid-wizard-vessel (m64's fork)#

Stock SID-Wizard sends clock but does not follow one. sid-wizard-vessel (SID-Wizard 1.8.7 on anarkiwi's Vessel interface) adds it: in sync mode Vessel triggers NMIs on CIA2's /FLAG for MIDI start/stop/sync, playback runs in the NMI (tune tempo must be 06), and the tracker waits armed until the MIDI gear's START — with live-act controls on top: orderlist repositioning that lets the running pattern finish, F3/F1 pattern hold/continue with oscilloscope colour feedback, channel mutes (live-tracking; source: s-sid-wizard-vessel-readme).

defMON: the C64 as sync master#

defMON drives external gear from the C64 user port through Scannerboy's sync adapter (2015, 36 EUR, sources on GitHub): LSDj sync, Nanoloop sync, MIDI clock, DIN sync, and an analogue clock adjustable from 24 to 2 ppqn for Volcas, Pocket Operators and modulars. It sends clock and start/stop only — no note data. The protocol is two bits of $DD01: PLAY (bit

  1. high while running, SYNC (bit 3) pulsed once per clock, six pulses per two

sequence steps — which locks synced tunes to 6 ticks per 2 steps (3+3 or 4+2); tempo is then changed via the player-call rate, not the speed columns. A DIN-sync delay parameter (CTRL+SHIFT+./,, saved with the tune) trims the first-pulse timing: $04 is the recommended start, and goto80 found $05 optimal against a TR-808 (source: s-defmon-wiki-sync-and-stereo).

Beyond the adapter: defSYNC starts two C64s running defMON in lockstep over a plain serial drive cable (CTRL+F1/F3; back since the 2020-10-08 release), and CTRL+F5/F7 nudges a playing tune one tick back/forward to beat-match live — goto80: "to stay in sync with your local brass band" (sources: s-defmon-wiki-releases, s-goto80-site-defmon-posts). The adapter is not defMON-only: MARiO64 = m64 (identity confirmed by m64, 2026-08-30) — made a user-port sync mod of sid-wizard 1.7 that speaks the same protocol (2020-10-28; his later MIDI-side successor is sid-wizard-vessel), and martin_demsky ran defMON in MIDI sync with a Behringer TD-3 (source: s-chipmusic-defmon-thread).

Syncing visuals to the music: DUET's event ring and markers#

The other direction of sync — code following the tracker. duet's engine library stamps every dispatch (row entered, note on/off, effect, order change) with the exact output-clock frame of its tick into an event ring a demo or game drains once per video frame; polling a position only says where the transport was at the end of the last buffer, and a row can start anywhere inside one. On top of the rows, sync markers — inaudible points with a 16-bit value, placed on the grid with ALT+G, stored only in the project file so no .it player can lose them — mark the author's chosen moments: "a demo syncs on the rows' frames … and reads the markers for the moments the song's author placed by hand; a game reads only the markers." Comparing a marker's frame with the output clock of the audio already handed to the device "is what makes the picture land on the beat rather than a buffer late" (source: s-duet-docs-libduet).

MIDI into a SID player: the hard-restart dilemma (Walleij)#

linus-walleij wrote MIDIslave, a MIDI program for the C64, and his player notes explain why a live MIDI-driven sid cannot sound like a tracked one: hard-restart needs the player to "see into the future" two frames before an attack, which a MIDI note-on cannot provide — "you don't just know what is gonna happen in 1/50 second from now". The SIDstation's two answers: hard-restart every voice on key press (every note arrives a frame late) or on key release (the release phase is lost). His pseudo-code maps MIDI to the chip: pitch from a note table, pitch wheel added to the frequency, the mod wheel as vibrato amplitude or period, a wheel on the filter cutoff "for a TB303-like-effect", and channel allocation among three voices with optional FIFO note stealing (source: s-walleij-sid-player-routine). SID-Wizard's own MIDI-in (above) is the tracker-side counterpart.

PC trackers: the missing direction (1998)#

Impulse Tracker could drive MIDI gear (midi-in-trackers) but not follow it: mental-floss's wish list of February 1998 asked for "the ability to syncronize/start IT by MIDI", so that a module could be mastered on a 64-channel console by playing each isolated sample from beginning to end in sync (source: s-tw119-interview-mental-floss).

lsdj · nanoloop · sid-wizard · sid-wizard-vessel · defmon · goto80 · game-boy · rom-retuning · shuffle-funktempo · hard-restart · sid-player-routine · linus-walleij · midi-in-trackers · impulse-tracker · live-tracking

Sources#

s-lsdj-manual · s-sid-wizard-manual · s-witchmaster-creating-chiptunes-with-sid-wizard · s-chipmusic-lsdj-faq · s-walleij-sid-player-routine · s-tw119-interview-mental-floss · s-defmon-wiki-sync-and-stereo · s-defmon-wiki-releases · s-chipmusic-defmon-thread · s-goto80-site-defmon-posts · s-sid-wizard-vessel-readme · s-duet-docs-libduet · s-little-scale-underclocking-and-retuning · s-little-scale-sync-options-for-game-boys · s-little-scale-arduino-gameboy-sync-boxes · s-little-scale-teensy-usb-midi-sync · s-little-scale-1-dollar-nanoloop-sync · s-little-scale-syncing-things-to-lsdj

source file wiki/concepts/sync.md · graph