 _____  _ _   _ _       _ _  
|_   _|(_|_) (_|_)     (_|_) 
  | |   ___   ___  _ __ ___  
  | |  / _ \ / _ \| '__/ _ \ 
  | | | (_) | (_) | | | (_) |
  \_/  \___/ \___/|_|  \___/ 

=============================
Töörö Firmware
(c) Fred's Lab - Frédéric Meslin
Designed with passion in Germany!
31.10.2026

Support
=======

Email: support@fredslab.net
Address:
Frederic Meslin Audiogeräte
HerwarthStr. 20
53115 BONN
Germany

Firmware update
===============

To update its firmware, Töörö needs to be connected to a computer
(PC, Mac or Linux) via USB and started in bootloader also called
DFU mode.

To start the machine in bootloader mode, switch on the device while
maintaining the "ALT" switch pressed. There should not be anything
indicated on the display, the "OSC" LED should be lit green and the
"ALT" one red.


To transfer the firmware, a DFU programmer software is needed.

Option A: STM32 Cube Programmer

Download and install the STM32CubeProgrammer tool provided
by STMicroelectronics:

https://www.st.com/en/development-tools/stm32cubeprog.html

Start STM32CubeProgrammer and open the *.hex file using the "Open file"
tab at the window top.

Connect the Töörö by first setting the programming interface to "USB"
in the rightmost panel and then choosing the USB device port.
You may need to refresh the port list if the USB device was attached
after STM32CubeProgrammer was started.

Finally click on "Connect" and then click on "Download".

Let the STM32CubeProgrammer software transfer the Firmware to the Töörö
and once finished, simply disconnect or reboot the instrument.

Option B: DFU Buddy

Download and install the great open-source tool DFU-Buddy
provided by sourcebox:

https://github.com/sourcebox/dfu-buddy

Start DFU Buddy and open the *.dfu file using the "Open..." menu or
simply drag and drop the file on the window.

If not already found, select the USB device using the "Device" combo
list at the window top. You may need to refresh the device list using
the "Rescan" button, if the USB device was attached after DFU Buddy
was started.

Check "Confirm to proceed" checkbox at the window bottom left and then
click on the "Start update" button.

Let the DFU Buddy software transfer the Firmware to the Töörö and once
finished, simply disconnect or reboot the instrument.

When powered on, Töörö should shortly display the version number of the
currently installed firmware.

Firmware Release Notes
======================
V1.70:
- Support for the Töörö mkII, detected at power up
  New 16 bit TPC116S8 oscillator DAC driver, fully DMA driven
- "Modern" amplitude mode on the Töörö mkII
  The DCA wiper only carries the preset amp level and the multi volume,
  envelopes and modulations are applied digitally, which removes the
  wiper stepping noise
- Holding "L1" at power up forces the former "vintage" amplitude mode
- Fixing ring modulator and noise levels, they were not compensated for
  the DCA wiper quantisation
- Positive amp level modulation is no longer clamped away
- Filter resonance is tamed as the amplitude fades in modern mode, so a
  self oscillating filter no longer sings through a closed amp
- Panel LEDs are dimmed by PWM, all 20 of them, no more flicker
- Brightness setting, chosen at power up and not stored:
  holding "EF" gives low brightness, holding "EA" switches the encoder
  LEDs off, nothing held keeps the normal brightness
- Faster encoder scanning, 4kHz instead of 1kHz

V1.60:
- Sustain / hold pedal (CC64) support
- Fixing performance issue with note lists
- 2 zone MPE support (using part 1 & part 2 settings)
- Holding "EXIT" at power up sets standard MPE mode
  single zone / master channel 1 / member channels 2 to 16
  with pitchbend sensitivity +/-48 semitones
- RPN 00 for pitchbend sensitivity (MPE mode only)
- RPN 06 for zone configuration (MPE mode only)
- Change to voice allocator, stealing of (pedal) sustained notes allowed
- Loading preset only clean relative part state
- MIDI LED (display right dot) inverted in MPE mode

V1.50:
- Tempo setting from panel | in BPM, from 1 to 199
- Changed arp subdivisions "grid" | in ticks, from 48 to 6
- Fixing arp performance problems
- Double click on EXIT switch => MIDI panic
- Instant display clearing when exiting matrix mode
- Edited part displayed on "system" button press
- Changed OSC detune range | in cents, from -99 to +99
- MIDI realtime events are passed to MIDI-OUT
- Pitchbend range setting (cc) | in semitones, from 0 to 127
- Master tuning setting (cc) | in cents, from -99 to +99
- Changing preset flags triggers all notes off
- Adding a revision number to presets and multis

V1.42:
- adding new sysex messages for the editor
- fixing a crash on calibration saving

V1.40 (golden master):
- Fixing USB MIDI related bugs
- MIDI CC smoothing re-enabled
- Factory reset clears Multi 0
- Factory reset reloads configuration

