machines : E-mu. EMAX I/II. Emulator II/III/IIIX. ESI. SP-12/1200,
plus Oberheim DPX-1
payload : EMXP by E-Synthesist (emxp.net). win32 console binary.
carrier : Wine. classic WoW64. pinned. nix builds the cage.
Cold storage for warm samplers.
emxpn.exe is not DOS. It is PE32, i386 — a Windows console program.
Windows is a 40 year tire fire. DOSBox is the wrong tool. Wine, the right one.
Run it attached to a Linux terminal and ESC arrives as an escape
sequence — mangled, late, wrong. Run it in Wine's own console window
and ESC arrives as VK_ESCAPE, a key event, the way it did on the XP
box it was written for. The launcher forces the second mode.
The whole trick is:
wine start /wait /unix emxpn.exe
The binary is 32-bit, so the prefix is win32. Upstream Wine is
retiring classic WoW64; nixpkgs follows. This flake pins nixos-25.05,
where the old build still breathes. The lockfile is the headstone —
nothing moves unless you move it. Everything is wrapped: this Wine
never enters your profile, never collides with the Wine you already run.
Anywhere nix exists. Requirements: x86_64-linux, a graphical session,
flakes enabled.
nix run github:Synthesizer-repair/emxp-nix # transient
nix profile install github:Synthesizer-repair/emxp-nix # resident
nix build .# # artifacthome-manager:
inputs.emxp-nix.url = "github:Synthesizer-repair/emxp-nix";
# ...
home.packages = [ inputs.emxp-nix.packages.x86_64-linux.defiault ];NixOS, system-wide:
imports = [ inputs.emxp-nix.nixosModules.default ];
users.users.<you>.extraGroups = [ "disk" ]; # raw media access, no sudoThe proprietary emxpn.exe is not shipped and never will be.
Get it from emxp.net. Run emxp from the
directory containing it, or export EMXP_EXE=/path/to/emxpn.exe.
It is copied once into a dedicated prefix
(~/.local/share/emxp/prefix) and lives there.
emxp the program. opens its own console window.
keyboard only. no mouse. as intended.
emxp -NOSIZING -SCREENREFRESH basic console mode, when the screen lies.Host filesystem is visible inside EMXP as drive Z:.
State persists in the prefix. Delete ~/.local/share/emxp to reset.
Sampler disks do not mount. They get imaged. This is the vendor-sanctioned procedure: image the media, operate on the image, write it back.
emxp-image list # identify the target
emxp-image read /dev/sdX bank.iso # media -> image. read-only on source.
# ... open bank.iso in EMXP, via Z: ...
emxp-image write bank.iso /dev/sdX # image -> media. DESTRUCTIVE.write makes you type the device path back. It means it.
emxp-map /dev/sdX g # device straight into the prefix as G:
emxp-map unmap gemxp-map is direct passthrough — Linux only, unsupported by the
vendor, works when it works. If the Disk Manager stays silent, image.
Raw block access requires the disk group or sudo. Floppies, SCSI2SD,
CF, CD-ROM: all the same to ddrescue.
The dependency chain:
emxpn.exe
-> win32 prefix
-> classic WoW64 Wine
-> nixos-25.05 (lockfile-frozen)
nix flake update walks the pin forward along 25.05. Do it
deliberately. Test EMXP after.
Exit strategy: new-WoW64 runs 32-bit code in a win64 prefix. When
classic WoW64 is gone everywhere, set wine = pkgs.wineWow64Packages.stable
and wineArch = "win64" in flake.nix this should work, but untested.
Until then: the published pin holds.
Glue (scripts, flake): MIT. See LICENSE.
emxpn.exe: © E-Synthesist. Not included. Not redistributed.
Respect the disclaimer in the reference manual before touching
irreplaceable media.
EOF // no warranty. Remember, backups are not optional!