Firmware

fm1-mdx

Hype27/100

Experimental MDX/PDX karaoke player for the M-VAVE FM-1

fm1-mdx is custom firmware for the M-VAVE FM-1, by @Keitark. Open source under GPL-3.0, 1 star on GitHub.

forM-VAVE FM-1·by@Keitark

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

Downloads
0
Star
1
Forks
0
Commits
3
Last commit
Get the source

No release files yet. Build from source.

GPL-3.0· Keitark/fm1-mdx·downloads come from the creator’s GitHub releases

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

FM1 MDX karaoke player

An experimental MDX/PDX player for the M-VAVE FM-1. It uses the display, DAC, keyboard, encoders and USB CDC support developed for FM1-NES, with a bounded RetroFM MDX sequencer and software YM2151 synthesis.

Status: host-tested candidate. Not yet installed or accepted on the FM-1. This repository contains source and original demo assets. It contains no stock firmware, device backups, chip keys, commercial songs, vendor SDK libraries or unit-specific flash images.

Playback and karaoke

  • Stereo YM2151 at 44.1kHz, plus PDX ADPCM/PCM8 through the RetroFM mixer.
  • Original FM1DEMO.MDX and FM1DEMO.PDX are compiled into read-only flash.
  • Choose an FM track, enable karaoke mute and play its current voice with the physical keyboard. This is monophonic on the chosen YM2151 channel.
  • Muting releases the existing song note once. Further playback note-ons and note-offs are suppressed; voice, volume, pan and modulation updates continue.
  • Manual pitch replaces the song's base pitch while retaining its software detune, portamento and LFO offset. Patch changes can therefore change a held manual note. Unmuting releases the manual note and resumes at the next song trigger; it does not retrigger an old note.
  • PCM tracks can be muted too. Manual keyboard replacement currently covers FM tracks1–8; PCM sample audition is not implemented.

Controls

Scanner slots0/1 select the previous/next FM track, slot2 toggles karaoke mute, and slot3 toggles play/stop. Encoder0 also selects a track. Slots14–40 are the keyboard, MIDI53–79. These are stock-derived scanner assignments; physical button names, encoder direction and behavior require this candidate's bench test. The volume knob uses the recovered PB6 ADC input, starting muted and ramping.

Build and test

For host checks on Windows, install Python3, CMake and Visual Studio2022 with C++ tools. No SDK, device or Python third-party package is required for tests.

python scripts/build.py host

To link the FM-1 application, supply the external AC79 SDK at revision e30b1ee375d1f2993fc23bf92c8b99006a6e5f9d and an existing Jieli pi32v2 toolchain:

$env:FM1_SDK_DIR = 'C:\path\to\fw-AC79_AIoT_SDK'
$env:FM1_TOOLCHAIN_DIR = 'C:\JL\pi32\bin'
python scripts/build.py firmware

SDK upstream: Jieli AC79 SDK. Without FM1_SDK_DIR, the default is .deps/ac79-sdk. The checkout must be clean and match the pin. The builder calls compiler/linker tools directly; it never runs the SDK's Makefile or download scripts.

build/target contains an ELF, application payload, map, disassembly, source hashes and static audit. The application payload is not a flash/update file. The audit retains the SDK startup/integrity checks and IRQ-based UBOOT recovery. There is no firmware flasher or stock-layout packager in this repository.

USB song loading

After this candidate has been installed and its CDC port confirmed, install pyserial in the PC Python environment. Use the actual COM port listed below:

python firmware/mdx/usb_client.py list
python firmware/mdx/usb_client.py upload --port COM10 --mdx song.MDX --pdx song.PDX
python firmware/mdx/usb_client.py play --port COM10
python firmware/mdx/usb_client.py select --port COM10 --track 1
python firmware/mdx/usb_client.py mute --port COM10 --track 1 --on 1
python firmware/mdx/usb_client.py status --port COM10

COM10 is an example. The client checks VID/PID and the MDX firmware identity. PDX must accompany an MDX that names a sample bank. One bundle fits192KiB, including its12-byte header. Upload stops playback, checks ordered offsets, CRC and file structure, then stores the song in RAM. Uploaded files disappear on power-off. The built-in flash demo remains available with demo.

CDC song loading is implemented; USB mass-storage drag-and-drop and persistent uploaded-song storage are not implemented. USB MIDI and TRS/BLE MIDI input are also outside this first candidate. MIDI-note commands are available over CDC.

Layout and provenance

firmware/mdx holds the player, original sample generator, USB client and tests. firmware/usb-diag holds shared CDC recovery services. firmware/nes holds the reused board-support and audit files only; no NES core or game is bundled.

Original MDX additions are GPL-3.0-or-later; upstream notices remain applicable. See THIRD_PARTY.md, the source publication record and VALIDATION.md. The latest karaoke guide changes are in draft PR #19 pending physical acceptance. This is independent experimental firmware, with stock-analysis provenance, and is not an official M-VAVE or Jieli product.