New instruments: Yamaha's CS family (CS-5, 10, 15, 30, 50, 60, 80) #23

Closed
opened 2026-10-12 03:07:01 +00:00 by bcox · 4 comments
Owner

Yamaha's CS synthesizers as a new instrument or several: the CS-5, CS-10, CS-15, CS-30, CS-50, CS-60 and CS-80. Not started.

Everything below is from recollection, with nothing read, and the smaller models are the part least sure. Find and read Yamaha's owner's and service manuals before designing anything, and put them in docs/references.md.

The instruments, as recalled

  • CS-5 (1978) and CS-10 (1977). One voice, one VCO (sawtooth, square, pulse with modulation), noise, an input for outside sound. A two-pole filter that is low-pass, band-pass or high-pass, with resonance. The CS-5 has one envelope; the CS-10 has one for the filter and one for the amplifier.
  • CS-15 (1978). One voice of two channels: two VCOs, two of those filters, two envelopes and two amplifiers, which can be arranged so that the two channels are two sounds or one.
  • CS-30 (1977). One voice: two VCOs, two filters, two amplifiers, three envelopes, a ring modulator and an analog sequencer of eight steps, with a good many switches for what feeds what.
  • CS-50 (1977). Four voices, one VCO a voice, preset tones and a panel, a ring modulator, a sub oscillator (Yamaha's name for the LFO).
  • CS-60 (1977), which the owner added on 2026-10-11: eight voices of the same single-VCO kind, with one memory and a ribbon.
  • CS-80 (1977). Eight voices of two channels each, so sixteen of everything. A channel is a VCO (sawtooth, square with pulse width modulation by an LFO of its own, noise), a high-pass and then a low-pass, both two-pole and both with resonance, a sine added after the filters, a filter envelope (initial level, attack level, attack, decay, release) and an ADSR for the amplifier. The two channels are detuned against each other. A ring modulator with an envelope of its own, a sub oscillator in several shapes, a chorus and tremolo, a ribbon for pitch. Velocity and polyphonic aftertouch, each routed to the pitch, the brightness and the level; key scaling of brightness and level across the keyboard. Preset tones and four memories that are small copies of the panel.

To settle with the owner first

  • How many instruments. The single-channel voice (CS-5, CS-10, CS-50, CS-60) and the two-channel voice (CS-15, CS-80) could be one instrument: build a channel, give a voice one or two, and put N voices together, as the SEM family is a SEM and N of them. The CS-30 has more inside than either and may not fit.
  • Its name, and its programs' names.

What it needs that is not here yet

  • Polyphonic aftertouch. engine/midi.h passes channel pressure; check whether key pressure reaches an instrument at all. The owner's keyboard, a CME Xkey, sends it.
  • A high-pass and a low-pass in a row, both resonant. engine/state_variable_filter.h is two poles with all three outputs and could be each of them.
  • The CS-80's filter envelope, whose levels are set as offsets and which is not an ADSR. engine/envelope.h may reach it by its six stages.
  • A sine after the filters, in step with the VCO.
  • A ring modulator after the voices, which #6 wants for the shared effects, and a ribbon, which over MIDI is the bender with a longer reach.
  • Key scaling of brightness and level, low keys against high.
  • The CS-30's sequencer, with #2, #3 and #5.

What is already here to build on

  • engine/analog_vco.h or engine/analog_oscillator.h, engine/state_variable_filter.h, engine/noise.h.
  • The SEM family's way of making one instrument from a voice and N of it, its two sides with effects each, and engine/variance.h: the CS-80's voices are known for not being alike.
  • engine/key_assign.h, engine/portamento.h, the shared arpeggiator and effects, and #17 for the small ones' outside input.
  • instruments/README.md says what an instrument must provide.

Provenance

  • Rule 3: no firmware disassembly and nothing extracted from a ROM. Timings and curves come from the manuals or from measuring a real instrument's audio, or are placeholders.
  • Rule 4: no factory patches. Reading a user's own dump at run time is allowed.
  • Rule 2: emulations exist. None's code may be read for more than how a problem is structured, and nothing lifted.
  • The names are trademarks, which matters for the programs' names and anything sold.
Yamaha's CS synthesizers as a new instrument or several: the CS-5, CS-10, CS-15, CS-30, CS-50, CS-60 and CS-80. Not started. Everything below is from recollection, with nothing read, and the smaller models are the part least sure. **Find and read Yamaha's owner's and service manuals before designing anything**, and put them in `docs/references.md`. ## The instruments, as recalled - **CS-5** (1978) and **CS-10** (1977). One voice, one VCO (sawtooth, square, pulse with modulation), noise, an input for outside sound. A two-pole filter that is low-pass, band-pass or high-pass, with resonance. The CS-5 has one envelope; the CS-10 has one for the filter and one for the amplifier. - **CS-15** (1978). One voice of two channels: two VCOs, two of those filters, two envelopes and two amplifiers, which can be arranged so that the two channels are two sounds or one. - **CS-30** (1977). One voice: two VCOs, two filters, two amplifiers, three envelopes, a ring modulator and an analog sequencer of eight steps, with a good many switches for what feeds what. - **CS-50** (1977). Four voices, one VCO a voice, preset tones and a panel, a ring modulator, a sub oscillator (Yamaha's name for the LFO). - **CS-60** (1977), which the owner added on 2026-10-11: eight voices of the same single-VCO kind, with one memory and a ribbon. - **CS-80** (1977). Eight voices of two channels each, so sixteen of everything. A channel is a VCO (sawtooth, square with pulse width modulation by an LFO of its own, noise), a high-pass and then a low-pass, both two-pole and both with resonance, a sine added after the filters, a filter envelope (initial level, attack level, attack, decay, release) and an ADSR for the amplifier. The two channels are detuned against each other. A ring modulator with an envelope of its own, a sub oscillator in several shapes, a chorus and tremolo, a ribbon for pitch. Velocity and polyphonic aftertouch, each routed to the pitch, the brightness and the level; key scaling of brightness and level across the keyboard. Preset tones and four memories that are small copies of the panel. ## To settle with the owner first - **How many instruments.** The single-channel voice (CS-5, CS-10, CS-50, CS-60) and the two-channel voice (CS-15, CS-80) could be one instrument: build a channel, give a voice one or two, and put N voices together, as the SEM family is a SEM and N of them. The CS-30 has more inside than either and may not fit. - **Its name**, and its programs' names. ## What it needs that is not here yet - **Polyphonic aftertouch.** `engine/midi.h` passes channel pressure; check whether key pressure reaches an instrument at all. The owner's keyboard, a CME Xkey, sends it. - **A high-pass and a low-pass in a row, both resonant.** `engine/state_variable_filter.h` is two poles with all three outputs and could be each of them. - **The CS-80's filter envelope**, whose levels are set as offsets and which is not an ADSR. `engine/envelope.h` may reach it by its six stages. - **A sine after the filters**, in step with the VCO. - **A ring modulator after the voices**, which #6 wants for the shared effects, and a ribbon, which over MIDI is the bender with a longer reach. - **Key scaling** of brightness and level, low keys against high. - **The CS-30's sequencer**, with #2, #3 and #5. ## What is already here to build on - `engine/analog_vco.h` or `engine/analog_oscillator.h`, `engine/state_variable_filter.h`, `engine/noise.h`. - The SEM family's way of making one instrument from a voice and N of it, its two sides with effects each, and `engine/variance.h`: the CS-80's voices are known for not being alike. - `engine/key_assign.h`, `engine/portamento.h`, the shared arpeggiator and effects, and #17 for the small ones' outside input. - `instruments/README.md` says what an instrument must provide. ## Provenance - Rule 3: no firmware disassembly and nothing extracted from a ROM. Timings and curves come from the manuals or from measuring a real instrument's audio, or are placeholders. - Rule 4: no factory patches. Reading a user's own dump at run time is allowed. - Rule 2: emulations exist. None's code may be read for more than how a problem is structured, and nothing lifted. - The names are trademarks, which matters for the programs' names and anything sold.
bcox changed title from New instruments: Yamaha's CS family (CS-5, 10, 15, 30, 50, 80) to New instruments: Yamaha's CS family (CS-5, 10, 15, 30, 50, 60, 80) 2026-10-12 03:19:01 +00:00
Author
Owner

