github Quixotic7/ChoralRootFM1 v0.16
ChoralRoot 0.16

pre-release2 hours ago

ChoralRoot 0.16 (in progress)

Fixed: the FM-1 no longer stops responding after 10 minutes without playing. In 0.14 and 0.15, after 10 minutes
without playing the screen went dark and the FM-1 stopped responding to its keys, buttons and knobs until it was
switched off and on (or received MIDI from a computer). 0.16 fixes it: the screen now goes black but stays lit, and
any key, button or knob wakes it and does its normal job. (The switch for the screen's backlight turned out to
switch the keys, buttons and knobs off with it, so 0.16 leaves the backlight on.)

Dual Core is now Off by default. ChoralRoot runs on one core, as the stock firmware does, unless you turn
Options > Dual Core On. If you used it on 0.14 or 0.15, turn it on again in Options after updating (the update, and a
backup from 0.14 / 0.15, set it to Off), then power cycle.

An interrupted update no longer leaves a dark FM-1. From this version on, if an install is cut off (the cable,
the battery, the computer going to sleep), switch the FM-1 on again: three short flashes of the key lights, and it
is in update mode. Open the installer and Install again. The same from a working unit at any time: hold OCT- alone
while switching on.

A way back when an update fails

Until now a cut-off install could leave an FM-1 with no screen and no USB device at all, recoverable only with extra
hardware. 0.16 puts a small boot stub in front of the firmware. At every start it checks that the firmware was
written completely (the installer's last write is a marker; the first thing it does is remove the old one); if not,
or if OCT- alone is held while switching on, it starts the update loader instead of the firmware: three short
flashes, then the FM-1 shows up for the installer as in any update. The check and the look at the key take about
60 ms at power-on (14 ms for the firmware's checksum, 48 ms of watching OCT-).

  • The install of 0.16 itself is the last one without this protection for its first second (the stub is what is
    being written then). As before: charge the FM-1, plug it straight into the computer, keep the computer awake.
  • One long flash instead of three means the FM-1 went to the chip's own USB boot (a disk named WL82): switch it off
    for 10 seconds and on again.
  • OCT- together with OCT+ while switching on is still the calibration.
  • Installing another firmware (the stock one, Felucca, Melodee) removes the stub with ChoralRoot; that install is
    unprotected as it always was.

One core by default, the second core an option

Enough people report crashes with other FM-1 firmwares that run both cores that ChoralRoot no longer does it unless
asked. With Options > Dual Core Off (the default) the chord and the bass share one budget of 8 voices, the core
voltage stays as the FM-1's boot loader set it, and the second core is never started. On (it takes effect after a
restart) gives the bass part the second core and its own 8 voices, so an 8-note chord and the bass both sound whole;
the changes below make that as robust as we can, but it is the setting to turn off first if your FM-1 ever crashes or
resets while playing.

The second core, more robust (after Melodee)

Melodee's investigation (PR 21 by Kerem Kilic, GPL-3.0) found why dual-core firmwares crash on some FM-1s: the chip
runs faster than JieLi's tables at the boot loader's core voltage, and with both cores busy some units' memory
reads go wrong now and then. ChoralRoot 0.16 takes over the fix, adapted to its own second core:

  • With Options > Dual Core On, the core supply goes up at power-on to JieLi's own levels for this speed (1.35 V core,
    1.45 V regulator) before the second core starts. With Dual Core Off (the default) nothing changes: the stock
    voltages.
  • The second core only runs work it read correctly (a sequence number and a check word); a bad read is counted and
    skipped, never run.
  • The first bad read is counted and both cores keep going; if it happens again, or the second core faults or hangs,
    ChoralRoot carries on with one core instead of crashing. GEEK OUT then reads c1 gave up · Options>Dual Core:
    the switch, to go back to one core from the start. The voltage is never raised beyond JieLi's own levels.
  • A fault on the second core no longer resets the FM-1.
  • GEEK OUT's core line shows the count of bad reads (rej); fm1_install.py --debug shows the counters and the
    core voltages (rail_*).

If your FM-1 shows rej above 0, or c1 gave up, with Dual Core On, please tell us (with fm1_install.py --debug).

The sound read-out counts the presets

Turning PRESETS (or ALGORITHM) shows the place and the number of presets of the engine. 00 INIT is no longer
counted as one, and there is a stripe per preset: PHASE's last preset reads PHASE · 06/06 with all six stripes lit
(it read 06/07 and left the last one dark), INIT reads 00/06 with none. A long pool's stripes (FM6, the VA, the
CZ-1) now finish lighting well before the read-out goes.

The device manager can audition sounds

https://quixotic7.github.io/ChoralRootFM1/webapp/installer/manager.html

The web device manager can now switch the chord or the bass part to any sound in a pool (SysEx 76 SELECT), as
turning PRESETS on the unit would, and a sound written into the slot a part is playing is heard at once (a DX7
patch uploaded into the playing slot, for example), without touching the FM-1.


ChoralRoot 0.16 for the M-VAVE FM-1 (identity FM-1_920).

Install from the browser at https://quixotic7.github.io/ChoralRootFM1/ (Chrome or Edge, the FM-1 connected by USB), or with the command-line installer: python3 tools/fm1_install.py choralroot-0.16.fwsc.

SHA256SUMS lists the package and the app. The package holds three JieLi AC79 SDK files (Apache-2.0); LICENSE, LICENSING.md and LICENSES.zip carry every licence. Installing firmware is at your own risk.

Full Changelog: v0.15...v0.16

Don't miss a new ChoralRootFM1 release

NewReleases is sending notifications on new releases.