About
Highlights
- Provenance work on Machinedrum OS 1.63 and Octatrack OS 1.40C
- Reference baselines in Gearmulator (Machinedrum) and octemu (Octatrack)
- Port plan, work packages and a compatibility matrix
- Synthetic capture comparison checks
What you need
Nothing to flash. To contribute: Git, Make and Python 3.10+ for the public checks. Firmware, captures and emulators stay on your own machine.
Good to know
Current stage: feasibility research. A Machinedrum boot on octemu or an Octatrack, ported DSP audio and a flashable build have not been shown yet. Documentation and tooling contributions are possible without firmware or an Octatrack.
README
octamachine
Port the actual Elektron Machinedrum firmware to the Octatrack, as close to 1:1 as possible.
The aim is to run the original Machinedrum OS and DSP programs on Octatrack hardware, preserving its machines, effects, sequencer, UI behavior, MIDI, sampling, and saved state. Hardware differences may require small, documented adaptations. Each change must be backed by evidence and a comparison with the original behavior.
Current stage: feasibility research. The local MD UW OS 1.63 image has been identified and trace instrumentation has been compiled. Machinedrum boot on octemu or Octatrack hardware, ported DSP audio, and a flashable build are still unproved. See project status for the current evidence and next work.
Getting started · Port plan · Contributing · Agent handoff
Start here
You can contribute to documentation, source research, and synthetic tooling without firmware or an Octatrack. The repository checks need Git, Make, and Python 3.10+, with no third-party Python packages.
git clone https://github.com/repeat98/octamachine.git
cd octamachine
make checkThis validates the reference manifest, compiles the Python scripts, and runs the synthetic capture-comparison checks. Emulator builds and firmware execution have separate prerequisites.
| I want to… | Start with |
|---|---|
| Understand what works and what is still unknown | Project status and compatibility matrix |
| Set up sources, audit my firmware, or run an emulator | Getting started |
| Pick a concrete contribution | Contributor guide and work packet index |
| Hand work to an agent | Handoff template and AGENTS.md |
| Review the current technical evidence | Boot feasibility and research log |
How the port is being developed
- Establish reference behavior. Identify exact firmware/source revisions and capture Machinedrum behavior in Gearmulator MD/MM.
- Prove the target setup. Run unmodified Octatrack firmware in octemu, both headless and with its real-time front panel.
- Choose a feasible architecture. Verify CPU, DSP, memory, and peripheral requirements against mechanisms that can run on the physical Octatrack.
- Adapt and compare. Bring up the original host firmware and DSP payloads, then test controls, sequencing, audio, MIDI, and persistence.
- Validate on hardware. Proceed through image, recovery, and physical parity gates before claiming support.
The port plan breaks this into numbered work packets with prerequisites, deliverables, acceptance checklists, and handoffs. Every work prompt records completed and remaining work. A successful emulator experiment only establishes the behavior that was measured.
The two emulator roles
| Emulator | Role here | How it is included |
|---|---|---|
| Gearmulator MD/MM | Machinedrum reference for boot, state, MIDI, and audio comparisons | Pinned research checkout fetched into ignored vendor/gearmulator-md-mm/ |
| octemu | Octatrack target environment with headless scripts and a real-time SDL panel | Pinned source submodule at vendor/octemu/ |
octemu is included as source. Build it locally with its dependencies and your own Octatrack OS; the pinned version documents a macOS setup. It currently boots Octatrack firmware. A Machinedrum target profile is future port work. Emulator setup and run commands.
Contribute one work packet
The first technical assignments are source provenance (WP-01), firmware/target profiles (WP-02), and capture/comparison contracts (WP-03). Check the live queue before claiming one.
Use a task branch or fork, advance one observable result, and submit a PR with reproduction steps and evidence. Update the packet's status, completed/remaining checklist, and next action after every work prompt. CONTRIBUTING.md covers the full flow, including the protected main branch and required CI check.
Upstream work
These projects supply the research and tooling foundations. Each has its own license and support scope.
| Repository | Role |
|---|---|
| sambanks/octabam | Octatrack 1.40C image tooling, hardware research, ColdFire/DSP work, and verification harnesses; a possible tooling or carrier base subject to feasibility work |
| markandrus/octemu | Octatrack emulation with headless scripts and an SDL front panel; our tracked source submodule |
| joelanders/gearmulator-md-mm | Firmware-running Machinedrum and Monomachine reference emulator |
| dsp56300/gearmulator | Upstream emulator architecture and CPU/DSP foundations |
| mamedev/mame | Elektron hardware skeleton and notes; marked non-working/no-sound |
| mxldyn/octamax | Earlier Octatrack image-format and memory-map research |
| dsp56300/dsp56300 | DSP emulation used by the surrounding projects |
| joelanders/mc68k-md-mm | ColdFire/68k emulator fork used by Gearmulator MD/MM |
| mischa85/elektron-firmware-tool | Elektron firmware container tools used by octemu and related work |
| QEMU | CPU emulation base for octemu's patched build |
references.json records the research repositories and selected pins. make refs fetches missing checkouts; it leaves existing directories untouched. Only vendor/octemu is a tracked submodule. Other research checkouts remain ignored. Local emulator changes are kept as reviewable patches under patches/.
Repository map
| Path | Purpose |
|---|---|
docs/GETTING_STARTED.md |
Setup, commands, expected outcomes, troubleshooting |
docs/STATUS.md |
Current evidence, active work, next queue |
docs/PORT_PLAN.md |
Architecture questions, gates, dependency index |
docs/work_packets/ |
Packet briefs, checklists, prompt histories |
docs/templates/ |
Reusable work packet and agent handoff |
scripts/ |
Reference management, emulator patch setup, read-only image audit, and capture comparison |
src/image/, src/compat/, src/dsp/ |
Reserved homes for port implementation |
patches/ |
Separate octemu and Gearmulator changes |
tests/fixtures/ |
Reviewed metadata and future synthetic comparison fixtures |
base_firmware/, private/, out/, build/ |
Ignored local inputs, captures, and build output |
Firmware, distribution, and hardware
Firmware is supplied locally by contributors. Keep ROMs, OS files, extracted DSP programs, derived images, raw captures, and private samples/projects out of Git. Put Machinedrum inputs in ignored base_firmware/; see the artifact guidance before sharing evidence.
The pinned octemu README documents restrictions on distributing its combined binaries. Follow each upstream project's license; linking or fetching a project does not grant permission to redistribute its code or firmware. This repository has not yet declared a project-wide code license.
There is no supported installation or flashing procedure for this port yet. Physical tests require the plan's emulator, image, recovery, and authorization gates.
octamachine is independent of Elektron and the upstream projects listed above.
Pictures in the README load from GitHub.
- Language
- Python
- Stars
- 17
- Forks
- 0
- Created
- 09-23-2026
- Last commit
- 1 week ago

