2026
Python
Reverse engineering
Digital piano

MUSIC HARDWARE / REVERSE ENGINEERING

NUX NEK-100: nux-dsp-mod

New features for a digital piano, added as patches to the official firmware file you already have

15
Patches in the patcher
0
NUX files distributed
0.5 W
Asleep, against about 2 W on
500
Sound names in Polish
Features I missed, without sharing the vendor's firmware

The NUX NEK-100 is a digital piano whose sounds, menus and screen are all run by the firmware of its DSP chip. I started changing its firmware on 1 October 2026, because I wanted things the stock firmware does not do: start with my own preset, have a Polish interface, switch the speaker off when nothing plays, play my own instruments. Later came DOOM, for fun, and at the end the sustain pedal sent to the wireless dongle.

nux-dsp-mod is a set of patches and the tools to apply them. It distributes no NUX code. You take the DSP file from NUX's official update package, the patcher checks its SHA-256, refuses any other file and gives you a patched one. Flashing the official file again restores the original firmware.

THE CHIP

Learning an instruction set nobody documented

The NEK-100's DSP is a Dream SAM5xxx chip. Its control CPU runs a 16-bit, word-addressed instruction set similar to Dream's P16, with no public documentation. I inferred it from the firmware and marked every instruction either as confirmed, when a patch using exactly that form behaved as predicted on the instrument, or as a hypothesis.

The disassembler and assembler round-trip the firmware byte for byte, whatever is still unknown. That makes patching safe to iterate: a working experiment becomes a small patch file that contains my own instructions and short checks of the bytes it expects, not the vendor's code.

EVERYDAY FEATURES

Small changes that matter when you play every day

Most patches fix things I ran into while playing. A user preset can load at power-on instead of the factory default. Touch gets an OFF mode with fixed velocity and an optional CUSTOM curve. Each part gets its own octave, so a split's left hand reaches the lowest bass. With sustain_midi_out the pedal's CC64 also reaches the NUX wireless dongle, which the stock firmware only does for the panel's Sustain key.

  • Separate auto-off times on battery and on cable
  • Startup with the settings you had when you switched off
  • Display backlight timeout and an optional usage log for battery measurements

POWER

Measured at the wall socket

With a watt meter on a NEK-100 with a full battery: about 2.0–2.1 W on with the speaker on, about 1 W with the speaker off, and about 0.5 W asleep. The speaker amplifier takes about half of the power, so switching it off after a silence saves the most. Sleep slows the chip's clock and halves what is left. The backlight made no measurable difference.

SOUNDS

Own instruments in place of factory sounds

Up to four instruments from SoundFont 2 files can replace any of the 500 sounds. The tools take over key ranges, tuning and loops and build the rest from a template sound of your own soundbank, so the result contains no NUX data. The repository ships one instrument, a meowing Cat Piano made from a CC0 recording.

Grander Piano is the factory grand with a loop added to its samples from F#4 up, which stock fade by 30 dB within a second even with the key or pedal held. Filters, LFOs and chorus from SoundFonts are not supported yet.

FOR FUN

Can it run DOOM?

Yes. The DOOM demo runs on the NEK-100 itself, on its 128×64 one-bit screen, with its music played by the piano's own synthesizer. It is a DOOM-style engine of my own, not id's Doom code, which needs 32-bit arithmetic and far more RAM than the piano has. The engine is written in C, renders Doom-format BSP maps and is built with p16cc, a small C compiler I wrote for the control CPU of the piano's Dream DSP chip.

It went in steps. First a test card and a game loop at 20 frames per second on the real piano: a whole frame takes about 0.2 ms to copy and an LCD refresh about 0.8 ms. Then came a raycaster, and then the BSP engine. During development a browser emulator runs the same compiled instructions, but its timing says nothing about the piano's, so I give no frame rate for the demo.

What you can install is a demo, not the full game: one map of my own, Hangar, with Freedoom's textures, sprites and music under the BSD licence, four enemy slots, pistol and shotgun, doors, a lift and an exit switch. Because the map and the assets are free, it can be shared, and it ships as the optional doom_demo patch in the web patcher.

  • C3/E3 turn, C#3 or D#3 forward, D3 back
  • Freedoom's intro on the title screen, E4M8 looping in the level
  • Started from Extra > DOOM, any panel key leaves

How it is used

Patcher in the browser

The web page recognises the model and version of the official file, lists the patches and returns the patched file. It works offline and the file never leaves the browser.

Command line

The same tools in Python 3.8 or newer without dependencies: verify, list, build, plus disassembly and assembly for writing new patches.

Flashing without Windows

nuxdsp flash speaks the instrument's update protocol over USB on Linux or macOS. It was tested with the DSP firmware.

Tested on the instrument

Every patch was tested on a real NEK-100, and presets saved with the stock firmware keep working.

Can I download a modified firmware here?

No. The project distributes only its own tools, address maps and patches. You need the official DSP file from NUX's update package, and the tools only accept that exact file.

What about other NUX pianos?

Other models such as the NEK-110 use the same DSP and a similar firmware. The repository describes how to add one, but only the NEK-100 with DSP firmware 1.0.7 is supported now.

Is it safe?

It is unofficial and at your own risk, and modified firmware may void the warranty. Keep the official file: flashing it back restores the original firmware.

NUX, NEK-100 and Dream are trademarks of their respective owners and are used only to say which device and chip this works with. nux-dsp-mod is not affiliated with, authorised or endorsed by NUX or Dream. DOOM is a trademark of id Software; the port is unofficial and not affiliated with or endorsed by id.

CONTACT

Questions about the patches?

Bug reports and requests for other models are best placed in the repository. For anything else, write to me.

Write to me