  /\/\   __ _ _ __   __ _| |_ ___  ___ 
 /    \ / _` | '_ \ / _` | __/ _ \/ _ \
/ /\/\ \ (_| | | | | (_| | ||  __/  __/
\/    \/\__,_|_| |_|\__,_|\__\___|\___|
                   SPECTRAL SYNTHESIZER
									 
(C) Fred's Lab 2021-2026									 
https://fredslab.net
info@fredslab.net

THIS SOFTWARE IS PROPRIETARY AND SHOULD ONLY BE INSTALLED
AND RUN ON GENUINE FRED'S LAB MANATEE HARDWARE.

********** FIRMWARE CHANGELOG **********
V1.07 24.01.2026 - Bugs fixing + performance + compressors
========================================
- Moving delay modules and DCBs on primary core to free
- Fixing interpolation clicks in delays
- Introducing limit on EQs usage depending on core 1 load 
- Dropping the primary voice concept
- Parts now have their own master env-f & lfo-f
- Dropping system configuration auto-save feature
- Fixing envelopes sources on part matrix
- Fixing modwheel expressors
- Fixing extended MPE expressors for part modulations
- Fixing freeze with high pitch and square sub
- Adding part compressor in eqs section
- Adding voice compressor in drive section
- Basic drive "pure" boost and progressively soft-clip
- Hall reverb no longer overflows internally
- Complete overhaul of gain staging and headroom in audio engine
- Adding animated graphics for delays
- Fixing initialisation of MPE mode from multi page
- Multi page now displays total resource used on both cores
- New "Stay On Page" option to keep the page while swapping parts
- New "Pitch" option allowing the redefine the use of the pitch pot
- New "Version" page in tools
- New "Init" page in tools
- Various optimizations in DSP code

V1.06d 24.10.2024 - Bugs fixing + performance
========================================
- Reduces audio latency by 0.5ms (latency now < 2ms)
- Fixes voice render list algorithms
- Fixes ENV-F, ENV-A, LFO-F sources / exps for part targets (mod-matrix)
- Improves resource meter accuracy and removes LCD glitches
- Latest voice triggered has precedence on part modulations
- Multi remembers original preset slots to use as saving default slots
- Improves DSP load balancing scheme
- Lowers secondary cores maximum load limit
- Removes meaningless calculations in audio process 
- Removes legacy fields in cores exchange protocol
- Allows slot foldover in in preset / multi save page
- Automatically patches preset & multi files from previous firmware
- Increases pots wakeup threshold
- Fixes AUX output bug introduced in V1.06

V1.05 16.10.2024 - MPE Support
========================================
- Adds two zones MPE support
- Allows Part 1 to be used as MPE Zone 1 preset
- Allows Part 2 to be used as MPE Zone 2 preset
  MIDI channel configuration is ignored for MPE Parts
- Revamps MPE related system pages (Member channels, Master bendranges)
- Adds default MPE modulations (pressure / vibrato, CC74 / cutoff)
- Interprets to MIDI RPN 0 (MPE bendrange) & RPN 6 (MPE configuration)
- Renders Preset & Multi changes instantaneous using MIDI Program Change
  and Song Select messages
- Kills the concept of Primary Voice for ENV-F, ENV-A & LFO-F influence
  on part modulation targets. The latest voice played has precedence.
- Adds ENV-F, ENV-A & LFO-F as extra expressors
- Optimizes LP / BP / HP filter models 
- Improves voice render list sorting
- Improves spectrum preview glypher
- Fixes clocking reset when saving user data
- Fixes text location in clock quantize page
- Fixes a couple of engine state cleaning bugs

V1.04 12.09.2024 - Experimental
========================================
- Implements new voice & DSP resources allocator

V1.03 12.09.2024 - Performance
========================================
- Adds optional MIDI & EXT 5 BPM rounding / quantization
  in system configuration
- Adds "one-shot" modes to all LFOs
- Adds LP & HP filter models (same as RC ones)
- Fixes nasty clipping in BP12 filter model
- Improves efficiency of all filter models
- Full rewrite of LFO-F code for performance
- Fixes clicks in "AscensTG" factory preset
- Makes the default preset only use the generator, the sub
  being disabled by default
- Hand optimizes all critical audio routines
- Adapts codebase to compile with GCC 8.31 (XC-DSC)
  instead of 4.5.1 (XC16)

V1.02 12.08.2024
========================================
- Corrects Ping-Pong delay stereo mode
- Improves delay modulation on time parameter
- Fixes many clocking and sync issues
- Uses MIDI Clock as reference when clock mode on AUTO,
  even when MIDI Start message has not been received
- Rounds to nearest multiple of 5 when detecting BPM with MIDI
  because of large MIDI jitter on modern DAWs
- Fixes missing categories (INI) in factory presets
- Lights up correctly Stereo & Sync LEDs depending on selected delay
- Adds preliminary clock monitor page in Tools
 
V1.01 23.07.2024
========================================
- Fixes part enabling code on 2nd DSP
- Fixes active sensing timeout reset

V1.0-RC13c 17.06.2024
========================================
- Fixes voice allocator for unisono modes
- Re-enables the ring modulator

V1.0-RC13b 14.06.2024
========================================
- Includes final factory sound set
- Adds default preset & default multi
- Increases second core clock speed
- Fixes LFO2 mod. on pulse, sine, tri engines
- Optimizes modulation matrix performance
- Optimizes buffer transfers
- Enlarges multi storage space to 16 slots
- Fixes issues in voice allocator (unisono)
- Fixes glitches when swapping play modes
- Updates performance counters with actual base load
- Removes spurious clicks when multiple delays are used
- Corrects int to hex (ascii) routine
- Updates various UI texts

V1.0-RC12 07.06.2024
========================================
- Jumps to part 1 preset selection on boot
- Renames a few mod. targets for UI coherency 
- Fixes MIDI NRPNs reception
- Enables local on/off setting through MIDI CC 122
- Fixes preset bank selection using MIDI CC 0
- Updates required UI LEDs on CC/NRPN reception
- Improves UI responsiveness
- New spectral inversion algorithm
- Fixes part / voice random source
- Smoothes EQ gain control
- Adds MIDI Song Pointer Support
- Uses MIDI Song Select message as "Multi Change"
- Boosts preset base volume
- Calls "All Notes Off" at presets load
- Fixes display driver glitches
- Improves Tremolo amplitude range
- Reduces DC in spectral representation
- Smoothes formant, rotation & inversion controls
- Smoothes LFOs & ENVs AMT parameters
- Changes 0 to OFF for play mod. rate and time controls
- Changes some --- labels to OFF for consistency
- Fixes rare crash related to cores synchronization

V1.0-RC11 14.05.2024
========================================
- Harmonizes preset volumes
- Reduces preset loading timeout
- Improves LCD driver stability

V1.0-RC10 13.05.2024
========================================
- Includes SB24 factory sound
- Fixes LCD port conflict in access
- Speeds up communication with LCD 
- Improves MIDI clocked delay stability
- Fixes delay resync function
- Corrects matrix targets list
- Adds temporary factory presets 
- Fixes overflow when negative mod. on EQs gain

V1.0-RC9 12.05.2024
========================================
- Cleans delay line on preset load / import
- Brings asynchronous EEPROM accesses
- Removes clicks at preset / multi, load & store
- Quadruples the spectra refresh rate
- UI LEDs always reflect status of last played voice
- Optimizes performance on first core
- Improves clock system switching and accuracy
- Fixes arpeggio clocking stability

V1.0-RC8 10.05.2024
========================================
- Replaces voice allocator
- Fixes pot grab mode with ALT
- Optimizes DSP resources when using one part
- Removes init & transfer glitches in delays
- Reduces code size for slave core

V1.0-RC7 08.05.2024
========================================
- Fixes the new ALT switch behaviors
- Fixes the send sysex trigger from the UI
- Adjusts boundaries on page reach with the arrow keys
- Adding 0x7F as CRC joker
- Sets filter tracking to base pitch + semitone setting
- Adds semitone setting to sub-osc pitch
- Computes glide before vibrato modulator
- Improves MOVE (pots offset) mode
- Changes constant matrix source names (DCxxx%)
- Fixes MIDI CC mapping
- Adds delay model parameter on CC h3F / 63
- MIDI CC gen rotation => h11 / 17
- MIDI CC gen inversion => h12 / 18
- MIDI CC gen formant => h13 / 19
- Sets cents settings range to -50 / 50 instead of -100 / 100
- Sends CC only when a value has changed
- Edit buffers have now 4 states (init, original, edited, imported)

V1.0-RC6 05.05.2024
========================================
- Resets back to home timer pressing navigation keys
- Fixes UI pages numbering
- Fixes UI variable macro count pages refresh
- Allows swap of edited part in MIDI & ARP sections
- Allows UI switches to send CCs & NRPNs
- Applies Local ON on UI switches
- Fixes various UI refresh glitches
- Removes spurious CCs sent using macro knobs
- Defaults to frequency parameter setting when LFO duration is set to NONE
- Defaults to time parameter setting when delay duration is set to NONE
- Fixes clipping in pitch calculation 
- Sets maximum pitch for sub-osc to MIDI note 120 = 8.37kHz
- Doubles the mod. amount in the mod. matrix
- Doubles the mod. amount for the LFOs
- Resets the "E" (edited) mark after multi / preset are saved
- Adjusts the range of LFOs rise & fall parameters to 6 bits
- Fixes comb delay timing setting
- Fixes delay convergence issue with high feedback
- Improves background noise of hall reverberation
- Adds ALT + pots for coarse settings
- Triggers MIDI panic on a long press on drive 
- Slot LEDs (Env. F, Env. A, LFO F) reflect 1st DSP latest voice state
- Fixes filter pitch tracking (tracking on gen pitch)
- Reduces some DC clicks
- Ensures DSPs sync when editing spectrum bins
- Updates store cached headers when receiving presets & multis

V1.0-RC5 13.04.2024
========================================
- Reads the Master (volume) pot on machine startup
- Improved smoothing drive / gain control (zippers)
- Fixes panning & balance table (no leak)
- Adds more bass passing through generator & parts DCBs

V1.0-RC4 11.04.2024
========================================
- Fixes unisono spreading (wider)
- Adds missing mix page for multipart (pan + level)
- Fixes panning handling

V1.0-RC3 11.04.2024
========================================
- Improves voice priority sorting for rendering list
- Fixes UI glitches while changing LED intensity
- Adds the store "auto-load" feature to recall presets
- Fixes multi load & save functions
- Changes multipart format so preset slots are referred by index + bank
- Prevents pot glitches when primary core stalls

V1.0-RC2 initial version 09.04.2024
========================================
- Fixes clocking data exchange
- Changes various defaults (presets & system)
- Fixes signed modulations on envelopes & LFOs targets
- Triggers UI "go-home" when presets are loaded or transfered
- Improves audio performance
