Skip to content

About

Yamaha CS-80 rebuilt from its circuits: an AU/VST3/CLAP instrument in Rust (truce), modelled chip by chip from the service manual.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

BladeRunner80

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.

BladeRunner80


The instrument

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.

The sound lineage

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.

How it was researched

  • 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.

Presets

  • 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.

Playing it

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.

Install (macOS, Apple Silicon)

  1. Download BladeRunner80-macOS-arm64.zip from Releases and unzip it.
  2. 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)
  3. 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
  4. Optional, for VST3 hosts: copy the Presets folder contents to ~/Library/Audio/Presets/Jardim Sonoro/BladeRunner80/. The AU and CLAP bundles carry the presets inside.
  5. Rescan plug-ins in your DAW: Jardim Sonoro › BladeRunner80.

Build from source

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

Credits

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.

License

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.

About

Yamaha CS-80 rebuilt from its circuits: an AU/VST3/CLAP instrument in Rust (truce), modelled chip by chip from the service manual.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages