Mod

rytm-mods-src

Rising56/100

Source code for MrScruff's ARMkII Modifications

rytm-mods-src is a mod for the Elektron Analog Rytm MKII, by @Iced-Cream. Open source under GPL-2.0, 5 stars on GitHub.

forElektron Analog Rytm MKII·by@Iced-Cream

Unclaimed. Is this yours? Sign in with GitHub as @Iced-Cream to claim it.

Downloads
0
Stars
5
Forks
0
Commits
6
Last commit
Get the source

No release files yet. Build from source.

GPL-2.0· Iced-Cream/rytm-mods-src·downloads come from the creator’s GitHub releases

6
Commits
0
Releases
6 commits and 0 releases in the last year
Activity · last 12 months

Public copy of MrScruff's firmware modifications for the Analog Rytm MKII, redistributed with permission. Released as-is, responses to issues should not be expected.

rytm-mods

Firmware modifications for the Elektron Analog Rytm MKII, OS 1.73.

Every build starts from the pinned stock image and rebuilds from source. The .syx is an artifact; the patch sources, the symbol map and the allocation registry are the project.

Same conventions as octatrack-mods, same registry and verification discipline, different device. Nothing is shared between the two trees.

Layout

pathwhat
stock/checksum of the pinned stock firmware, which you supply. Never written to.
re/cumulative reverse-engineering knowledge: symbols.toml, subsystem notes, Ghidra bootstrap
mods/NNNN-slug/one modification: manifest, stub source, design rationale
requirements.txtPython packages for the mod 0006 and 0013 calibration and measurement tools
registry/allocations.toml - every claim on cave space and detour sites
tools/build, layout validation, verification, symbol generation, cave scan; capture off the device (mix_capture.py); mod 0013 measurement (voice_dac_*.py)
vendor/third-party code that is executed (elektron-firmware-tool), fetched by make setup
docs/user manual, flashing, hazards, calibration
build/artifacts, gitignored

Build

Prerequisites:

  • Python 3.11 or newer (build and verify use only the standard library)
  • git, make and a C compiler, for the vendored container tool
  • m68k-elf-binutils (brew install m68k-elf-binutils on macOS)
  • a Ghidra install, only for make ghidra

The stock firmware is not included. Download Analog Rytm MKII OS 1.73 from Elektron's support site and place the .syx at stock/Analog-Rytm_MKII_OS1.73.syx. The build refuses any file whose checksum differs from stock/SHA256SUMS.

make setup     # venv + Python deps, clone and build the vendor tool at its pinned commit
make verify    # build + assert the result

Produces build/Analog-Rytm_MKII_OS1.73_<tag>.syx, the only delivery format this device has - there is no CF-card .bin equivalent. The default build's tag is 0000_0002_0003_0004_0006_0008_0009_0010_0012_0013_0014_0015. See docs/FLASHING.md to install it.

Build a subset for hardware bisection:

.venv/bin/python tools/build.py --mods 0000-shared 0002-euclid-accents

The container

Unpacks and repacks with the vendored tool, all checksums verified, five sections:

idnamesizeload basewe touch it
5meta15 B raw-no
2bootstrap42,3020x07020000no - see docs/HAZARDS.md
1FPGA149,5160x00000000no
3MAIN OS3,005,4320x40000400yes, this is the whole project
8?159,9480x00000000no

MAIN OS is ColdFire big-endian, as on the Octatrack, but it is a C++ build with its Itanium-ABI symbol names left in (ParameterPageView::changeParameterLockValue, AnalogRytm::logicalParamID_t, Kit::updateMirror). Most of the map can be recovered by demangling rather than by guessing.

Section 8 is new in 1.73, little-endian ARM Thumb rather than ColdFire, and carries {"version": "1.00E", "release": "0018"}. 1.73's only listed improvement is "[MKII] Added Outbox 8 configuration support", so it is almost certainly the Outbox 8's own firmware riding along - inferred, not proven.

make verify asserts that sections 5, 2, 1 and 8 come back out of our rebuilt .syx byte-identical to stock, so a mistake can only ever reach MAIN OS.

Mods

The default build enables all of these. Retracted mods and one-off hardware probes are not part of this package; the pool notes in registry/allocations.toml still record what those probes established.

idtitlestatus
0000The shared runtime other mods call intobuilt
0002Euclidean generator places accents instead of trigshardware-verified
0003Per-track random velocity offsetbuilt
0004Two per-sound random modifiers on a second LFO pagebuilt
0006Scrolling compressor gain-reduction estimatehardware-verified
0008Filter frequency shown in Hzhardware-verified
0009Main output RMS indicator on the compressor VOL labelbuilt
0010NO + PLAY toggles between the edited kit and the saved onehardware-verified
0012SLICE LOOP in the track menu: sixteen trigs slicing a one-bar loophardware-verified
0013Voices to MAIN through the DAC, with a per-sound filterhardware-verified
0014CTRL ALL: TRK + knob turns that parameter on every sound trackhardware-verified
0015ENV RESET reaches AMP and AMP+FILThardware-verified

Status ladder: re-only -> built -> hardware-verified, plus retracted. Only hardware-verified counts.

Adding a mod

  1. Add any new addresses to re/symbols.toml with an honest status.
  2. Claim cave space and detour sites in registry/allocations.toml, recording the stock bytes at each detour host in expect. A mod may hold several cave claims, each naming the section it holds (.text by default): the pools are separate regions of the image and can never merge, so anything larger than the biggest free run has to be split, and the split belongs in the registry rather than being implied by sizes.
  3. Write mods/NNNN-slug/{mod.toml,stub.s,design.md}.
  4. make verify, then flash that mod alone.

The expect bytes are the load-bearing guard: if an address is wrong or two mods collide, the build aborts instead of quietly patching the wrong place.

Before the first mod ships, the cave pool has to be earned: make cavescan reports the candidates, registry/allocations.toml explains why the current one was chosen, and it stays status = "candidate" until it has been proven untouched at runtime on hardware. octatrack-mods inherited a pool it had not checked and lost a round trip to it.