The Yamaha CS-80, rebuilt from its circuits.
Eight voices · two synthesis lines · polyphonic touch · ribbon · ring modulator · BBD orchestra effect
An Audio Unit, VST3 and CLAP instrument by Jardim Sonoro, written in Rust with truce.
Yamaha built the CS-80 in 1977: a 100 kg, eight-voice polyphonic synthesizer in which every voice is two complete synthesizers playing at once, under a keyboard that feels how fast you strike each key and how hard you lean into it afterwards. Above the keys runs a felt ribbon that bends the whole instrument in pitch. It was never easy to own, and it was never replaced: the sound of Vangelis's Blade Runner, and of countless records from Toto to Michael Jackson, is the sound of this circuit.
BladeRunner80 is not a "CS-80-inspired" synthesizer. It is a study of the original electronics, stage by stage, taken from the Yamaha service manual and from the people who have measured real units, and then run as a model of those circuits.
Every voice of the CS-80 is a pair of M boards. This is the path a note takes on one of them, and what each part does to the sound:
IG00153 VCO ─► IG00158 waveshaper ─┬─ saw ─┐
├─ pulse┼─ + zener noise ─► IG00156 HPF ─► IG00156 LPF ─► VCF LEVEL ─┐
└─ sine ─────────────────────────────────────────────────► SINE ─────┤
IG00151 LEVEL VCA (level + touch + sub osc) ◄─────────┘
IG00151 envelope VCA (IG00159) ─► out
IG00152 filter envelope ─► both filters (the LPF moves 2.1× as far as the HPF)
The oscillator is linear, not exponential. The IG00153 is a Hz-per-volt relaxation oscillator: the keyboard's resistor ladder produces exponential voltages, the chip turns them into frequency in a straight line. Vibrato, the initial pitch bend and the ribbon therefore act on frequency proportionally, and the ribbon can drag a note all the way down to a slow flutter at 0 Hz, as the real one does.
Each cycle starts with a 30 µs pulse. The chip resets its capacitor with a one-shot and lets that pulse show through, so every waveform carries a small pedestal. At the top of the keyboard the pedestal is a quarter of the period: part of why high CS-80 notes sound the way they do.
The fifths are just. The 5⅓' and 2⅔' feet are made by putting two resistors in parallel, which gives an exact 3:2, not an equal-tempered fifth.
The sine bypasses the filters. The waveshaper derives a sine from a sliced triangle and sends it straight to its own VCA, so the fundamental can be kept while the filters sculpt everything above it.
Two filters in series, and they cannot scream. The IG00156 is a state-variable filter whose resonance comes from reducing damping, not from feedback. Following Jürgen Haible's analysis of the circuit, BladeRunner80 solves it component by component: a 4.7 MΩ resistor across each integrator keeps the cutoff from falling below about 22 Hz; 1.2 MΩ across the damping cell caps the Q near 5, so the filter never self-oscillates and its peak compresses instead of whistling; 180 pF across that resistor softens the resonance as the cutoff rises. The high-pass feeds the low-pass, and touch, brilliance and the sub oscillator move the low-pass three times as far as the high-pass, so playing harder widens the band rather than just shifting it.
Envelopes that bend. The IG00152 and IG00159 charge a capacitor through a transconductance amplifier. At the start of every decay and release they briefly run five times faster, then continue gently: a fast fall followed by a long tail. The filter envelope travels from a negative initial level up to the attack level, settles at zero and falls back below it on release.
The keyboard remembers how you played. Velocity is held on a capacitor that discharges over about three seconds, so a hard strike stays brighter and louder for a while. The initial pitch bend is the same signal differentiated: it starts the note below pitch and lets it rise in a tenth of a second. After-touch is smoothed and applied per voice.
Eight voices, no stealing. The KAS key assigner keeps its voices in a queue and gives a new key the first idle one. With eight keys down, a ninth is simply ignored. Glissando steps through semitones on its own clock, and portamento is that staircase smoothed by an RC network.
After the voices. The two lines are mixed (not with a plain cross-fader) and pass through a ring modulator built on a µA796 Gilbert cell, whose carrier speed is swept by its own attack/decay envelope; then an expression and wah stage driven by LED/LDR photocouplers, with their slow optical lag; then the orchestra effect, an MN3001 bucket-brigade delay whose two outputs are panned left and right by four VCAs and two LFOs that never stay in step.
No two units alike. Each of the sixteen M boards gets its own tolerances — pitch, filter rank, Q, envelope timing, gain — plus slow thermal drift and a little mains hum, seeded by a Unit Serial number. Change the serial and you are playing a different CS-80; set Analog to zero for an ideal one.
- The Yamaha CS-80 service manual (S/#1001~): the overall block diagram
and schematic, every board, and the datasheet pages of the custom IG chips.
The full scans are in
CS80_Service_Manual/(from the therogoffs.com/cs80 archive). - The 22 factory tones are read, not imagined. Each tone-selector preset is a column of resistors on the T51–T54 boards; every resistor sets one of 26 parameters. All 572 cells were transcribed, including the late production changes marked on the drawings.
- Jürgen Haible, Analyzing the CS-80 VCF (2001): the filter topology and its built-in limits.
- Joachim Milson, CS-80 Interactive Diagram: board-by-board analysis with measurements on a working CS-80 — voice-assignment rules, the VCO pulse, envelope bend, 80 % filter tracking, LFO ranges, keyboard-scaling curves, touch-signal shapes.
- Scott Rider (Old Crow): oscilloscope work on the IG00153.
- The CS-80 owner's manual: control ranges, portamento and sustain times, chorus and tremolo speeds, ring-modulator behaviour.
Where the documentation stops, the choice is written down. The absolute scale of the filter levers is not in the manual, so it was calibrated so that the 22 factory tones — whose values are exact — come out balanced the way Yamaha voiced them. That and the few other estimates (OTA headroom, ring-modulator range, BBD clock) are listed in docs/HARDWARE.md, each isolated in one constant, ready to be corrected against a real instrument.
- Factory — the 22 tone-selector presets, String 1 to Funky 4, exactly as wired on T51–T54.
- Classics — reconstructions in the style of famous CS-80 records: Blade Runner (Blues lead, Main Titles, Tears in Rain, Love Theme pads, chimes), Chariots of Fire, Vangelis's Flute + Bass pairing, Toto's Africa, Billie Jean, Wonderful Christmastime, Mr Crowley, Don Airey's horn. No original settings were ever published; these follow what is documented about how the sounds were made. Vangelis played through a Lexicon 224 — put a long hall reverb after the plug-in.
- Performance — whole-panel patches using both lines, touch and effects.
When a channel plays a factory tone, the CS-80 ignores that row of levers; the editor shows the tone's own lever positions as outlines, and EDIT ON PANEL copies them onto the levers so you can start from there.
| MIDI | CS-80 |
|---|---|
| Velocity | Initial touch: brilliance, level, pitch bend |
| Polyphonic after-touch / channel pressure | After touch, per voice: brilliance, level, vibrato, sub-oscillator speed |
| Pitch bend | The ribbon (linear in Hz), or semitones — in Settings |
| CC 1 | Extra vibrato |
| CC 11 | Foot controller for EXP / EXP-WAH |
| CC 64 | Sustain foot switch (with its assigner on), otherwise a hold pedal |
| CC 65 | Portamento/glissando foot switch |
The on-screen slide controller behaves like the ribbon: touching it does nothing, sliding right raises the pitch by up to an octave, sliding left lowers it toward silence, letting go returns to centre.
- Download
BladeRunner80-macOS-arm64.zipfrom Releases and unzip it. - Copy the formats your DAW uses:
BladeRunner80.component→~/Library/Audio/Plug-Ins/Components/(Logic, Ableton Live, GarageBand)BladeRunner80.vst3→~/Library/Audio/Plug-Ins/VST3/(Ableton Live, Cubase, Studio One, Reaper)BladeRunner80.clap→~/Library/Audio/Plug-Ins/CLAP/(Bitwig, Reaper)
- The bundles are ad-hoc signed, not notarized. Clear the download
quarantine once:
cd ~/Library/Audio/Plug-Ins xattr -dr com.apple.quarantine Components/BladeRunner80.component VST3/BladeRunner80.vst3 CLAP/BladeRunner80.clap
- Optional, for VST3 hosts: copy the
Presetsfolder contents to~/Library/Audio/Presets/Jardim Sonoro/BladeRunner80/. The AU and CLAP bundles carry the presets inside. - Rescan plug-ins in your DAW: Jardim Sonoro › BladeRunner80.
cargo install cargo-truce
cargo truce install --au2 # build + install the Audio Unit
cargo truce install # or every format (AU, VST3, CLAP)
cargo truce run # standalone app
cargo test --release # DSP and plugin tests
cargo run --release --example render # render the factory tones to renders/Validation: auval passes; clap-validator passes 35 of 38 (the three
state-reproducibility failures come from the framework's CLAP wrapper and
also show on truce's own example synth). CPU: about 10 % of one Apple Silicon core with
all eight voices and both lines sounding at 2× oversampling.
| Path | What lives there |
|---|---|
src/dsp/osc.rs |
IG00153 VCO and IG00158 waveshaper |
src/dsp/vcf.rs |
IG00156 filter, component-level |
src/dsp/eg.rs |
IG00152 / IG00159 envelopes |
src/dsp/kas.rs |
Key assigner, glide, sample & holds |
src/dsp/voice.rs |
M board, touch, keyboard scaling |
src/dsp/presets.rs |
T51–T54 resistor matrices |
src/dsp/effects.rs |
Ring modulator, EXP/WAH, orchestra effect, output |
src/ui/ |
The editor |
docs/HARDWARE.md |
Every source, derivation and estimate |
Circuit knowledge: Yamaha's CS-80 service and owner's manuals; Jürgen Haible; Joachim Milson; Scott Rider. Framework: truce (MIT/Apache-2.0). Yamaha and CS-80 are trademarks of Yamaha Corporation; artist and film names are used only to describe the style of a preset. BladeRunner80 is an independent, non-commercial study and is not affiliated with Yamaha or with any of the artists mentioned.
Free software under the GNU General Public License v3.0 or later: use it, study it, change it and share it, as long as what you share stays free too.
