Build and burn

From source to a 27C256

There is no binary release. Build from the repo and use in the real hardware, or in the CLAP plugin.

Build the images

You need SDCC 4.2 or later (sdcc and makebin) and Python 3.

git clone --recursive https://github.com/uAdvanced/openmmt-8.git
cd openmmt-8
bash tools/build_roms.sh

The script builds both OpenMMT-8 profiles and JAM-8, and writes them to dist/roms/. In an existing clone, run git submodule update --init first.

FileWhat it is
openmmt8_rom.binOpenMMT-8 with the part-edit extensions. The TAPE key holds only the MIDI dump.
openmmt8_stock_rom.binOpenMMT-8 stock profile: tape save, load, and verify, without the extensions.
jam8_rom.binJAM-8, the loop and pattern ROM.

To build one at a time:

bash openmmt-8/tools/build_openmmt8_core.sh                         # default profile
OPENMMT8_PROFILE=stock bash openmmt-8/tools/build_openmmt8_core.sh  # stock profile
make -C jam8 rom                                                    # jam8/build/jam8_rom.bin

The profiles are the OPENMMT8_TAPE and OPENMMT8_EDITX defines in openmmt-8/core/core.h.

Check them

Each image is 32 KB. The build fails when it would not fit. The JAM-8 build also fails when XSEG leaves 0x0200–0x07FF, or when its 0x28-byte stack does not fit under 0x80. It prints how much of the 32768 bytes it used.

dist/roms/SHA256SUMS lists the checksums. Check the file you are about to program against it:

cd dist/roms && sha256sum -c SHA256SUMS

Burn and swap

  1. Back up the unit’s memory. Original-unit data does not load into OpenMMT-8, so keep it with the original EPROM. On OpenMMT-8, hold TAPE and press RECORD to send a dump.
  2. Program the image into a 27C256 and verify it.
  3. Power off, swap the EPROM, and keep the original chip.

First boot

OpenMMT-8 starts with the panel workflow from your unit’s manual. The new pages are in part edit. A dump sent back to MIDI in loads and restarts the unit.

JAM-8 shows JAM-8 LOOP ROM and GENERATIVE V1.0. Battery RAM without the JAM-8 signature, including RAM from OpenMMT-8, gets the factory scenes. Hold ERASE at power-on to do that on purpose. Then press PLAY. The JAM-8 manual starts there.

The two ROMs keep different data in the same battery RAM. Moving from OpenMMT-8 to JAM-8 replaces your songs with factory scenes. Send a dump first.

Run the tests

The tests drive the built images in an 8051 emulator. Build the emulator programs, then run the probes:

cmake -S emulator -B emulator/build -DMMT8_EMU_ENABLE_CLAP=ON
cmake --build emulator/build -j
make -C openmmt-8 test   # OpenMMT-8 ROM probes
make -C jam8 test        # JAM-8 host tests, then 26 ROM probe scenarios

Each OpenMMT-8 probe prints PASS or fails with the reason. One arms RECORD, records injected MIDI, punches out with PLAY, and checks that the same bytes come back on MIDI out. The JAM-8 scenarios also check the stack peak against the 8031’s 128 bytes of IRAM. Use --scenario NAME to run some of them.

The build applies emulator/patches/emu8051-mmt8-hardware-fidelity.patch to the emu8051 submodule. Git then shows that submodule as modified. Do not commit that change. The patch file is the record of it.

CLAP plugin

The same repository builds a CLAP plugin with both ROMs built in. It needs CMake 3.20 or later and a C++17 compiler. On Linux, the panel needs the X11 and OpenGL development files.

bash tools/build_clap_plugin_linux.sh     # dist/linux/
bash tools/build_clap_plugin_macos.sh     # dist/macos/, on a Mac
bash tools/build_clap_plugin_windows.sh   # dist/windows/, from Linux or WSL with mingw-w64

Each script builds the ROMs and the plugin, loads the plugin once the way a host does, and writes a release folder. No script copies the plugin into a host folder. Copy mmt8_clap_plugin.clap into one:

Keep LICENSE, THIRD_PARTY_NOTICES.md, and LICENSES/ with the plugin file. The Linux panel needs an X11 window from the host. The macOS panel has not been tested on a Mac. The plugin id is com.mmt8.emulator.stage2. A different id does not open saved projects. Using the plugin covers the panel and the ROM menu.

License

The OpenMMT-8 and JAM-8 code is under the MIT license. Read THIRD_PARTY_NOTICES.md before you distribute the plugin. The full license texts for the bundled components are in LICENSES/.

This repository does not contain the original unit’s ROM or manual. Load a ROM file only when you have the right to use that file. This project is not affiliated with Alesis.