digihealth

by irpina·Mod

A Performance and Diagnostic Mod for Elektron Digitakt Mk1

Version v1.1·released 2 days ago·87 downloads
digihealth
Preview picture from GitHub

About

A performance and diagnostics mod. On the Digitakt MKI it adds FAST AUDIO, which runs the audio render from the free on-chip SRAM for a lower DSP load, and SYSTEM INFO, which shows CPU, DSP, RAM and free sample memory in the top bar.

Highlights
  • FAST AUDIO (Digitakt): the same code and the same sound, the DSP load went from 80.5 % to 72.0 % in the author's measurement
  • SYSTEM INFO: two alternating pages in the top bar
  • A read-only USB diagnostics channel for a computer (tools/digiusb.py)
  • Version 1.1 brings SYSTEM INFO to the Digitone MKI and Digitone Keys
  • Combines with other elekloader mods such as digislicer or DigiSophie

What you need
A Digitakt MKI on OS 1.53 or 1.54, or a Digitone MKI / Digitone Keys on OS 1.43, your own stock OS file and elekloader.

Good to know
The FAST AUDIO figures were measured on a unit with the custom builds this mod comes from. The Digitone version has been checked in an emulator, not yet on a unit. FAST AUDIO checks itself every second and falls back to the original code if anything overwrote it. The USB helper runs on Windows only.

README

digihealth

A performance and diagnostics mod for the Digitakt (mk1), OS 1.53 and 1.54. It adds two rows to SETTINGS:

  • FAST AUDIO (on by default) runs the audio render's hot code from the processor's free on-chip SRAM instead of DDR. It is the same code, so the audio is identical, and the DSP load is lower. Measured on a unit, with the same song before and after:
    • the render went from 537 to 480 µs a block;
    • DSP load went from 80.5 to 72.0 %.
  • SYSTEM INFO shows CPU, DSP, RAM and free sample memory in the top bar. A read-only USB diagnostics channel lets tools/digiusb.py read the same figures, and more, from a computer.

On the Digitone (mk1) and Digitone Keys, OS 1.43, it is SYSTEM INFO alone (digihealth 1.1): see The Digitone.

It is an elekloader mod. elekloader builds a custom OS file on your own machine, from your stock OS file and the mods you pick; nothing from Elektron is distributed.

FAST AUDIO

The render's hot code, 0x400716c0-0x4007629a (about 19 KB), is copied into the SRAM, which the OS clears at boot and never uses. The copy's references to itself are pointed at the copy, and the render's calls go through stubs that pick the copy or the original.

  • When it switches on: two seconds after the unit's screen comes up, once. Untick it in SETTINGS and it stays off until the next power-on; unticking isn't saved.
  • Safety nets:
    • It refuses to start if that SRAM isn't empty.
    • Once a second it checks the copy against its checksum. If anything has written over it, it goes back to the original code for good.
    • FUNC at power-on and the stock OS file always recover the unit.

Why it is faster: the render runs about 17 KB of code for every block through an 8 KB instruction cache, which costs about a thousand cache misses a block. The SRAM answers without wait states.

SYSTEM INFO

  • The top bar shows two pages, two seconds each:
    • CPU and DSP load (DSP now and its peak in the last second);
    • free RAM (the heap) and free sample memory.
  • The USB channel is SysEx with Elektron's manufacturer header and a device byte (0x7D) that no Elektron machine uses, so a stock OS ignores it. It has three commands, all read-only: HELLO, STATS (the once-a-second snapshot: render and idle time, the heap by block size, free sample memory, FAST AUDIO's state) and PEEK (DDR and the SRAM only).
python tools/digiusb.py cfw          # which mod answers, and its uptime
python tools/digiusb.py stats 10     # ten readings, one a second
python tools/digiusb.py peek 0x4020bb14 64

digiusb.py runs on Windows (winmm, through ctypes; no packages). Close Elektron Transfer first: Windows lets one program at a time open a MIDI port.

The Digitone

