尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Update an M-VAVE FM-1 whose MIDI port has another name on your computer (Web MIDI, GitHub Pages)
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A browser installer for M-VAVE FM-1 firmware: choose your destination package, find the device, inspect expected writes, and follow the install through refusals or optional cleanup.
There is no blanket V15 prerequisite. The page checks the package and device state, and handles intermediate steps when a supported process needs them. Optional cleanup uses V15 temporarily; refused official firmware can use a separate compatible updater. Your selected firmware remains the destination.
One common connection problem is an FM-1 MIDI port with an unfamiliar name.
That can happen on purpose (you renamed the device) or by itself. On a Mac, Audio MIDI Setup names a USB MIDI port from its own cache, keyed by the USB id and the socket. Many FM-1 firmwares share the same USB id and send no serial number, so an FM-1 can show the name of another device or firmware that was last plugged into that socket. Updaters that look for the FM-1 by name then report it as not found, or lose it halfway through an update.
If your firmware's own updater, or M-VAVE's, works for you, use that instead.
Firmware file is shared above the tabs, on the upper right on wide screens. Choose a local package, saved updater page, or URL once: Flash and Layout Analysis use that same package. Selecting firmware does not connect to the device. Changing it updates both views and resets install options and confirmations; an invalid replacement leaves the previous selection intact. Package details are expandable, while selection errors and internal checksum warnings stay visible.
Flash is the default tab and owns device connection and installation. Layout Analysis inspects the shared firmware, a raw backup, or both. Switching tabs preserves the firmware, backup and chosen install options. During installation, navigation and the shared picker are locked so progress stays visible and the package cannot change. Backup & Recovery collects external backup and recovery tools. About contains the feature comparison and links to the troubleshooting workflow on Flash. Internal links switch tabs without replacing the selected files.
Backup creation and backup restore are not implemented. The existing Restore official startup code operation is a firmware-install workaround, not restoration of a raw flash backup.
For a full-flash backup or ROM download-mode recovery, the recommended desktop route is
M-Flasher (Windows, macOS, Linux). Open the raw .bin it saves in Layout Analysis.
M-UPGRADE is M-VAVE's official desktop firmware updater; raw backup support has not been
verified. MvaveFM1Unbricker is a Windows/Linux command-line recovery alternative
when the FM-1 appears as WL82 UBOOT1.00. FM-1 Transporter provides a hardware
route with an extra RP2040/RP2350 board and its own serial web app. Those external device operations are not performed by this page.
.fwsc in the browser (nothing is uploaded), checks its CRCs and shows its identity and
SHA-256. Only the unmodified official V15 is recognised by hash; anything else is labelled, and a
file of unknown origin needs a confirmation before it can be installed..fwsc files in its source (or loads the one it finds). It works only for sites that allow other pages to
read them; for the rest it says so and you download the file and drop it in..bin flash backup, even without connecting an FM-1. With a package
selected, compare declared data layouts and count differing bytes within the available expected write ranges. This
compares files, not the connected device; it neither creates nor restores backups and does not prove data compatibility.
The comparison also counts complete matching/differing 4 KiB sectors and sectors that are all 0xFF in the backup.
Erased bytes alone do not diagnose an interrupted update.Needs Chrome or Edge on a computer (Web MIDI with SysEx). Installing firmware is at your own risk.
To fix the name itself on a Mac: Audio MIDI Setup, Window, Show MIDI Studio, double-click the device.
The update protocol and the package reader are fm1-base's, copied unmodified into
vendor/fm1-base/ (recorded in vendor/fm1-base/SOURCE). src/updater.js adds what the page does on top: finding the FM-1 under any
port name, following the ports through the update loader, the restore step, and what step 1 refused. To take fm1-base's latest:
tools/sync-base.sh. A weekly GitHub job does the same and opens a pull request when anything changed, so fixes arrive for review
and nothing reaches the page without a merge. node tools/check-vendor.mjs checks the copies still offer what the adapter uses.
Where the page checks something, what it does when the check fails, and what you are offered. Boxes with a dashed outline are paths that have not been run on an FM-1 yet. Solid outlines do not imply every starting build is tested; see the specific hardware-tested routes below.
flowchart TD
A[Choose your destination firmware] --> B[Check package integrity, identity, loader and size]
B --> C{Valid package?}
C -- no --> C1[Stop and choose an intact supported package]
C -- yes --> D[Connect and query usual FM-1 ports]
D --> E{FM-1 answers?}
E -- no --> F[Refresh ports or use Check this port on your device]
F --> E
E -- yes --> J{Model matches?}
J -- no --> J1[Stop: choose firmware for this model]
J -- yes --> K[Back up first; confirm unknown sources; choose install options]
K -- normal install --> M[Device checks the package; Open firmware is armed first]
M --> N{Accepted?}
N -- yes --> O[Write and restart; verify expected identity]
N -- no --> Q[Explain the refusal; no firmware written in this attempt]
K -- supported official-firmware route --> B1[Hash-check and install the generic temporary updater]
Q -- temporary updater offered --> B1
B1 --> B2{Expected temporary identity answers?}
B2 -- yes --> M
K -- optional cleanup --> P[Prepare both packages and hash-check fixed data before writing]
P --> P0[Reach verified V15; skip its install if already running]
P0 --> P1{V15 identity answers?}
P1 -- yes --> PB[Apply valid data at 0xEA000–0xEE000; require every acknowledgement]
PB --> PC{All data acknowledged?}
PC -- yes --> P2[Official loader installs selected firmware and wipes below 0xBA000]
P2 --> O
B2 -- no --> HOLD[Stop the sequence; keep page open; refresh and select the same device to retry]
P1 -- no --> HOLD
PC -- no --> HOLD
HOLD -- retry incomplete data --> PB
HOLD -- cannot recover --> T[Choose an external recovery route]
Q -- separate opt-in workaround --> R[Startup-code restore: matching existing startup bytes required; hardware untested]
R --> M
O -- normal install only; reviewed release and boot option selected --> W[Install m-bootloader; verify return]
O --> DONE[Done; scan again for the returning firmware]
W --> DONE
M -. interrupted write .-> S[If the update loader answers, Finish update resumes this pass and completes any remaining sequence]
P2 -. interrupted write .-> S
P0 -. interrupted write .-> S
B1 -. interrupted write .-> S
S --> O
Q -- still stuck --> T
E -- no response after checks --> T
S -- loader unavailable --> T
T -- normal MIDI update --> U[M-UPGRADE: official desktop updater]
T -- ROM download mode --> V[M-Flasher: full backup, restore and recovery]
V -. command-line alternative .-> Z[MvaveFM1Unbricker: Windows or Linux]
T -- Bricked FM-1 --> Y[FM-1 Transporter: extra hardware required]
classDef notrun stroke-dasharray: 6 4
class J1,S,R notrun
The About tab uses a responsive feature table comparing M-VAVE Open Workbench, community installers, FM-Static, and named external recovery tools. Community support for arbitrary packages and V15-first gating is described as variable; Felucca is a reference example, not the whole category. FM-Static checks the device and package, and facilitates a V15 step when a supported process needs one. The comparison explicitly covers install assistance: manually chosen ports, tracking port changes, known refusal checkpoints, the guided temporary updater, opt-in startup-code workaround, Open firmware handshaking, automatic data cleanup when selected, and expected write regions. It distinguishes those from shared restart verification and interrupted-update retries, and labels the untested restore path. Firmware-specific project backups are grouped with the tasks delegated to other tools. Sources and the review date are shown with the table. Every cell uses the same status key: supported, limited/variable/different approach, or not provided/out of scope. Supported external-tool entries name the tool, with distinct check colours for M-Flasher, Unbricker and Transporter. On phones, each feature lists all four tools.
The page uses responsive HTML/CSS workflows: horizontal on wide screens, vertical on smaller screens, with readable text and no diagram scrolling. Mermaid is used only in this README.
flowchart TD
A[Choose firmware, a backup, or both] --> B[Read layouts and check file integrity]
B --> C[Compare layouts and sectors if both supplied]
C --> D[Review findings: no device writes]
Run on a real FM-1 (macOS, Chrome): installs in every direction between official V15, M-VAVE's V16, Baudgirl releases, Felucca-family firmwares and Mutable Dreams, with and without the application/data wipe; a real refusal by a newer Felucca and the way round it; installing m-bootloader after a firmware and then putting M-VAVE's V16 back over it; a package found through a GitHub address; an FM-1 whose port name the page does not recognise (found with Check this port, then followed through the update loader); another app holding the MIDI ports during an install; M-VAVE's Open firmware (V14, installed with M-VAVE's own Workbench) and from it back to M-VAVE's V16 through this page.
On 2026-10-26, another real-device test installed the reviewed LOOM 0.9 package and bundled m-bootloader 1.2, then
Optimist 0.2 synths, identity FM-1_722, SHA-256
926f08a95fa0e00f988bfd73f82fd8df130b9a8e4aa95a98e3aca925ec9b89a7 (matched the release checksums).
Normal installation of verified V15 stopped after exactly four requests. Install through temporary updater then
completed both passes: FM-1_722 → FM-1_11000300 → FM-1_015. The original V15 selection stayed loaded, and the
automatic post-install scan rediscovered V15 about 1.58 seconds after completion. This tests the released synths build,
not every custom build sharing the older FM-1_700 identity. No extended wipe or startup-byte substitution was used.
The device owner reported incorrect preset sounds afterward. Returning to V15 does not restore its factory voice banks.
Optimist can reuse that storage; its own installer and M-VAVE’s Workbench
provide a separate bank-restoration operation. The optional cleanup sequence now includes a separate valid-data write to that region;
the recovery test establishes boot and identity, not factory sound/data restoration.
The current cleanup was also tested on an FM-1: starting on V15, all 16 KiB of valid voice data were acknowledged,
then the extended wipe installed the selected 386DX package. A second run completed the full sequence
FM-1_3860070 → FM-1_015 → all four bank writes acknowledged → FM-1_3860070, with the original selection
retained and the final identity rediscovered automatically. These initial runs used stock startup code.
Further tests used only file selection and controls on the published website (version 2026-10-26.17), with no updater patches, direct MIDI commands or native recovery tools:
FM-1_722.FM-1_722 → FM-1_015 with m-bootloader
retained → all four bank writes acknowledged → FM-1_3860070. The final pass restored official startup code,
kept the original selection, and automatically rediscovered the final firmware.These results distinguish the running updater's acceptance rules from m-bootloader's presence alone. They do not cover every LOOM release or custom Optimist build. The data acknowledgements are not readback or audio verification.
Not tested on a device: finishing an interrupted update, the separate startup-byte substitution workaround, boot-mode detection, the wrong-model refusal, m-bootloader's recovery menu and download-mode keys. Out of scope: how the firmware sounds, the SMK-37 (it may work; completely untested), browsers other than Chrome.
The read-only inspection additions have host coverage for V15/V16 layouts, malformed tables, internal CRCs, unknown loaders, wipe boundaries and file comparisons. Real V15, V16 and SLOOP packages were also checked. These are file/parser checks, not new device-flashing tests. To run them (Node 22 or newer):
node tools/test-flash.mjs
node tools/test-flash.mjs /path/to/firmware.fwsc # optional real-package checks
node tools/check-vendor.mjs
To check the UI: load V16, switch to Layout Analysis, expand Package layout and affected regions, and inspect VM, SEQ64 and BTIF. Open Inspect a flash backup, choose a V15 raw backup, and check the layout differences. Removing the backup must leave the selected firmware in place. A project export or wrong-sized file must report an error without changing the package. Loading a backup alone never requests MIDI access.
For the automated Chrome check, serve this folder at http://127.0.0.1:8873, install playwright-core in your test
environment, and run node tools/test-browser.mjs /path/to/V15.fwsc /path/to/V16.fwsc. PLAYWRIGHT_MODULE can point
to an existing Playwright module; FLASH_TEST_URL overrides the server address. The test supplies a simulated MIDI
identity and never accesses hardware. It checks backup-only use, layout differences, wipe previews, invalid files,
clearing, package changes, all four tabs and their keyboard navigation, the install navigation lock, recovery links,
and layouts at 320, 390, 780, 1024 and 1440 pixels. To check manually, switch through all four tabs, use a recovery link
from About or Layout Analysis, and narrow the window: the table and workflows should reflow without sideways scrolling.
Optional third and fourth fixture paths exercise an application-loader package and the known-incompatible
FM-1_3860070 package respectively. An optional fifth fixture is the reviewed LOOM 0.9 release. These check boot-option
visibility, V15 template validation, the two-pass identity gate and phase-specific resume, replacing installation methods
with simulations so no write command is sent. A sixth fixture is the pinned fm1-base template 0.3; it checks the
generic route's hash guard, first-pass identity gate, unchanged target and exclusion of wipe/boot options.
node tools/test-banks.mjs checks pinned cleanup data, DX7 validation, exact storage commands and destinations, selected-port/V15 identity gates, and stopping on a missing acknowledgement.
node tools/test-updater.mjs checks next-pass port binding with two simulated devices. node tools/test-wipe.mjs /path/to/V15.fwsc /path/to/application-loader.fwsc checks the generated packages' writers and payloads.
The update protocol comes from Felucca's web installer by Leo Kuroshita (Hügelton Instruments), in the MPL-2.0 copy published by fm1-base. The page is MIT. Package checking, rebuilding and the application/data wipe are this page's own code. Flash-table decoding adapts MIT-licensed code credited in NOTICE; its licence is retained alongside the existing MPL notices. See LICENSE.
It is plain static files with no build step. Web MIDI needs https:// or localhost:
python3 -m http.server 8000 # then open http://localhost:8000/
d134cb28486ba35279e622a024db74ac8afa0e017d09f3d0c9507c25b6470a75. Its pinned
updater
accepts packages without flash.bin; host simulation accepts the bundled installer. This exact pairing completed on
an FM-1 through this page, returning FM-1_10000900 after the bootloader installer.
Releases requiring both flash.bin and ota.bin reject the standalone installer at the header check.FM-1_015) is eligible only when its SHA-256 matches the verified official V15;
a matching name or valid package CRC alone is not enough. The V15 wipe template uses the same exact-file check.
The upstream template file
is fetched at that immutable revision and must match SHA-256
a62e6d803b0fa223839d4af1eb558a4d02cc27b1f5c492e93b4a49beedc00538 and identity FM-1_11000300.
Upstream identifies its source as 934e40d,
with BSP 2cd696a.
That updater accepts official V15 and the standalone boot installer in host simulation; the exact template is also
in the boot-option allowlist. The complete return-to-V15 route was tested on an FM-1 from Optimist 0.2 synths with
m-bootloader, after reproducing the four-request refusal. Other starting builds remain unverified, as does installing
m-bootloader through the template. Temporary firmware may change saved data; back up first. Official updates replace m-bootloader.
Both two-pass routes retain their current package for retry, require only one responding FM-1, and pin the next pass
to the port that returned the verified identity. After failure, fresh discovery and explicit device selection are required..fwsc files committed in the repo (loadable) and attached to
releases (download-only: GitHub does not let a web page read those). For files GitHub holds a build attestation for, it
shows which workflow built them from which commit; it reports what GitHub says and does not verify the signature.0x93000), so a Baud Girl–sized
package (flash.bin past that) is refused there. An app-area-only package that is itself larger than the stock area
is refused for the same reason. Close other MIDI senders (a DAW’s clock can stall SysEx) while you finish; do not
power-cycle twice in a row in update mode (that can drop into the chip’s ROM USB boot)..fwsc the V15 way (M-VAVE’s loader and V15’s startup head), so the page allows only matching packages
(official V15, or cleanup rebuilt from it) and hides the Felucca temporary updater. Identity FM-1_003 alone is not
enough. It reads the package (which update loader it carries, flash.bin size, whether its startup code is official
V15's) and lists what it saw as checkpoints, including what an installer that only starts from V15 would have stopped
on. A cut during a write that left official V15 often ends in ROM USB boot rather than MIDI update mode.