BIAS is one added machine for the Elektron Model:Cycles, OS 1.13: six oscillators with their own envelopes, summed, folded through a wavefolder and given a second envelope after the folder, all on an internal clock locked to the note. It is a clean-room voice: the architecture follows Noise Engineering's public description of the Basimilus Iteritas Alia, and no Noise Engineering code, table or sample is used (see THIRD-PARTY-NOTICES.md).
This repository is the machine's source package, published so that other projects can port it. It is not a firmware and contains none.
| Knob | Name | What it does |
|---|---|---|
| COLOR | Harm | one tone at the left; a second fades in over the first quarter; from 0.25 the other four arrive low, with decays stretching from 3 % to 70 % of DECAY, then their levels rise to full |
| SHAPE | Morph | every oscillator through sine, triangle, saw and square, two neighbours blended, all phase-aligned |
| SWEEP | Spread | the five upper ratios from 1, 2, 3, 4, 5, 6 to the primes 1, 2, 3, 5, 7, 11, geometric between |
| CONTOUR | Fold | first three quarters: the folder's threshold from 1 down to 1/24; top quarter (96 and up): decaying ±1 pulses at the folded peaks |
| DECAY | Decay | one decay for the six envelopes, 10 ms to 4 s to −60 dB, exponential; 127 drones |
| PUNCH | Liquid | on: Skin plus a +24 semitone pitch envelope (25 ms) on the clock, so all six drop together; off: Skin |
| GATE | sustain | holds the six envelopes at half level while the note is held |
PITCH, FINE and the trig's note set the fundamental, two octaves below the Alto reference (no octave switch). Velocity is applied by the OS after the voice. Every trig restarts the six envelopes at full level and every phase at a quarter cycle: the instant onset and the analog pop.
| Packaged as a machine package, composes in model27 | yes (3b4e972) |
claims.py --check |
pass |
| Combines with the other model27 packages | no — 15 overlap problems, see PORTING.md |
| Emulation proof | declared 2026-11-03; not re-run for this repository (needs the m68k toolchain) |
| Tested on a real Model:Cycles | yes — 2026-11-03, by the owner, at slot 11 as cycles-engines composes it |
BIAS is also offered on the flasher, as one engine among several: https://100demons.github.io/cycles-engines/flasher/ (slot 11, machine 10, status Tested).
Cost, from tools/emu/test_bias.py §8 on the OS's own voice loop (instructions per block, one voice):
| mean | max | |
|---|---|---|
| Default sound | 4 859 | 6 544 |
| Hardest, note 60 | 5 793 | 6 864 |
| Hardest, note 121 | 6 064 | 7 072 |
| Hardest, all four knobs moving | — | 7 141 |
| TONE, one voice, for comparison | 6 926 | 7 403 |
So BIAS's worst block is 96 % of a TONE voice — it is a heavy machine, and six of them cost about 28 750 instructions at the worst setting. That is a design fact a host project has to accept before anything else.
tools/machines/bias/ the machine: bias.c, bias_config.h (every tuning value), bias_tables.h (generated),
manifest.json (cycles-mod/0.1), bias.o (the committed object), LICENSE
tools/gen_bias.py writes the tables, the object and the tweak; --check verifies them
tools/emu/test_bias.py the emulation proof, on the OS's own code (Unicorn)
tools/emu/bias_ref.c the host build of the same C, for the bit-for-bit comparison
tweaks/ 53-bias.json, the same machine as a fixed-slot tweak for Modded-Cycles 2.0
notes/01-bias.md the technical note, in French: addresses, decisions, measurements
CHANGES.md what BIAS 2.0 changed, spec row by spec row
GAP_REPORT.md the audit that led to 2.0
PORTING.md what each host project needs, and what is still missing
The generator and the proof were written inside a model27 checkout (its compose.py places a package and
assigns its slot, its payload and its registration). They do not run on their own.
# 1. this repository, and a model27 checkout pinned to the commit the package was proven against
git clone https://github.com/100demons/bias.git
cd bias && ./scripts/setup-model27.sh # clones model27 at 3b4e972 and drops the package in
cd model27
# 2. your own official file, from elektron.se (never committed)
python3 tools/gen_bias.py --cycles model-cycles_OS1.13.syx --check
python3 tools/emu/test_bias.py --cycles model-cycles_OS1.13.syxscripts/setup-model27.sh does the whole setup: it clones durchgemacht/model27 at
3b4e9721d056057052aa8c102aea1c9fe495919b, then copies tools/machines/bias/, tools/gen_bias.py,
tools/emu/test_bias.py, tools/emu/bias_ref.c and tweaks/model-cycles_OS1.13/53-bias.json into it. Nothing is
installed, committed or pushed; delete the directory to undo it.
Toolchain. Regenerating bias.o and running the proof need m68k-elf-gcc and m68k-elf-binutils
(brew install m68k-elf-gcc m68k-elf-binutils). Without them, gen_bias.py --check stops at the object and
test_bias.py stops at the EMAC disassembly; only its packaging section runs. Say so in a report rather than
calling it a pass.
Firmware. Never commit an Elektron image, original or modified, nor anything extracted from one. The official
file is model-cycles_OS1.13.syx, SHA-256 44fe5862…9800640c, from elektron.se.
MIT for everything here, © 2026 100demons. Third-party terms and the Noise Engineering and Elektron statements are in THIRD-PARTY-NOTICES.md.