Multispeed (framespeed)

aliases framespeed, 2x speed, double speed, 8x
sources SID-Wizard 1.8 User Manual (summary) · GoatTracker v2.72 readme (summary) · Creating Chiptunes with SID-Wizard, Second Edition (summary) · chipmusic.org — sid music hints'n'tips (2013) · The Brief History of SID — Jan Harries (SIDwave), Vandalism News #64 (2015) · realdmx: Martin Galway's Arkanoid — Tognon's SIDin #4 reverse-engineering, with the 'sample' synthesis through $D418 · realdmx: Rob Hubbard's driver — McSweeney's Monty on the Run disassembly and the Commando title · realdmx: two scene players with their own sources — Francois Prijt's Audial Arts 'zong player' v1/v2 (1991) and Adam Bulka's FAME 'Sound Routine f 4.1.0' (1988) · realdmx: Charles Deenen's two test tunes — an undated MUSICFILE build and the 'Scoop designs' Maniacs of Noise player · SIDin #1 — Luca Carrafiello (Luca/FIRE) interview (Stefano Tognon, 2002) · SIDin #7 — Inside Modules: Ivan Del Duca's music engine (Stefano Tognon, 2005) · SIDin #11 — SID Factory vs Ninjatracker (Stefano Tognon, 2007) · SIDin #12 — Ripping Trivia Arcade (Stefano Tognon, 2008) · SIDin #12 — Mihály Horváth (Hermit) interview (Stefano Tognon, 2008) · SIDin #13 — JITT64 Tracker: Tognon's Java Ice Team Tracker from the user's side (2010) · defMONing 102: extended field guide (iLKke et al.) · defMON wiki — using a defMON tune in your own program · chipmusic.org — the defMON megathread (2014–2026) · My Computer Chronicles — Jens-Christian Huus / JCH (2017) · DUET research: SID-Wizard player.asm deep dive (summary) · DUET research: SID-Wizard 1.97 formats and player (summary) · HVSC — SID file format description (PSID v1–v4, RSID) · SIDin #1–15 — Editorials and News digest (Stefano Tognon, 2002–2015) · The CheeseCutter Guide — the recovered site manual (Wayback) · CheeseCutter — the repo, the man pages, and the release paper trail (2011–2026) · defMONing 101: A defMON Operator Field Guide (iLKke, 2013) · defMON wiki — features, interface overview, seqED key map · defMON wiki — release history 2008–2020, creations, links · defMON wiki — DIN/MIDI/LSDj/Nanoloop sync, stereo SID, manual BPM tables
created 2026-08-30 · updated 2026-08-31

What it is#

Calling the player routine more than once per frame. sid-wizard supports up to 8× framespeed, i.e. 400 Hz SID control instead of 50 Hz, which gives finer resolution for pulse-width-modulation, filter-programming and vibrato at the cost of rastertime (source: s-sid-wizard-manual).

How to do it#

SID-Wizard#

  • Shift+F / Shift+G increase / decrease the framespeed (SDI layout: ? sets speed calls 1..8).
  • Instrument tables can follow the higher rate selectively: a WF-Arp table speed above $40 runs the pulse table at multispeed, above $80 the filter table too.
  • Exported tunes expose the multispeed call at LoadAddress + 6, which the host program must call the extra times per frame (sid-format, sid-player-routine).
  • The Bare player does not support multispeed.

(source: s-sid-wizard-manual)

Design note from the book: in SID-Wizard (as in X-SID) only the tables (waveform / pulse / filter) run at the multiplied rate; tempo, vibrato and slides are handled once per frame — "you can't set tune-tempo in a finer scale, but on the other hand in multispeed the tempo / hard restart / vibrato / slide settings can stay the same". GoatTracker calls the whole player. "The 2x speed (100Hz) can be quite enough for some nice effects. (E.g. Rubicon's title music by Jeroen Tel is 2x, and has drums that are not possible in 1x single-speed at 50Hz)" (source: s-witchmaster-creating-chiptunes-with-sid-wizard).

What the player actually does (SW 1.97 player.asm)#

