Releases: uglifruit/Workshop_Computer
Release list
Cathode Ray v1.0.0
Cathode Ray — a 1-bit PAL composite video synthesiser for the Music Thing Workshop Computer.
Wire a two-resistor DAC from Pulse Out 1 (1kΩ) + Pulse Out 2 (220Ω) into an RCA centre pin (grounds common), connect to any composite-input TV/monitor.
Features
- Oscilloscope (Audio In 1) with knob-controlled sweep speed, audio gain and baseline position, and a sweep-locked phosphor fade.
- Etch-a-sketch (CV In 1/2 as X/Y, full 48kHz sampling with line interpolation), with knob scale/offset and pickup hysteresis.
- 5-level greyscale via a 2×2 spatial dither (4 cycling orientations) with level-aware dilation to keep whites crisp on the slow composite DAC.
- Three independent performance triggers — Switch DOWN, Pulse In 1, Pulse In 2 — each assignable to: invert, clear, cycle/random/CV-selected effect, or a fixed effect (strobe / fade / fade-to-white / snow / swap / corrupt).
- On-screen config menu (baked bitmap font): hold Switch DOWN + twist Main/X/Y to assign each trigger.
- Screensaver alt-boot mode (hold Switch DOWN at power-on) — bouncing block, protects CRTs from burn-in.
Flash cathode_ray.uf2. See the README in releases/64_cathode/ for full wiring and controls.
OffAir v1.0.1
- Morse tone level reduced to ~75% of broadcast level (was slightly too loud relative to stations)
- README credits: acknowledge AM Coupler by Chris Johnson as inspiration for the RF PWM transmission path
OffAir v1.0.0
OffAir — AM/Shortwave/Longwave radio simulator for the Workshop Computer.
Tune between two Stations and interference with authentic heterodyne whistles, SSB pitch-shift detuning, AM envelope detection, swelling per-band static, and triggerable Insta-ference one-shots. Baked recordings or live audio inputs become the Stations.
Flash: download offair.uf2 below, hold BOOTSEL on the Computer, and drag the file across.
See the release folder for the README, panel overlay, source, and the convert_clips.py tool for baking your own sounds.
Chorgan v1.1.0
New in v1.1.0
Audio In 1 — Slew speed CV
Bipolar CV control over portamento glide time. 0V (unpatched) = instant, unchanged from v1.0. Positive voltage adds portamento to all six voices; +5V ≈ 1 minute glide. Works in both normal and slew boot modes. In slew mode, negative voltage shortens the zone-controlled rate toward instant.
Audio In 2 — Chord inversions
Bipolar CV shifts the voicing through octave inversions. Positive voltage raises the lowest-sounding voice by one octave per step (up to 6 steps); negative lowers the highest. CV Out 1 and Pulse Out 1 are unaffected.
ChordSeq v0.1.0
Initial release of ChordSeq — 8-oscillator morphing chord synthesizer.
Controls:
- Knob X: Root pitch (C3–C6)
- Knob Y: First interval (unison to octave, 13 semitone steps)
- Main Knob: Waveform shape (saw → triangle → sine-ish)
- CV In 1: V/oct pitch offset
- Audio Out 1/2: Stereo output
Early release — chord voicing beyond the first interval coming soon.
Chorgan v0.2.6 — fix crash at TRI→SINE boundary
Fix: triSample() middle branch had >> 14 where >> 15 was needed. This mapped the descending slope of the triangle to values reaching -98304 instead of -32768, feeding a wildly wrong value into the blendWaveform lerp at exactly the TRI→SINE transition zone (~9 o'clock / ~3 o'clock). Deterministic crash every time the knob crossed that boundary.
Chorgan v0.2.5 — fix crash at SINE zone
Fix: sineSample() had a signed integer overflow (undefined behaviour on Cortex-M0+). The lerp terms s2frac and s1(65536-frac) each reach ~2.1B; their sum overflows int32_t's 2.147B limit near the sine peak/trough. This caused a CPU fault specifically when the Main knob was in the SINE blend zone (fully CCW/CW), corrupting processor state that survived warm resets. Fix: promote multiply operands to int64_t.
Chorgan v0.2.2 — fix knob lockout from fast CV/pulse inputs
Fix: fast signals on CV1/CV2/PU1/PU2 corrupt the shared ADC mux, driving knob IIR accumulators to 0 or 4095 and locking out X/Y/Main/Switch. Added per-knob rail-stuck detector — if railed for >0.5s, holds last known good value. Resets immediately when signal normalises. Survives any combination of CV/pulse inputs without requiring power cycle.
Chorgan v0.2.1 — fix intermittent freeze
Fix: removed spurious prevPreset = -1 inside the chord override block. This was causing updateTargets() to be called every sample (48kHz) while a chord was held, overrunning the audio budget and locking the processor. The freeze survived warm resets because RAM state persisted.
Chorgan v0.2.0 — chord sequencer working
Stable snapshot of chord sequencer feature before freeze bug fix. Chord store/recall fully working. Known intermittent freeze near SINE→TRI transition suspected to be a RAM placement issue — fix coming in v0.2.1.