Firmware

SuperOS-606

Hype16/100

Open source firmware for the Roland TR-606 Drumatix.

SuperOS-606 is custom firmware for the Roland TR-606, by @bjornlustic. Open source under MIT, latest release 0.6a (August 2026), 3 stars on GitHub.

forRoland TR-606·by@bjornlustic

Unclaimed. Is this yours? Sign in with GitHub as @bjornlustic to claim it.

Downloads
0
Stars
3
Fork
1
Commits
25
Last commit
Download 0.6a

SuperOS-606_v0.6_combined_a5e4774.syx· 56 KB· +1 file

MIT· bjornlustic/SuperOS-606·downloads come from the creator’s GitHub releases

25
Commits
4
Releases
25 commits and 4 releases in the last year
Activity · last 12 months

SuperOS-606

Open firmware for the Roland TR-606 Drumatix, running on an AT90USB1286 CPU replacement (Teensy++ 2.0 class, or a dedicated CPU board) in the µPD650C socket.

It adds an extended sequencer layer, MIDI in/out with clock sync, a SysEx web editor and firmware updates over MIDI, while leaving the machine's own operating model intact. A combined build also carries an emulator of the stock µPD650C, so one board can boot either the original behaviour or the extended one.

Status: runs on hardware. Sequencer, tools, MIDI sync, the emulator, firmware switching, MIDI firmware updates and flash persistence have all been exercised on a real machine.

The 606's model, kept

  • 32 patterns in two groups of 16, selected on the step buttons; 8 tracks (songs) of chained patterns, selected with the INSTRUMENT dial.
  • The MODE dial's four positions — pattern write, pattern play, track write, track play — behave as the manual describes them.
  • Transport and timing come from the 606's own circuits: START/STOP is the panel's toggle flip-flop, the 24 PPQN tempo clock follows the TEMPO knob or the rear DIN-sync jack.
  • The SCALE switch, PATTERN GROUP, WRITE/NEXT tap write and chase-delete with PATTERN CLEAR all keep their factory behaviour.

What SuperOS adds

FUNCTION is the tool gateway: hold it for a tool map on the step LEDs, press a step to latch a tool, tap FUNCTION to leave.

  • Patterns extended to 64 steps (four 16-step sections; stock-length patterns behave identically).
  • Per-step probability and ratchet (2×/3×/4×), per-instrument loop length and polymeter, swing (tempo-safe: edits latch at the beat pair, so toggling swing can never pull the bar off the clock), play direction, live reslice, drum arp, pattern generate, copy/paste, transform, mute.
  • Tool map: 1 Length, 2 Scale+Swing, 3 Copy, 4 Transform, 5 Probability, 6 Ratchet, 7 Poly, 8 Mute, 9 Reslice, 10 Arp, 11 Direction, 12 Generate, 13 Save. The global accent track is edited like any voice, on INSTRUMENT dial position 0.
  • MIDI in/out: drum notes (velocity ≥ 100 asserts accent), program change + bank select for pattern selection, clock sync as slave or master, soft thru. Incoming clock is jitter-smoothed by a phase-locked timebase (uClock model, 96 PPQN): the sequencer steps at predicted tick times instead of raw byte arrival, and the tick count can never drift against the host. A received MIDI Stop always stops the box, even if it was started from the panel.
  • Config menu (FUNCTION + PATTERN CLEAR), paged: step 1 opens a MIDI channel submenu (default channel 1, omni selectable), step 2 switches the SysEx link on/off entirely, step 3 OUT/THRU, step 8 clock source, step 10 save. CLEAR backs out one level, FUNCTION exits; edits persist automatically.
  • A web pattern editor over SysEx (tools/web-pattern-edit/index.html).

Patterns, tracks and settings persist in an internal-flash block store, written through an SPM service in the top of the boot section; both release images carry the service, so there is no separate install step.

Emulator

combined builds carry both firmwares in one image; a byte in internal EEPROM picks one per boot. The emulator runs the machine's own µPD650C program against the real hardware — port latches mirrored straight onto the socket pins — with its pattern memory kept in internal EEPROM, separate from SuperOS's patterns. It follows MIDI clock and Start/Stop like SuperOS does, and carries the same config menu with the same shared settings: a MIDI channel or clock source set in one firmware holds in both.

No mask ROM is distributed with this project. The µPD650C program is copyrighted; supply your own, read from a chip you are legally entitled to read. Upload it once from the web editor (it persists in EEPROM), or compile it into a personal build:

python3 tools/d650/make_rom_embed.py <your-rom-dump>
pio run -e combined-rom

The generated header is gitignored and must not be committed or redistributed.

Switch firmware from the config menu (step 9 — solid LED means SuperOS is running, blinking means the stock side is), over SysEx with F0 7D 4D <0|1> F7, or from the web editor. Holding PATTERN CLEAR + FUNCTION + PATTERN GROUP at power-on always boots SuperOS.

Firmware updates over MIDI

F0 7D 4A F7 drops the running firmware — either one — into the resident MIDI bootloader with no hand on the panel; then send the release .syx (tools/send_syx.py, or any throttled SysEx utility). A MIDI update rewrites only the firmware: patterns and settings survive. F0 7D 02 F7 exits the bootloader without flashing; any power cycle boots the intact app. Holding WRITE/NEXT at power-on still enters the bootloader the manual way. Note the config menu's SysEx switch gates this too: a disabled SysEx link ignores the bootloader command until re-enabled from the panel.

Building

Needs PlatformIO and a git checkout (the build stamps the commit into the filename).

pio run -e bootloader -e flash-service -e combined
envwhat it is
combinedSuperOS + emulator (mask ROM uploadable over MIDI)
combined-romas above with a personal ROM compiled in — local builds only
appSuperOS only
bootloaderMIDI SysEx bootloader, resident at 0x1F000; flash once over ISP
flash-serviceSPM flash-write service at 0x1FE00; bundled into every release image
fuseslfuse=0xDF hfuse=0xD2 efuse=0xF8, blank chips only

Outputs land in the repo root: SuperOS-606_v<ver>_<env>_<rev>.syx to flash over MIDI, and -full.hex (app + bootloader + service) for ISP. Never flash a bare app hex over ISP — the chip erase would remove the bootloader and the flash service; use the -full.hex.

Prebuilt firmware is on the releases page, built automatically from release tags with the changelog as the release notes. ROM-embedded builds are never published — they contain the copyrighted mask ROM, so combined-rom is a local build only.

Layout

src/
  pins.h            socket <-> AVR map
  hw.h              matrix scan + step-LED multiplex
  controls.h        panel decode (dials, buttons, status group)
  pattern.h         data model (sections, ratchet/probability slots, tracks)
  engine.h          sequencer, chains, tools, trigger bus
  uclock.h          MIDI-clock jitter smoothing (phase-locked timebase)
  main.cpp          panel handling, FUNCTION tools, config menu, LED frames
  midi.cpp          SysEx editor link, clock, notes
  flash_persist.h   block store glue (internal flash arena)
  bootloader/       MIDI SysEx bootloader
  flash_service/    SPM flash-write service
  combined.cpp      firmware selector for emulator builds
  d650/             the µPD650C emulator: host machine, ROM store, AVR bridge
tools/
  web-pattern-edit/ the web editor
  makesyx.py        packs the build into a flashable .syx
  send_syx.py       throttled SysEx uploader for the bootloader

The SysEx command set is documented at the top of src/midi_api.h.

Sources

  • Roland TR-606 Service Notes
  • TR-606 Owner's Manual
  • The ucom4 CPU core is a port of MAME's src/devices/cpu/ucom4 (BSD-3-Clause, copyright hap)