The exact split between the main call and the extra calls, from m64's duet research (MULPLY/MULCNTP, player.asm 1240–1327; source: s-duet-research-sidwizard-deep):

  • The framespeed−1 extra calls are spaced evenly across the 312 PAL rasterlines by the exporter. Row fetch, orderlist, hard restart, note start, tempo, vibrato and slides happen only in the main call; the extra calls run tables and re-write the registers.
  • Per channel each extra call enters the chain by the instrument's table-speed byte: the WF-arp table always runs at the multiplied rate; bit 6 ($40) adds the pulse table, bit 7 ($80) the filter table (which falls through pulse and WF). The filter/volume registers (COMMONREGS) are rewritten every subframe.
  • Table counters therefore tick per player call: an arp speed or sweep length means calls, not video frames — the same instrument runs its tables N× faster in an N× tune (the design the book describes as "only the tables run at the multiplied rate").
  • A channel is skipped by the extra calls on its note's first frame (the note-start marker), so the frame-1 waveform trick survives multispeed: the WF table's row 0 lands on the next frame's first call.

GoatTracker#

The speed multiplier is -Sxx on the command line or SHIFT+F5/F6 (0 = 25 Hz, 1 = 1×, 2 = 2× …). Because the whole player runs faster: multiply tempos and gate-off timers (timer 2 → 4 at 2×, also when importing v1 multispeed songs); to keep a vibrato the same, multiply its speed and divide its depth by the multiplier; divide portamento and pulse/filter modulation speeds; funktempo 24 18 is 09 06 at 4×. With attack 0 "the very silent first row of the wavetable" may vanish — raise the attack or add E9 00 (test + gate) rows at the start (source: s-goattracker-readme).

CheeseCutter#

CheeseCutter 2 supports multispeed, with the guide's own caveat that it "doesn't work well past 4x" (source: s-cheesecutter-guide) — the practical ceiling for an editor whose player is written for "features/comfort over speed". The 2024–25 arch0N fork lists a multispeed buffer overrun among its fixes (credited to Isildur), so tunes written above 1× in older builds are worth re-checking there (source: s-cheesecutter-repo-and-releases).

defMON#

defMON does 1x/2x/4x/8x, but the multiplication lives in the editor, not the player: F2/F4/F6/F8 set a CIA timer ($4CC7+1 cycles = one PAL frame; $2663 = 2x, $1331 = 4x), and C=+F-keys nudge or halve/double the timer — which doubles as defMON's free-form BPM control. Because of that design a per-pattern multispeed command is impossible without breaking packed tunes. Odd rates work by typing the timer by hand: $1997 gives 3x — frantic's favourite, "Just enough to be enough" — and a CSDb compo tune ran at 25 Hz, the player called every second frame. A host program plays a multispeed defMON tune by calling $1003 once per frame and the sound-only entry $1006 the remaining 1/3/7 times (sid-player-routine). Switching 1x↔8x live works as a performance effect, though frantic warns it can "also sound crappy in some cases" (sources: s-defmon-wiki-defmoning-102, s-defmon-wiki-calling-the-player, s-chipmusic-defmon-thread). The full preset set is $4CC7/$2663/$1331/$0998 for 1×/2×/4×/8× (source: s-defmon-wiki-sync-and-stereo), and the 2014-06-15 release fixed multispeed toggling so that switching while playing no longer drifts out of sync — which is what makes it usable live (source: s-defmon-wiki-releases). The wiki's field guide states the payoff plainly: "Up to 8x multispeed means nearly any SID tune except sample playback can be covered in defMON" (source: s-defmon-wiki-defmoning-101) — a claim that only holds because the player is cheap enough to call eight times, "relatively low CPU usage… DefMON tunes can be, and have been, used in various demos and games" (source: s-defmon-wiki-manual).

Declaring it in the file#

A .sid file has no field for "four calls per frame". The header's speed word carries one bit per song and only two values: 0 = the player is called from the vertical-blank interrupt (50 Hz PAL, 60 Hz NTSC), 1 = from CIA 1 timer A (default 60 Hz). Anything faster has to install its own interrupts, which is exactly what RSID is for — the format's own words: "Tunes that are multi-speed and/or contain samples and/or use additional interrupt sources or do busy looping will cause older SID emulators to lock up or play very wrongly (if at all)". An RSID forces loadAddress, playAddress and speed to zero, so the init routine sets up the timing itself and a player that cannot provide a real C64 environment must refuse the file (source: s-hvsc-sid-file-format; sid-format).

