Skip to content
100demonsPublic

About

BIAS: a six-oscillator percussion machine for the Elektron Model:Cycles (OS 1.13), clean-room after the Basimilus Iteritas Alia. Source package, for porting.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

BIAS — a six-oscillator percussion voice for the Model:Cycles

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.

The controls

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.

Status

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.

What is in here

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

Running it

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.syx

scripts/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.

Licence

MIT for everything here, © 2026 100demons. Third-party terms and the Noise Engineering and Elektron statements are in THIRD-PARTY-NOTICES.md.

About

BIAS: a six-oscillator percussion machine for the Elektron Model:Cycles (OS 1.13), clean-room after the Basimilus Iteritas Alia. Source package, for porting.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages