dnfirmware
Tools to inspect, modify and rebuild Elektron Digitone firmware, and a set of mods for the Digitone II that we built with them.
- Custom firmware
- Alpha
- Low brick risk
- Reversible
This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it
Before you start
- How hard is it?
- EasyCopy a file or use a web page. No extra software.
- What you need
- A USB or MIDI cable
- Comfort with the command line
- A computer
- Can it break my device?
- Very unlikely to break anything.
- Can I undo it?
- Yes. You can go back to the official software.
Did it work for you?
Did dnfirmware work on your Elektron Digitone II?
No reports yet.
One-tap reports from owners. Bricked reports are checked before they count.
Compatibility
Devices: Elektron Digitone II.
No compatibility information yet.
Getting started
From the project's README ("Installation"):
You need Python 3.11 or later. There are no dependencies.
pip install -e . dnfw inspect 00Resources/00Firmware/DigitoneIIOS1.11dist.zip dnfw mods apply DigitoneIIOS1.11.syx --mod lfo4 -o modded.syx
To run without an install, use PYTHONPATH=src python -m dnfw.cli.main ....
Each command that takes a .syx file also takes the .zip that Elektron ship.
Commands
Command Does dnfw inspect report transport, container, sections and every integrity field dnfw extract -o DIR write each section out, depacked where it is compressed dnfw build -s 3=FILE -o OUT rebuild with a replaced section, recomputing every checksum dnfw diff compare two images section by section dnfw check --stock the safety checklist of a modified image against stock, as the site's Firmware Check shows it dnfw mods list / apply / extract the mods above: list them, apply them, extract their factory content dnfw mods matrix try every pair of mods and report which combine dnfw patch list / apply declarative single patches with stock-byte guards dnfw params find and dump the instrument's parameter table dnfw symbols / symbolmap the C++ names GCC left in the image; a Ghidra seeding script dnfw disasm ADDR [N] disassemble a span (ColdFire V4e, via objdump) dnfw validate-disasm ADDR [N] check another disassembler against objdump dnfw cave find free space and size a hook for a code-cave detour …
Risk and recovery
- Brick risk
- Low
- Reversible
- Yes
- Requires opening the device
- No
From the project's README ("How we check a change before it reaches an instrument"):
- Integrity: the tool calculates every checksum and the HMAC-SHA256 signature again, and checks them on the rebuilt file.
- Boot from reset in an emulator: the bootgate of digikit boots the image from reset (about 11 s on our computer). It watches the fault reporter of the firmware and the refusal of the uploader, and both must see zero hits. scripts/emubootcheck.py is the older route, against a stock control. A snapshot of a machine that has already booted does not count (docs/emulator.md).
- The engine and save/load: scripts/emubootengine.py runs the evaluator of the audio engine. It also takes a stored sound through LOAD and SAVE.
- ColdFire encodings: scripts/checkcoldfire.py rejects an addressing mode that the chip refuses and generic emulators run.
- Per-mod harnesses under scripts/emu.py, each with a stock control.
- DSP code runs offline in the SHARC runner of digikit. A script compares it with a Python reference (scripts/sharcwaverider.py).
- Frame words: a mod can put data in a word of the ColdFire-to-DSP frame. Before it does, two scripts run the stock DSP over recorded and random frames: scripts/sharcframecensus.py and sharcframewordcheck.py. They name every instruction that reads that word (docs/waverider-frame-words.md).
- On the instrument: before we flash anything, the project's test plan gives a written pass and fail for each hardware test. The recovery route (stock through the …
Credits, license and support
- License
- AGPL-3.0