The constants a multispeed tune ends up depending on are in the same document: CIA 1 timer A at 60 Hz is $4025 on PAL and $4295 on NTSC; to play an NTSC tune on a PAL machine the value is $3FFB and the other way $5021; and the NTSC vertical refresh (17045 cycles) is not the same as its CIA latch (17095), a gap where "the SID ADSR bugs can actually break the tune" (source: s-hvsc-sid-file-format; hard-restart).

What that cost the archive: HVSC update 40 (2004-09-27) shipped "about 500 multi speed fixes" for one wrong constant — "the C64 has $4CC7 and not $4CF9 cycles per frame, due to running at 50.125Hz instead of 50Hz", so CIA-converted multispeed tunes had been playing about 0.2 % slow (source: s-sidin-news-digest; hvsc). $4CC7 is the same number defMON uses as its 1× timer preset above — a frame is 19 656 cycles, not 19 705.

Heard in / analysed#

Gallefoss's Electronic Transfer runs at 5×. 4mat's reading of its lead: "The rapid pulsewidth modulation on there is down to the multispeed. He's probably got it adding about $40 on each player tick" — the extra calls are spent on PWM resolution, while the pitch-up attack and the gate-off echo loop are ordinary table work (wavetable-programming) and the bass is a sample loop. Dissecting such tunes is harder: siddump before 1.05 stopped with "CPU executed abnormally high amount of instructions", and 1.05's "partial support for multispeed tunes" depends on "how complicated code the player interrupt runs" (source: s-chipmusic-sid-music-hints-n-tips).

A 2002 dissent#

luca-carrafiello never wrote multispeed tunes because his Plus/4 diskmag could not host one, and argued that multispeed tunes are "a sort of 'subcategory', like digis" that deserve a compo of their own "instead of mixing them with 'normal' singlespeed tunes" — while calling Drax's Strangers in the Flight, Goto80's Gopho and Glenn Gallefoss's GRG in Cyberspace "stunning" (source: s-sidin01-carrafiello-interview; compos).

  • The modules driver (1988): the PSID play address $CFE8 is a stub jsr $C000 / jsr $C000 / rts, so the engine — whose durations are counted in ticks from a 16-bit table — advances twice per frame; Tognon's text does not comment on it (unverified reading of the listing; source: s-sidin07-inside-modules).

SID Factory's multispeed driver (2007)#

laxity's SID Factory shipped two drivers: v5.0x, "standard music driver with calculated vibrato and no aim at execution speed (multispeed allowed)", and v6.0x, a "fast" driver without calculated vibrato that caps its rastertime spike at about $18 lines. Tognon: "Multispeed in a natural way with a specific player. I can say that this is the first editor I try that has this features (in other, if you add multispeed to a tune, you have to adjust instruments to the new mode)" — ninjatracker V2, released the same day, could not make multispeed tunes at all (source: s-sidin11-sid-factory-vs-ninjatracker).

What the editors and players supported (the SIDin news, 2002–2015)#

  • GoatTracker had multispeed from version 1.24 (2002), and 2.1 (2005-07-30) raised the maximum to 16× while adding "no-funktempo/no-octave-0" player sub-types; at the other end 2.04 offered a "questionable 25Hz mode" (/S0) — the player called every second frame — and 2.31 allowed tempo 2 once pulse skipping was disabled with /O.
  • TFX 2.97 (Unreal, 2005-01-21) went furthest on paper: "multiframe up to 10x on all channels, and 72x on a single channel", with a hard restart of "anywhere from 0 to 255 frames".
  • Asterion Sid-Tracker 1.1 (2004-05-31) advertised "multispeed up to 4x" alongside vibrating portamento and 11-bit filter programs.
  • On the playback side, ACID 64 1.0 (2003) sold itself on "exact timing for normal speed and multi speed songs" by emulating the 6510 and driving a real chip; XSIDPLAY2 2.0.3 (March 2009) added a multispeed indication to its interface; and the SID PC64 Winamp plug-in (2004) could stream a multispeed tune over a PC64 cable to a real C64 — but not a sample tune (source for all: s-sidin-news-digest).

Four raster lines in a 1980s game, and two 2000s editors#

  • The Trivia Arcade's music runs 4× from a chain of raster interrupts, not a CIA timer: the game's IRQ routine dispatches on $D012 = $01, $41, $6E, $C3 (a fifth value, $D2, is never reached) and calls the player's $5006 entry at each and its $5003 entry only at line $01 — one call per frame for the notes, four for the effects. Tognon's rip reproduces the chain in a 40-line driver and marks the result a real-C64 tune (source: s-sidin12-ripping-trivia-arcade).
  • hermit's 2008 3SID tracker had "double framespeed" as a design requirement from the start (source: s-sidin12-hermit-interview); Tognon thought jitt64 could reach "up to 4X" despite its heavy per-instrument tables (source: s-sidin13-jitt64-tracker).

Tips & pitfalls#

  • Rastertime multiplies with the speed; watch the rastertime display in the top border.
  • 2× is often enough (jeroen-tel's Rubicon drums); higher rates buy smoother table sweeps at proportionally more rastertime (the book only names 2× and 8×, and a 5× tune with multispeed PWM is documented above; the 4×–8× "sample-like" claim is unverified).

How it started (the scene's account)#

SIDwave: "It is most common to call the music player 1 time per frame. But the German Michael Winterberg becomes known in 1986 for his special music, he uses the CIA timer and plays the sounds much faster … The real 'multi-speed' way is created by Antony Crowther, with Zig Zag and Centurions X, his player starts a sound, and on half a frame, it does the sound again, but only updating some of the parameters. To create what we call 2x speed. Not many copy his trick, it becomes a thing to do in the '90s (PRI and PVCF are famous for it). 2X and 4x are widely used in the '90s and deliver a characteristic sound. I personally chose to do 6x on purpose, to stand out." jeroen-tel's later 8× tunes make "synth leads, which sounds like they actually came from a 'standard' analogue synth" (source: s-recollection-brief-history-of-sid).

A dated corroboration of the Crowther-first story: JCH processed a tune twice per frame in August 1989 and, to his knowledge, only Antony Crowther (Zig Zag) had tried it before; he judged 2× not worth the CPU — multi-called arpeggios "never … truly sound like individual channels. They just got uglier" — but later coded quick players optimised for multiple calls per frame (note data parsed only on the first call, the same split as defmon's $1003/$1006), which MSK "loved" (source: s-chordian-my-computer-chronicles).

Two rates in 1986: Arkanoid's CIA timer#

Galway's Arkanoid program runs from CIA timer A, not the raster: $24F8 for the six jingles and twelve sound effects and $49F0 for the two tunes with the volume-register percussion — on a PAL clock about 104 Hz and 52 Hz (inference from the timer values). The effect engine therefore ran at twice the frame rate whenever the foreground did not need the CPU for synthesis, and each tune also rebuilds its duration table from a "minimum note duration" — a per-tune tempo multiplier (source: s-realdmx-galway-arkanoid-player). The other recovered drivers of the period are single-speed: Hubbard's runs its note fetch every 2 or 3 frames and its effects every frame, MUSICFILE and FAME tick every 3 frames with effects each frame (sources: s-realdmx-hubbard-player, s-realdmx-deenen-test-tunes, s-realdmx-audial-arts-fame-players).

sid-player-routine · pulse-width-modulation · filter-programming · commodore-64 · siddump · defmon · sid-format · cheesecutter · shuffle-funktempo · hvsc

Sources#

s-sid-wizard-manual · s-goattracker-readme · s-witchmaster-creating-chiptunes-with-sid-wizard · s-chipmusic-sid-music-hints-n-tips · s-recollection-brief-history-of-sid · s-realdmx-galway-arkanoid-player · s-realdmx-hubbard-player · s-realdmx-audial-arts-fame-players · s-realdmx-deenen-test-tunes · s-sidin01-carrafiello-interview · s-sidin07-inside-modules · s-sidin11-sid-factory-vs-ninjatracker · s-sidin12-ripping-trivia-arcade · s-sidin12-hermit-interview · s-sidin13-jitt64-tracker · s-defmon-wiki-defmoning-102 · s-defmon-wiki-calling-the-player · s-chipmusic-defmon-thread · s-chordian-my-computer-chronicles · s-duet-research-sidwizard-deep · s-duet-research-sidwizard · s-hvsc-sid-file-format · s-sidin-news-digest · s-cheesecutter-guide · s-cheesecutter-repo-and-releases · s-defmon-wiki-defmoning-101 · s-defmon-wiki-manual · s-defmon-wiki-releases · s-defmon-wiki-sync-and-stereo

source file wiki/techniques/multispeed.md · 1 unverified · graph