digihealth 1.1 is SYSTEM INFO for the Digitone mk1 and Digitone Keys, OS 1.43: the same row, readout and USB channel, built from the same source with the Digitone's addresses (dn1/).

  • CPU is the main CPU's load, as on the Digitakt.
  • DSP is the main CPU's audio render: the effects and the mix. The FM voices run on the Digitone's second CPU, which no mod changes, so their load is not shown.
  • The second page is free RAM alone: the Digitone has no sample memory.
  • FAST AUDIO is not ported yet. The Digitone's render is different code, and less of the SRAM is free.

It needs the Digitone's core (core-dn1-2.0a.elemod), which elekloader 0.4.0 builds in.

Install

You need three things:

  • elekloader:
    • Windows: download elekloader-<version>-windows.exe from elekloader's releases and run it. The core mod, which every linkable mod needs, is built in (the Digitone's from elekloader 0.4.0).
    • Other systems: run elekloader from source with Python 3.9 or newer (see its README). There you also need the core for your device and OS (core-2.0a.elemod or core-2.1.elemod for the Digitakt on 1.53, core-2.1-os1.54.elemod on 1.54, core-dn1-2.0a.elemod for the Digitone), attached to this repository's releases too.
  • This mod, from this repository's releases: digihealth-1.0.elemod for the Digitakt mk1 on OS 1.53, digihealth-1.0-os1.54.elemod on OS 1.54 (the same mod), or digihealth-1.1.elemod for the Digitone mk1.
  • The stock OS file: Digitakt_OS1.54.syx or Digitakt_OS1.53.syx, from Elektron's Digitakt downloads, or Digitone_and_Digitone_Keys_OS1.43.syx, from Elektron's Digitone downloads (the .zip works as it is). elekloader recognises the file by its hash.

Then build your OS in elekloader's window:

  1. Your stock OS file: elekloader asks for it the first time; Change stock firmware... (top right) picks another.
  2. + Install from file...: choose the digihealth for your device and OS. From source, install its core the same way.
  3. Tick digihealth. core is ticked with it. The check below the list should say "No conflicts ... Ready to build". To add other mods, such as digislicer, install and tick them as well.
  4. OS version shown: the 4 characters the unit will show, for example DH10.
  5. BUILD FIRMWARE, and save the .syx. elekloader verifies it before writing it.