The first wave is built on branch minics, by Ben's decisions of 2026-10-15: the CS-5, CS-10, CS-50 and CS-60 as one instrument, mini-CS (minics, .mcs, port 8815), with no model switch.

  • Read for it: the owner's manuals of all four and the CS-10's service manual (in docs/references.md). No service manual was found for the CS-5, CS-50 or CS-60.
  • A voice is one channel (instruments/cs/channel.h): VCO with saw, square, PWM and a sine past the filters; noise; the filter single and switchable (CS-5/10) or HPF then LPF (CS-50/60); the IL/AL/A/D/R filter envelope and an ADSR.
  • One modulator for the instrument, a ring modulator after the voices (engine/ring_modulator.h, for #6 too), brilliance, resonance, key scaling, pressure, sustain.
  • Next in the same instrument: the CS-15 and CS-80, as a second channel per voice. The CS-30 is a maybe.

Not played by anyone yet, and not run on the Pi.

The first wave is built on branch `minics`, by Ben's decisions of 2026-10-15: the CS-5, CS-10, CS-50 and CS-60 as one instrument, mini-CS (`minics`, `.mcs`, port 8815), with no model switch. - Read for it: the owner's manuals of all four and the CS-10's service manual (in `docs/references.md`). No service manual was found for the CS-5, CS-50 or CS-60. - A voice is one channel (`instruments/cs/channel.h`): VCO with saw, square, PWM and a sine past the filters; noise; the filter single and switchable (CS-5/10) or HPF then LPF (CS-50/60); the IL/AL/A/D/R filter envelope and an ADSR. - One modulator for the instrument, a ring modulator after the voices (`engine/ring_modulator.h`, for #6 too), brilliance, resonance, key scaling, pressure, sustain. - Next in the same instrument: the CS-15 and CS-80, as a second channel per voice. The CS-30 is a maybe. Not played by anyone yet, and not run on the Pi.
Author
Owner

The CS-80 is in mini-CS, merged to main (30b24bc), from its owner's manual (Yamaha, undated): a second channel in each voice (ch2.on, a whole copy of channel I under ch2., mix, ch2.detune), 5⅓' and 2⅔' footages, velocity and each key's pressure to brilliance and level per channel, level scaling, the velocity pitch bend, pressure to the modulator's speed, SUSTAIN II and the tremolo/chorus. Spec docs/superpowers/specs/2026-10-15-yamaha-cs80-design.md. Ben played it on his laptop on 2026-10-15 and found it sounds great. Not benched on the Pi (it could not be reached); on the development machine eight voices with both channels take 2.4% of a core.

Next: the CS-15, whose cross-wired channels go over these two.

The CS-80 is in mini-CS, merged to main (30b24bc), from its owner's manual (Yamaha, undated): a second channel in each voice (`ch2.on`, a whole copy of channel I under `ch2.`, `mix`, `ch2.detune`), 5⅓' and 2⅔' footages, velocity and each key's pressure to brilliance and level per channel, level scaling, the velocity pitch bend, pressure to the modulator's speed, SUSTAIN II and the tremolo/chorus. Spec `docs/superpowers/specs/2026-10-15-yamaha-cs80-design.md`. Ben played it on his laptop on 2026-10-15 and found it sounds great. Not benched on the Pi (it could not be reached); on the development machine eight voices with both channels take 2.4% of a core. Next: the CS-15, whose cross-wired channels go over these two.
Author
Owner

The CS-15 is in mini-CS, merged to main (1c7e8a0), from its owner's manual (Yamaha, undated): the two channels wired as the CS-15's are (filter.source from its own envelope or either ADSR, either way up; amp.source from either ADSR; mixer.vco1, VCO 1 into channel II), a triangle on each VCO, each channel's own modulator depths (mod.*), GLIDE (glide.depth per channel, glide.time) and the brilliance selector. Open to every patch at any voice count. Spec docs/superpowers/specs/2026-10-15-yamaha-cs15-design.md. Ben played it on his laptop on 2026-10-15 and found it works for him. The CS-15D is not in it.

Still owed: the CS-80 and CS-15 benches on the Pi. The CS-30 is a maybe.

The CS-15 is in mini-CS, merged to main (1c7e8a0), from its owner's manual (Yamaha, undated): the two channels wired as the CS-15's are (`filter.source` from its own envelope or either ADSR, either way up; `amp.source` from either ADSR; `mixer.vco1`, VCO 1 into channel II), a triangle on each VCO, each channel's own modulator depths (`mod.*`), GLIDE (`glide.depth` per channel, `glide.time`) and the brilliance selector. Open to every patch at any voice count. Spec `docs/superpowers/specs/2026-10-15-yamaha-cs15-design.md`. Ben played it on his laptop on 2026-10-15 and found it works for him. The CS-15D is not in it. Still owed: the CS-80 and CS-15 benches on the Pi. The CS-30 is a maybe.
Author
Owner

The CS-30 and CS-30L are in mini-CS, merged and pushed (1ecd08b), from their owner's manuals and the CS-30 service manual: the three envelopes as mini-CS's three (EG-1 channel I's IL/AL envelope, EG-2 ADSR I, EG-3 ADSR II) chosen for each filter, amplifier, the pitch (pitch.*) and the LFO's rate (lfo.*); trigger.lfo; the series filter (filter.input), the other filter into the amplifier (amp.other_filter), a ring modulator inside each channel (ring.amount, ring.carrier), VCO FM (vco.fm), a wave for each modulation depth (*.mod_wave) and 128'. Spec docs/superpowers/specs/2026-10-15-yamaha-cs30-design.md. Ben played it on his laptop on 2026-10-15 and found it sounds good.

Benched on the Pi the same night (20 s a case): a CS-80, eight voices of both channels, 27.8% of one core with the effects; a CS-15 4.2%; a CS-30 5.0%; thirty-two voices 54.9%.

Left: the CS-30's sequencer (with the shared one, #56) and the outside input (#17). Every model the issue names is in mini-CS but the CS-15D, which Ben left out.

The CS-30 and CS-30L are in mini-CS, merged and pushed (1ecd08b), from their owner's manuals and the CS-30 service manual: the three envelopes as mini-CS's three (EG-1 channel I's IL/AL envelope, EG-2 ADSR I, EG-3 ADSR II) chosen for each filter, amplifier, the pitch (`pitch.*`) and the LFO's rate (`lfo.*`); `trigger.lfo`; the series filter (`filter.input`), the other filter into the amplifier (`amp.other_filter`), a ring modulator inside each channel (`ring.amount`, `ring.carrier`), VCO FM (`vco.fm`), a wave for each modulation depth (`*.mod_wave`) and 128'. Spec `docs/superpowers/specs/2026-10-15-yamaha-cs30-design.md`. Ben played it on his laptop on 2026-10-15 and found it sounds good. Benched on the Pi the same night (20 s a case): a CS-80, eight voices of both channels, 27.8% of one core with the effects; a CS-15 4.2%; a CS-30 5.0%; thirty-two voices 54.9%. Left: the CS-30's sequencer (with the shared one, #56) and the outside input (#17). Every model the issue names is in mini-CS but the CS-15D, which Ben left out.
bcox closed this issue 2026-10-16 02:38:50 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/mini-800#23
No description provided.