V1.30-rc7:
- Fixing an other USB MIDI bug

V1.30-rc4:
- Adapting USB device code to fully support MacOS
- No regular MIDI messages are sent within sysex transfers 

V1.30-rc3:
- Adding more factory presets (bank is up to slot 50)

V1.30-rc2:
- Adding sysex support for edited preset params
- Changing calib. table dump & request services

V1.30-rc1:
- Factory presets recall (by pressing PRESET at startup)
- Improving multi-fx algorithms
- Fixing regular sysex dump & requests
- Fixing flash manager
- Correcting various bugs

V1.20-rc6:
- Adding a "vibrato" based on LFO2
- Changing LFO2 default speed
- Vibrato is disabled when setting a modwheel destination

V1.20-rc5:
- Fixed negative modulation amounts
- Env. aftertouch param only affects sustain stage
- Matrix mode exit-timeout is set to 8 seconds 
 
V1.20-rc4:
- Tempo ranges from 20 - 199 BPM
- Display scheme of tempo has changed

V1.20-rc3:
- No MIDI Program Change sent on preset load (loop problem)
- Fixing UP2

V1.20-rc2:
- Fixing mono mode behavior
- Less aftertouch on filter cutoff (init preset)
- Anti MIDI feedback loop system

V1.20-rc1:
- Fixing arpeggio behavior (normal / hold)
- Correcting stuck notes and crash
- Arp hold is displayed no / ho
- Multi presets are reloaded when multi init / paste 
- Improved calibration result
- Improved multi-fx performance and sound
- Adjusting init preset configuration
- Fixing multi-fx distorsion after calibration

V1.10-rc3:
- Mod. matrix pitch range
- Adjusting shapers resonance range
- Fixing shapers fast mod. related issues
- Default selected shaper is HP

V1.10-rc2:
- Working retrig. in mono mode 
- Fixed note "top priority" for retrig.
- Discarding ON1 & ON2 env. retrig. options
- Discarding overall glide support
- CC86 is for pitchbend range
- Matrix mod. amounts are sent via MIDI CC
- CC and Program Change messages are sent on the right part channel
- Longer delay before "auto-exit" in mod. matrix mode
- Program Change message sent on recalling a multi

V1.10-rc1:
- New arpeggio with hold on/off instead of gate length
- Better envelope curve (expo) / time range
- Fixed envelope hold time
- More LFO waveforms (MW / Slew / AM)
- New LFO envelope (expo)
- LFO phase control instead of fall time
- Fixed Multi save & recall (preset id stored)
- Improved calibration (faster and accurate procedure)
- Automatic triggering of calibration
- Calibration stored on external flash
- Pitch(PI) instead of pitch bend(PB) as modulation source
- Selection of Multi with sys + encoder 3
- Selection of Channel with sys + encoder 2
- Double click on Vol/Mix => poly on / off
- Improved voice recycling algorithm
- Reduced feedback amount on multifx
- Fixing various MIDI clocking issues
- Fixing aftertouch scaling in modulation matrix

V1.03:
- Removing DC plop at voice startup
- Reducing digital artefacts in audio out

V1.02:
- Fixing various bugs in calibration routine
- Fixing check routine for calibration recall on startup
- Faster calibration routine
- Analog filters garanteed to close when set to 0
- No more overflow in modulation matrix 
- Matching CC RX/TX for envelopes

V1.01:
- Internal - skipped

V1.0-rc2:
- Multis are displayed Mx, with x the multi index

V1.0-rc1:
- Removing the performance indicator
- Improving multi-fx (mono / stereo / chorus)
- Default fx configuration in multi preset
- Progressive curve in mod. matrix amounts
- Fixing various performance bugs

V0.32:
- Program change reception (multimode) fixed
- Program change sent
- Default modulation targets in init preset 
	PRESET_EF_TARGET -> TARGET_OSC_SYNC1
	PRESET_EA_TARGET -> TARGET_OSC_FMAMOUNT1
	PRESET_L1_TARGET -> TARGET_OSC_WAVE1
	PRESET_L2_TARGET -> TARGET_RING
	PRESET_WHEEL_TARGET -> TARGET_FILTER_CUTOFF
	PRESET_BEND_TARGET -> TARGET_OSC_SYNC2
	PRESET_VELO_TARGET -> TARGET_OSC_WAVE1
	PRESET_AFTER_TARGET -> TARGET_LFO_SPEED1
- CC17, CC18, CC19, CC20 => Mod. amount (EF, EF, L1, L2)
- CC87, CC88, CC89, CC90 => Mod. amount (MW, PB, VL, AF)

- Reduce voice calculation footprint
- Removed notch shaper
- Combining delay and chorus fx (not finished yet)
- Updating display
- Various performance improvements

