84 Cosmik C1ZZL3
Dual phase-distortion synthesiser and Turing machine release with Core 1.4 and alternate Rad v9 firmware. Both support USB MIDI, a shared browser editor and CZ patch Import Lab, optional Turing MIDI output, and Turing CV and pulse outputs. Core shares its amplitude, phase-distortion, pitch envelopes, and waveform settings between oscillators. Rad v9 adds six independent envelope lanes, separate oscillator waveform settings, and eight named sound-preset slots with saved performance settings. Both retain a shared base PD amount and the same physical controls and MIDI CC map.
Panel
Distortion/LengthWaveform
Morph/clockPitch CVPhase
DistortionWave Control
CVExt Turing
ClockEnvelope
TrigOscillator 1
/ TuringOscillator 2
/ TuringStepped
Turing CVSmoothed
Turing CVMain Turing
PulseAlternate
Turing Pulse
Controls
Pitch/Mutation
Oscillator pitch in synth mode
Phase Distortion/Length
Phase-distortion amount
Waveform Morph/clock
Waveform selection/morph for both oscillators in Core; oscillator 1 only in RAD, with oscillator 2 set in the browser editor
Turing machine mode: Z up: MAIN: Mutation; X: Sequence Length; Y: Clock Speed.
Synthesiser mode: Z middle: MAIN: Pitch; X: shared Phase Distortion amount; Y: Waveform Morph (oscillator 1 in RAD; oscillator 2 is set in the editor).
Edit/save: Z down, hold: MAIN: Detune; X: Ring Modulation; Y: Noise/Grit.
Inputs & Outputs
Inputs
Outputs
Inputs
Pitch CV
1V/oct pitch modulation in PD synth mode
Phase Distortion
Adds phase-distortion amount in synth and Turing modes
Wave Control CV
Adds wave control in synth and Turing modes; modulates both oscillator waveform controls in RAD
Ext Turing Clock
External Turing clock in switch-up mode
Envelope Trig
Triggers selected envelope and oscillator sync in synth mode; held gates loop supported envelopes and gate-off lets them complete
Outputs
Oscillator 1 / Turing
Oscillator 1 in synth mode; self-playing stepped oscillator 1 in Turing mode
Oscillator 2 / Turing
Oscillator 2 in synth mode; self-playing stepped oscillator 2 in Turing mode
Stepped Turing CV
Scaled stepped Turing CV; continues updating in synth mode
Smoothed Turing CV
Smoothed Turing CV; continues updating in synth mode
Main Turing Pulse
Main Turing pulse; continues updating in synth mode
Alternate Turing Pulse
Alternate Turing bit pulse; continues updating in synth mode
LEDs
LED 1
In synth mode: LED 1 shows phase-distortion amount, LED 2 shows waveform position, LED 3 shows oscillator 2 level, LED 4 shows ring modulation amount, LED 5 shows noise amount, and LED 6 lights while the switch is held down.
LED 2
In Turing mode: LEDs 1-3 show low bits of the Turing pattern, LED 4 follows Pulse In 1, LED 5 shows sequence length, and LED 6 flashes on each Turing clock step.
LED 3
In startup envelope selection: factory presets use the binary LED display, and custom slots light LED 6 and use LEDs 1-3 for the custom slot number.
README
Cosmik C1ZZL3
Cosmik C1ZZL3 is a dual phase-distortion synth card for the Music Thing Modular Workshop Computer. It combines a playable synth voice, a Turing machine with CV and pulse outputs, USB MIDI, browser envelope editing, and Casio CZ patch import. Turing MIDI output is optional and defaults off.
Choose Your Firmware
| Firmware | Use it for |
|---|---|
| Core 1.4 | Shared amplitude, PD, pitch envelopes, and waveform settings for both oscillators. |
| RAD v9 | Six independent envelope lanes, separate oscillator waveforms, and named sound presets with saved settings. |
Flash one image at a time. Both use the same hardware controls, MIDI CC map, Envelope Lab, and Import Lab. Checksums are in SHA256SUMS.txt. Both versions have been hardware tested.
Core And RAD Comparison
| Feature | Core 1.4 | RAD v9 |
|---|---|---|
| Firmware to flash | uf2/C1ZZL3_CORE.uf2 |
uf2/C1ZZL3_RAD.uf2 |
| Amplitude envelopes | One shared envelope for both oscillators | Independent Amp1 and Amp2 envelopes |
| Phase-distortion envelopes | One shared envelope for both oscillators | Independent PD1 and PD2 envelopes |
| Pitch envelopes | One shared envelope for both oscillators | Independent Pitch1 and Pitch2 envelopes |
| Waveform settings | Shared between both oscillators | Separate waveform settings for each oscillator |
| Panel Y knob / CC23 | Controls both oscillators' waveform | Controls oscillator 1 waveform; set oscillator 2 in the editor |
| Base phase-distortion amount | Shared between both oscillators | Shared between both oscillators; PD envelopes remain independent |
| Custom card slots | Eight custom envelope slots | Eight named sound-preset slots with envelopes and performance settings |
| Save Envelope Only | Saves compatible shared envelope data | Saves six envelope lanes and slot name, retaining the slot's saved settings |
| Save Sound Preset | Falls back to a compatible envelope save | Saves six envelope lanes, slot name, and current performance settings together |
| Card readback | Saved envelopes and current settings | Saved envelopes, slot names, per-slot performance settings, and current settings |
| Turing machine | Audio, CV, pulse, and optional MIDI output | Same as Core |
| Physical controls and MIDI CC map | Synth, performance edit, and Turing controls | Same layout and CC numbers as Core, with the waveform distinction above |
| Browser tools | Shared Envelope Lab and CZ Import Lab | Same tools, with independent oscillator editing and sound-preset support |
Controls
Switch middle: synth mode.
- Main: pitch
- X: phase distortion
- Y: waveform for both oscillators on Core; oscillator 1 waveform on RAD
Audio/CV In 1: 1V/oct pitch modulationCV In 1: shared phase-distortion modulationCV In 2: waveform modulation for both oscillatorsPulse In 2: gate-held envelope trigger/release and oscillator sync
On RAD, set oscillator 2 waveform separately in the browser editor. The base PD amount remains shared, with independent PD1/PD2 envelopes.
Switch down from middle: performance edit and save.
- Main: oscillator 2 detune
- X: ring modulation
- Y: noise/grit
Hold down from middle for about eight seconds to save the current performance settings as the global startup baseline. Ring and noise default to neutral; saved settings restore at startup. If powered up with the switch down, leave that position before using the performance controls.
Switch up: Turing mode.
- Main: mutation/lock
- X: sequence length, 2 to 16 steps
- Y: internal clock speed
Pulse In 1: external clockCV Out 1: stepped Turing CVCV Out 2: smoothed Turing CVPulse Out 1/2: Turing pulses
Audio outputs carry the self-playing oscillator voice in Turing mode. The Turing CV and pulse outputs also continue running while playing in synth mode. Y controls the internal clock; tap tempo is not available.
USB MIDI
The card chooses its USB role at boot. Connected to a computer, it appears as a USB MIDI device for DAW and browser use. Connected to a class-compliant USB MIDI controller, it can run in USB MIDI host mode.
MIDI note-on acts as a held gate: it triggers the selected envelopes and keeps loop-capable envelopes cycling until note-off lets them complete naturally.
MIDI CC controls on the selected input channel:
CC1: phase distortionCC20: oscillator 2 detuneCC21: ring modulationCC22: noise amountCC23: waveform for both oscillators on Core; oscillator 1 waveform on RADCC24: Turing CV octave range, from 1 to 8 octaves
The physical knobs and MIDI CC controls share the same control values. After a CC change, the related knob must be swept through the current value before it takes over again.
Web MIDI Editor
Use the shared Envelope Lab in Chrome or another browser with Web MIDI and SysEx support. Connect the card by USB, enable MIDI, and select the card output. The editor checks the firmware and saved slots automatically.
Editing Core And RAD Envelopes
- Pick a preset on the left, or add a custom one.
- Choose
Amp 1 / Osc 1orPD 1 / Osc 1for Core's amplitude or phase-distortion envelope; Core shares these lanes between both oscillators. - Use
Pitch 1 / Osc 1below the main graph for Core's shared pitch envelope. On RAD, use Amp1/Amp2, PD1/PD2, and Pitch1/Pitch2 to edit all six oscillator lanes independently, and set each oscillator's waveform separately in the performance settings. - Drag points on the graphs to change both level and timing.
- Watch the point numbers. When stages stack, only the highest number is shown.
- Use the tables below the graphs for exact values when you want precise edits.
- Connect Web MIDI. The editor automatically checks the card firmware type and saved envelope slots.
- Use the action buttons when you want to send, save, refresh, or reset.
Button quick reference:
Load RAM: send the envelope to the card until reset.Load Sound Preset: temporarily load the selected envelope and send all current settings in one action.Save Envelope Only: on Core, save the compatible shared envelope; on RAD, save all six envelope lanes and slot name while retaining the slot's saved settings.Save Sound Preset: on RAD, save six lanes, the slot name, and current performance settings together. On Core, fall back to a compatible envelope save.Delete Envelope Slot: clear the selected custom slot from card flash.Read Envelopes from Card: load occupied slots without overwriting changed local drafts; on RAD, also read slot names and attached performance settings.Read Settings from Card: pull the current performance settings into the editor.Send Settings: send the current performance settings to the card.Reset Preset: restore the selected preset to its factory value.
Load RAM, Load Sound Preset, and Send Settings are temporary. Use
Save Envelope Only to retain an envelope in flash. To make the current performance
settings the startup baseline, move the hardware switch from middle to down and
hold it until the card confirms the save.
On RAD, selecting a saved sound preset restores its attached performance settings. The hardware save gesture sets the global startup baseline separately.
The card can save up to eight custom envelopes or RAD sound presets. Factory presets are not
overwritten. Custom presets are labelled Local only, Saved - slot N, or
Changed - slot N. Envelope readback confirms which custom slots are occupied
and verifies saves and deletions when supported by the firmware. The editor also runs a quiet settings/envelope check automatically when MIDI connects or ports change, so the firmware type is visible without first pressing the read buttons.
Envelope behaviour:
- Pulse In 2 and MIDI note-on trigger the selected envelope and sync the oscillators when the envelope starts from inactive.
- While the gate or MIDI note is held, loop-capable envelopes cycle their middle stages.
- A short trigger runs the envelope through to completion.
- Pulse In 2 gate-off or MIDI note-off exits the loop and lets the envelope complete naturally from its current point.
- Turing-triggered envelopes continue to run through without waiting for a gate release.
- Rapid retriggers keep oscillator phase continuous while the envelope is active to reduce clicks.
C1ZZL3 Import Lab
Open the shared Import Lab.
Use this page to decode Casio CZ .syx patches into C1ZZL3 drafts, then open
the result in Envelope Lab for final editing and sending.
Current Import Lab features:
- Light and dark mode toggle matching the Envelope Lab palette.
- Larger
C1ZZL3 Import Labheader and a clearer guided import workflow. - Drag-and-drop or file-picker import for Casio CZ
.syxfiles. - Browser-side validation, patch summary, decoded data, and draft mapping.
- CZ frame awareness for common patch-send SysEx files, including command, location, channel, selected data offset, and payload candidates.
- CZ envelope assignment: choose merged, line 1, or line 2 mapping for CZ DCA amplitude and DCW phase-distortion envelopes; CZ DCO pitch envelopes map to the pitch lane.
- Draft handoff into Envelope Lab in a new tab for final editing and card send.
- Separate import page so CZ translation and envelope editing stay distinct.
Import Lab flow:
- Open
C1ZZL3 Import Lab. - Drop in or choose a Casio CZ patch file.
- Review the validation, decoded summary, warnings, and mapped draft.
- Use
Open In Envelope Labto carry the draft into the main editor. - In Envelope Lab, review the result, adjust if needed, and send or save it.
Envelope Presets
Factory presets:
- Off
- Pluck
- Double pluck
- Bounce
- Bell
- Brass
- Strings
- Reverse swell
- Evolving digital
To select an envelope at startup, hold the switch down while powering up, then release it and turn Main to choose. Move down and release to finish; hold down for about eight seconds before releasing to save the selection as the startup baseline. Audio is muted during selection.
Saved custom envelopes appear after the factory presets during startup envelope selection. Custom slots light LED 6 and use LEDs 1-3 for the slot number.
LED Feedback
In synth mode:
- LED 1 shows phase-distortion amount.
- LED 2 shows waveform position.
- LED 3 shows oscillator 2 level.
- LED 4 shows ring modulation amount.
- LED 5 shows noise amount.
- LED 6 lights while the switch is held down.
In Turing mode:
- LEDs 1-3 show low bits of the Turing pattern.
- LED 4 follows Pulse In 1.
- LED 5 shows sequence length.
- LED 6 flashes on each Turing clock step.
- Turning X briefly displays sequence length as binary on the LEDs.
In startup envelope selection:
- Factory presets use the binary LED display.
- Custom slots light LED 6 and use LEDs 1-3 for the custom slot number.
Building And Development
Running The Editors Locally
From this release folder:
python3 -m http.server 5173 --directory web
Open Envelope Lab. For the standalone Import Lab:
python3 -m http.server 5174 --directory web/import
Open Import Lab. The shared editor detects Core and RAD and sends the compatible envelope and settings format.
Building Core 1.4
From this release folder:
cmake -S . -B build
cmake --build build
Output: build/C1ZZL3.uf2. The packaged download is named uf2/C1ZZL3_CORE.uf2.
Building RAD v9
From this release folder:
cmake -S rad -B build-rad
cmake --build build-rad
Output: build-rad/C1ZZL3_FULL_DUAL_OSCILLATORS.uf2. The packaged download is
named uf2/C1ZZL3_RAD.uf2. RAD sources are in rad/ and share lookup tables
and USB MIDI support files with Core.
Implementation And Validation Notes
Both versions include lookup-table oscillators, the 192 MHz clock, settings readback, CC/knob pickup, high-PD audio smoothing, and phase continuity on rapid retriggers. CZ import maps DCW to PD, DCA to amplitude, and DCO to pitch. RAD adds per-oscillator envelope and waveform editing, named slots, and sound-preset settings readback. Turing MIDI defaults off in both versions.
License Notes
The random-looping sequencer is inspired by Tom Whitwell's Music Thing Modular Turing Machine.
This project is released under the MIT License. The included computercard.h
hardware helper is ComputerCard by Chris Johnson and is also MIT licensed; keep
its MIT notice present when copying firmware files into releases or experiments.
USB MIDI host support includes the MIT-licensed rppicomidi files, copyright 2023 rppicomidi. Their copyright and licence notices are retained in the corresponding source files.
Firmware distribution notices
See THIRD_PARTY_NOTICES.md for dependency
copyright and license texts. Keep the accompanying NOTICE.txt with
each UF2 when redistributing it.
