Firmware Hero
0

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

Source code

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.
Open the installerOpens angellinares.github.io

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

CommandDoes
dnfw inspectreport transport, container, sections and every integrity field
dnfw extract -o DIRwrite each section out, depacked where it is compressed
dnfw build -s 3=FILE -o OUTrebuild with a replaced section, recomputing every checksum
dnfw diffcompare two images section by section
dnfw check --stockthe safety checklist of a modified image against stock, as the site's Firmware Check shows it
dnfw mods list / apply / extractthe mods above: list them, apply them, extract their factory content
dnfw mods matrixtry every pair of mods and report which combine
dnfw patch list / applydeclarative single patches with stock-byte guards
dnfw paramsfind and dump the instrument's parameter table
dnfw symbols / symbolmapthe 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 cavefind free space and size a hook for a code-cave detour
…

Read the full instructions

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 …

Read the full instructions

Credits, license and support

License
AGPL-3.0