V0.31:
- MIDI CC smoothers fixed
- Display & 7seg charset updates
- Matrix mod acronyms now correspond to display
- Random table triggered by chords "RC" instead of arp restart "RA"
- Alt behavior (lock + exit changing line)
- Matrix mod timeout: auto leave from matrix mod after 2 sec of inactivity
- Renamed LFO waveforms
- New wavetable generative algorithm 
- MIDI activity on CC witness on display 
- Faster encoder scrolling / less resolution

V0.30:
- Polyphonic aftertouch support
- Fixing DIN MIDI parsing
- ALT lock (double click = lock)
- Vol/Bal double click => poly mode toggle
- Clean + Preset => reload preset from flash
- Clean + Multi => reload multi from flash
- Clean => unlock ALT on release

V0.29:
- Arpeggiator immediate start
- Fixing active sensing bug
- Improved audio task performance
- Fixing delay saturation

V0.28:
- Improved encoders reading
- Better calibration procedure
- New "blue" noise waveform 
- Restored former ring modulator

V0.27:
- Fixing broken calibration
- New encoder scanning / acceleration algorithm
- Dropping user table entries
- Improving encoder leds curve
- More feedback on delay

V0.26:
- Use the internal voltage reference for ADC & DAC
  Improves multi-fx noise figures
  (requires hardware patch on PCBs rev <= 3.4)

V0.25:
- Fixing calibration (really broken since 0.10)
- Fixing UI bug when MIDI empty display

V0.24:
- Disabling the multi-fx DAC when not in use
- Fixing external flash driver status request

V0.23:
- Fixing calibration
- Fixing remaining MINUS dot

V0.22:
- Shaper ef-amount => ea-amount
- Shaper l1-amount => l2-amount
- Multi volume & pan transmit MIDI CC 07 & 10
- Corrected CC number for shaper LFO amount
- Fixing copy / paste function
- Multis can now be copy / pasted
- Simplified multi / preset saving procedure
- Simplified UI & display code
- Display always shows parameter when turning encoders

V0.21:
- Fixing the oscillators FM
 
V0.20:
- Adding 4 new waveforms from Benoit's collection
- Removing RL mode (creating table on LFO end-of-cycle)
- Adding startup animation with firmware rev. displayed
- Adding preset copy and paste functions
- Full MIDI CC support (rx & tx) (see the list)
- Fixing sysex working buffer size related bugs

V0.12:
- Adding preliminary factory and user tables
- Adding on-the-fly generation of tables (RO, RN, RL)
  RO = Random Once / RN = Random Note / RL = Random LFO1
- Various UI encoder led fixes
- "Master voice" detection algorithm
- Changing preset storage / loading format (again)
  
V0.11:
- Better filtering in multi-fx
- Chorus models (first version - Mono, Stereo, String)

V0.10:
- Multi-fx in floating point
- Fixing bugs introduced in V0.09

V0.09:
- Fixing bug in calibration
- Updated USB descriptor version

V0.08:
- Increased encoders sensitivity
- Changed preset storage format
- Changed multi storage format
- Fixing various bugs in flash driver
- Preset / multis load and store
- Improved displayed content when in matrix
- Smoothed VCF CV control
- Correcting audio glitches when browsing presets
- MIDI active sensing

V0.07:
- Improved sync precision and compensation
- Increased oscillators output level 
- Increased ring-modulator saturation
- Triangle wave phase reversed
- Enveloppes hold time
- Velocity on enveloppes
- Aftertouch on enveloppes
- Correcting various stability issues
  
V0.06:
- Better sounding auto-synchronisation
- Correcting some oscillator glitches
- Ring modulator = ring + distorsion
  and make use of oscillators levels

V0.05:
- Integration of new oscillator waveforms
  Sine, Triangle, Square, Saw, Noise, Bell1, Bell2, Bell3
- Improving harmonics in low pitch 
- Fixing wave interpolation overflows

V0.04:
- Fixing calibration procedure bug
  (introduced in version 0.03)
- Fixing delay before validation of last in a row SPI3 job
  
V0.03:
- Proper start / stop / continue message handling
- Better clock tracking
- Fixed MIDI filter output latency
- Fixed SPI3 bus manager (audio & display glitches)
- Proper load and store from external flash
- Proper checking of presets and multi loaded from flash or sysex
- Wrong saturation in delay FX + louder mix
- Wrong root pitch of oscillators
- Fixing a bug in MIDI stack related to running status & sysex
- Selection of dest slot (multi & preset) with encoder while saving 

V0.02:
- Arp modes (up, down, random, up2, down2, up4, down4)
- Clocking internal / external
- Bipolar parameters from -512 to 512
- Correcting "sources" UI refresh bug
- Display of arp tempo
- Updated arp gate parameter range
- Correcting errors in MIDI filtering
- Firmware rev. number in USB descriptors


V0.01: initial internal release
