FM-1 · SID

M-VAVE FM-1 · pi32v2 @ 240 MHz · 6502 · reSID 0.16

Commodore 64 music,
on a pocket FM synth.

Runs an emulated 6510 + SID in the emulated FM-1 on a WASM virtual machine.

Every tune runs its own 6502 code, and reSID makes the sound: all of it on the FM-1’s CPU, in a firmware written for it. Here the whole synth is emulated in your browser. Press Power, then pick a tune from the 61,000 in the High Voltage SID Collection, or switch to the synth and play its SID instruments from the keys or a MIDI keyboard, through a stereo chorus, delay and reverb.

Now playingInstrument

0:00 / –:––

Play the FM-1’s keys, your computer’s A W S E D … ; ' (C4–F5), or a MIDI keyboard.

BPM120
Octave+0
Cutoff±0
Resonance±0
Attack±0
Release±0
song 1 / 1

    How it works

    Seven layers, from your speakers down to a 1982 sound chip. The page only builds the firmware image and moves keys; everything below the first layer is the FM-1’s own CPU at work.

    1. Your browserAudioWorkletAsks for 128 frames at a time. The emulator runs until the FM-1’s I2S DMA has produced them, so the sound card is the clock.
    2. fm1-coreRust → WebAssemblyThe JieLi AC791N’s pi32v2 CPU with its interrupts, timers, I2S, the SPI screen and the key matrix, worked out from the stock firmware. Idle time is skipped, not emulated.
    3. The player firmwareC · 205 KBRuns on Felucca’s hardware layer. The tunes ride after it in flash as a tune pack, which this page builds from your playlist and boots.
    4. A 6502floooh’s m6502Each tune’s own init and play routines, cycle by cycle, in 64 KB of C64 memory with the I/O banking, the CIA timer and the raster line.
    5. SID writescycle-stampedThe main loop runs the tune up to three frames ahead and queues every register write with the C64 cycle it happened on.
    6. reSID 0.16Dag LemClocked to each write’s cycle inside the audio interrupt, with measured 6581 and 8580 waveforms and filters. Or fm1-sid’s own integer model, at about 70 % of the cost.
    7. Effectsafter Felucca’sA stereo chorus, a delay on the tempo and a room reverb after the chip, in the same interrupt: the mono SID gets width. The synth starts with a little of each; the player stays dry until you turn them up.
    9.5 %of the 240 MHz core goes to the audio interrupt with reSID, 14 % with the effects
    0.984correlation with reSID on a PC, fed the same register stream
    205 KBof firmware: player, synth, two SID engines, the effects, the screen and its own tune
    61,157tunes in HVSC, one search away

    The numbers come from the emulator, which counts instructions, not cycles: a real FM-1 has not run this firmware yet. The status line under the synth shows how fast your machine runs it.

    Controls

    The firmware reads the FM-1’s own controls; the buttons above press them for you.

    On the FM-1

    HOME: tune player or SID synth. Player: PRESETS / SELECT, OCT− / OCT+: tune; PLAY: pause. Synth: the keys play; PRESETS / SELECT: instrument; OCT±: octave; KNOB1–4: cutoff, resonance, attack, release. Sequencer: SEQ page, PLAY run / stop, REC record, SCL ENV LFO track 1 2 3, ALGORITHM tempo, GLO clear step, ARP clear track. Both: EDIT: reSID or the own model; FX: the effects page, where KNOB1 is the chorus, KNOB2 the delay, KNOB3 its time (1/16 to 1/4 of the tempo), KNOB4 the reverb, SELECT the delay’s feedback and PRESETS 6581 or 8580; FX again goes back. The synth starts with a little of each, the player dry.

    Keyboard

    A W S … ': the note keys · ↑ ↓ ← → or N P: tune or instrument · 7: HOME · Space: PLAY · 0: SEQ · R: REC · 2 3 4: tracks · , .: tempo · 5: EDIT · 1: FX · Z X: OCT− / OCT+

    Links

    The address bar follows the tune: copy it to send someone straight to it. ?t= takes any HVSC path, ?mode=synth starts on the synth.

    On a real FM-1: sidplayer.fwsc is this firmware as an update package (it starts as the synth, with the effects; HOME switches to the player and its own tune; no HVSC tunes), made with Felucca’s update loader and package tools, so it installs the way the community firmwares do. It has not been tried on a real FM-1 yet. The package carries three files of JieLi’s SDK under the Apache-2.0 licence.