Flash it with Elektron Transfer, as for any OS update (Elektron's instructions):

  1. Connect the unit over USB.
  2. In Transfer, select the unit and Connect.
  3. Drag the .syx onto Drop files here.
  4. Press YES on the unit.

Don't turn it off until the upgrade is done.

Or on the command line (elekloader from source):

python -m elekloader.patch --stock Digitakt_OS1.54.syx \
    --mod core-2.1-os1.54.elemod --mod digihealth-1.0-os1.54.elemod \
    --out Digitakt_OS1.54-health.syx --version DH10

Recovery: elekloader never changes the bootloader, so the stock OS file always restores the unit. Hold FUNC while powering on for the startup menu, and press TRIG 4 for OS UPGRADE. Then send the stock .syx with Transfer's legacy OS upgrade mode.

Build it from source

The Digitakt mk1 cross toolchain (m68k binutils and gcc; on Debian or Ubuntu, apt install binutils-m68k-linux-gnu gcc-m68k-linux-gnu; on Windows, inside WSL) and elekloader, importable (installed, or on PYTHONPATH):

python build.py --stock Digitakt_OS1.53.syx      # -> out/digihealth-1.0.elemod
python build.py --stock Digitakt_OS1.54.syx      # -> out/digihealth-1.0-os1.54.elemod
python build.py --stock Digitone_and_Digitone_Keys_OS1.43.syx   # -> out/digihealth-1.1.elemod
python -m elekloader.lint out/digihealth-1.0.elemod --stock Digitakt_OS1.53.syx --with core-2.0a.elemod

Use build.py, not elekloader.sdk.build alone, with an elekloader that knows mod.json's ports (0.4.0 or later). FAST AUDIO needs parts worked out from your stock file:

  • the checks that the code block can run from the SRAM;
  • its fix-ups;
  • the render's call-site stubs.

build.py computes them with elekloader's ColdFire decoder, then hands them to elekloader's SDK.

file
mod.json the mod: its sites, handlers, tables and resources; fast_audio is build.py's input; under ports, 1.54's sites
build.py FAST AUDIO's plan from the stock file, then the SDK
fastaudio.s the FAST AUDIO row, the copy, the stubs' switch and the watchdog
sysinfo.s the SYSTEM INFO row and readout, the render and idle timing, the USB channel
os153.inc, os154.inc the stock routines it calls, for each OS (1.54's port defines OS154)
dn1/mod.json, dn1/dn143.inc the Digitone mk1's mod (SYSTEM INFO; sysinfo.s with DN143) and its stock routines
tools/digiusb.py, tools/winmidi.py the USB channel's other end

How it was checked

These checks ran in digikit's emulator, which runs the stock OS and the mods through the real bootloader.

  • Bit-exact audio: with FAST AUDIO on, every output sample and the audio engine's whole state after every render are identical to stock's. Four scenarios: a sample-heavy pattern, a trig-heavy pattern, all eight tracks busy, and parameter changes while playing (6,000-7,500 renders each). This holds for digihealth alone and combined with digislicer.
  • A cold boot against stock (35.6 s): FAST AUDIO comes on by itself, then the row is unticked and ticked again, with playing in between.
    • Every sample of the audio is identical to stock's. The recording stops one 1 ms block earlier: the hook bus changes the UI task's timing by a few instructions, and core alone does the same.
    • The screens are those of the custom build the mod comes from, to the pixel.
  • On a unit: FAST AUDIO and SYSTEM INFO ran on a Digitakt mk1 in the custom builds this mod comes from, where the figures above were measured.
  • The Digitone (digihealth 1.1 with its core): every stage of digikit's firmware check passes, from the file's own bootstrap and updater to a scripted session, against stock.
    • With SYSTEM INFO off, every screen is identical to stock.
    • Switched on in SETTINGS, the readout shows "CPU 58% DSP 54%/54%" and "RAM 13.8M" in the top bar. The emulator's own measurement of stock is 58 % CPU.
    • The audio is identical to stock until PLAY, then the same sound, shifted by when the key press lands. Stock against itself with PLAY 0.3 ms later differs in the same way.
    • Its routines and sites are the Digitakt 1.53's found again in 1.43: the same code, instruction for instruction, but for its addresses.
    • Not yet on a unit, and the USB channel not yet tried.
  • The Digitakt mk1 on OS 1.54 (the same mod, with 1.54's addresses), in the emulator:
    • core + digihealth against stock 1.54: every stage passes, and the check's nine screens are identical, FAST AUDIO on.
    • With digislicer and digineighbor too, against the same four for 1.53: the FAST AUDIO script (on, playing, off, playing) is identical screen for screen. With SYSTEM INFO on, its RAM page reads the same on both; its two pages alternate at different moments. 1.54's CPU page read "CPU 10% DSP 3%/45%" while playing. The emulator's cold boot has no samples, so these runs play silence: they check the screens and that nothing sounds, not the audio of a playing sample.
    • FAST AUDIO copies the same render block in 1.54, at the same addresses; build.py plans its fix-ups and stubs from the 1.54 file (10 and 14, as for 1.53). Bit-exact audio has not been measured on 1.54, nor tried on a unit.

Licence

GPL-2.0-or-later. digihealth is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details: LICENSE holds version 2.

Not affiliated with Elektron. Digitakt and Digitone are trademarks of Elektron. Custom firmware is at your own risk.

Pictures in the README load from GitHub.

What's New v1.1released 2 days ago
digihealth 1.1

Performance and diagnostics rows in SETTINGS, as elekloader mods: for the Digitakt (mk1) on OS 1.53 and 1.54, and now for the Digitone (mk1) and Digitone Keys on OS 1.43.

  • FAST AUDIO (Digitakt; on by default) runs the audio render's hot code from the free on-chip SRAM. It is the same code, so the audio is identical, and the DSP load is lower. Measured on a unit (1.53), the render went from 537 to 480 µs a block, and the DSP load from 80.5 to 72.0 %.
  • SYSTEM INFO shows CPU, DSP, RAM and free sample memory in the top bar. A read-only USB diagnostics channel answers tools/digiusb.py.

What's new in 1.1

  • The Digitone mk1 and Digitone Keys (OS 1.43): SYSTEM INFO, as digihealth-1.1.elemod, with the Digitone's core.
    • Its second page is free RAM alone: the Digitone has no sample memory.
    • FAST AUDIO is not ported to the Digitone: its render is different code, and less of its SRAM is free.
  • The Digitakt on OS 1.54, Elektron's release of 2026-09-30: the same Digitakt mod, as digihealth-1.0-os1.54.elemod. It needs elekloader 0.4.0. On 1.53, digihealth-1.0.elemod is 1.0's code as before.
  • Licence: GPL-2.0-or-later.

Which files

your unit stock OS file mod core
Digitakt mk1, OS 1.53 Digitakt_OS1.53.syx digihealth-1.0.elemod core-2.1.elemod
Digitakt mk1, OS 1.54 Digitakt_OS1.54.syx digihealth-1.0-os1.54.elemod core-2.1-os1.54.elemod
Digitone mk1 or Keys, OS 1.43 Digitone_and_Digitone_Keys_OS1.43.syx digihealth-1.1.elemod core-dn1-2.0a.elemod

elekloader refuses a mod made for another device or OS version. The cores are elekloader 0.4.0's, built from its mods/. The Windows and macOS apps bundle them from 0.4.0 on; from source, install the core with the mod. On 1.53, 1.0's core-2.0a.elemod works too.

Files

file sha256
digihealth-1.0.elemod aba9413ee205e1368ec3997172a84e59eaa4e787d267bc7a3e94a161b4fcd0f1
digihealth-1.0-os1.54.elemod b8a49c1137fb3f2a06338f71f0d5730812481a0ce1cef362144334fe55b11c5a
digihealth-1.1.elemod 5d2e5e201f9cd6323f0641093817250b030b196dd00816e2b18ca6ab0ed0ca99
core-2.1.elemod f38b0c193677a060b3fdb28fe71b9332be8a5e7d36ecaf91a3c86a61bab558eb
core-2.1-os1.54.elemod 8c1fe78ccd1427d6a93f181eaad9f064efb65cf6dd683192dbcc33e83dc548b9
core-dn1-2.0a.elemod c6d9dbed28965bce4a827c292f499c8f5309187bf136ffb52e237bd01186b54f

Install

  1. Get elekloader 0.4.0 or later, and your unit's stock OS file from Elektron (the .zip works as it is).
  2. In elekloader's window, Install from file the digihealth for your unit (from source, its core too). Tick it, and Build firmware.
  3. Send the .syx to the unit as you would any OS update.

Recovery: hold FUNC while powering on for the startup menu, press TRIG 4 (OS UPGRADE), then send the stock OS file. elekloader never changes the bootloader.

It combines with digislicer and digineighbor on the Digitakt.

Checked

In digikit's emulator:

  • The Digitakt, OS 1.53 (1.0): with FAST AUDIO on, every output sample and the audio engine's state after every render are identical to stock's, in four scenarios, alone and with digislicer.
  • The Digitakt, OS 1.54:
    • Core + digihealth against stock 1.54 passes every stage, and the check's nine screens are identical, with FAST AUDIO on.
    • With digislicer and digineighbor, against the same four for 1.53, the FAST AUDIO script (on, playing, off, playing) is identical, screen for screen.
    • That emulator had no samples, so bit-exact audio has not been measured on 1.54.
  • The Digitone, OS 1.43:
    • Every stage passes, from the file's own bootstrap and updater to a scripted session, against stock. With SYSTEM INFO off, every screen is identical.
    • Switched on, the readout shows "CPU 58% DSP 54%/54%" and "RAM 13.8M"; the emulator's own measurement of stock is 58 % CPU.

The Digitone and OS 1.54 builds have not yet been tried on a unit.

Custom firmware is at your own risk. Not affiliated with Elektron.

Language
Assembly
License
GNU General Public License v2.0
Stars
5
Forks
0
Created
09-26-2026
Last commit
2 days ago

Added by Neutron on Yesterday · Last edited by Neutron, 16 hours ago · History (2 versions)




User Profile Send Private Message E-mail Find all posts Find all threads Mod Tools Admin Tools