← all projects

OP-1 Lab

FIRMWARE · ASSEMBLY · ON HARDWARE — custom DSP running on the real device

Blackfin assembly · Python · GNU bfin toolchain · op1repacker

The problem

The OP-1 (original, 2011) is a beloved instrument with closed firmware and no extension story. Its DSP runs on an Analog Devices Blackfin processor — an architecture Ghidra doesn’t even ship a disassembler for. If you want new sounds out of this hardware, nobody hands you a toolchain: you build one, and you work out where in a multi-megabyte firmware image your code can safely live.

What I built

A hand-written Blackfin assembly synth engine running on the real hardware: a custom oscillator injected over the stock voltage engine, inheriting envelope, LFO, effects, and polyphony from Teenage Engineering’s own framework — so the custom DSP behaves the way the stock engines do on the device. The supporting toolchain: op1repacker for firmware pack/unpack, the GNU bfin-elf toolchain for assembly and linking, custom Python tools for reading, patching, and mapping LDR firmware images, and a host-side Blackfin interpreter that executes the DSP off-device and renders its audio output to WAV — so an engine is heard and verified before it ever runs on hardware.

The discipline

Flashing someone’s instrument is the easy way to brick it, so the lab runs on rules: read-only analysis first; every patch byte-verified against the image before flashing; the boot-critical regions (te-boot.ldr, COM, Shift, Power) never modified — those are the brick vectors; stock firmware always reflashable. The interpreter’s rendered output is compared against expectations before the device sees a build. Everything is reversible or it doesn’t ship.

The firmware work stays in a private repository — no copyrighted firmware gets redistributed. This writeup is the public artifact; a device recording of the custom engine is coming to this page.