explainroo
explainroo is a free, open source tool that lets your AI agent make explainer videos with a voice. It runs on your own computer and needs no API key.
MagSID - a tracker for Commodore 64 music on Windows, macOS and Linux, with a tiny SID player that plays exactly what you hear in the editor.
MediaC# · AssemblyGitHub @MagnarHarestadOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
C64 SID music player in c6510 assembly, with a Windows tracker that writes for it
Taken from the repository README
Loading the full README.
Read the full README ↗A tracker for writing Commodore 64 music, on Windows, macOS and Linux, and the SID player that plays it on real hardware.
By Magnar Harestad of Censor Design. A big thanks and shoutout to my fellow Censor Design members: Krikkit, Slaygon, Bob and Swallow for design inspirations, technical advices, tools & SVN repo + infrastructure.
Website and download: magnarharestad.github.io/MagSID
A tracker that edits songs as plain text and exports them as .sid files, reproducing the C64 player
exactly — note for note, byte for byte. A song sounds in the editor as it will on the machine, and the
exported file is the same image the assembly player would have produced.
The player is a low-memory-footprint rewrite of a GoatTracker-style player, written in c6510 assembly: 418 bytes of code with neither optional effect, 500 with vibrato, 467 with slides and 526 with both, plus 10 bytes when an instrument uses soft hard restart and 4 when two or more instruments in a song with vibrato have none - which is what lets its tables, two bytes an instrument, cover only those that do, and 24 when a pattern changes the speed with an Fxy row, 22 beside slides. Code for an effect is only assembled when a song uses it. A finished song lands at roughly 700–1150 bytes including the player.
Nothing else: no assembler, no emulator. Export to .sid and playing a .sid back are built in.
Unpack the download anywhere and run MagSID.exe on Windows, MagSID.app on a Mac (moved to
Applications) or ./MagSID on Linux. There is no installer.
The Windows exe is not code-signed, so Windows SmartScreen may say it comes from an unknown publisher. Choose More info → Run anyway. The Mac app is not notarised yet; the website says how to open it the first time.
Settings — MIDI device, knob bindings, view preferences — are kept in settings.json under
MagSid.Editor in the user's application data folder (%APPDATA% on Windows).
Until 1.64 MagSID was a Windows-only WinForms editor; from 1.7 it is one Avalonia editor on every system. 1.64's settings carry over.
.s files. Open one from SongData with Menu → Open (F10).ZSXDCVGBHNJM is one octave and Q2W3ER5T6Y7U the next..sid, a .prg or raw .bin to use in your own code, at the load address and zero page start you choose, or the Musicshower as a .prg or .d64: a program that plays the song on a real C64 and shows the player's values on screen.
Menu → Load and Play .sid plays a .sid, and
exports it as WAV, MP3 or FLAC..mid file: bass and drums on channel 1, the
chords as arpeggio instruments on channel 2, the lead on channel 3, and each part's General MIDI
sound mapped to an instrument from the demo songs. midifiles/ has 14 free tunes to try it on.Menu → About lists every key and control, view by view.
MagSid.sln
src/
MagSid.Core/ the song model, file format, sizing, undo, optimiser
MagSid.Sid/ a reSID port - the chip itself
MagSid.Playback/ voices, sequencer, jam mode, filter, the .sid player
MagSid.Assembler/ the .sid export: a 6502 emitter and the player expressed against it
MagSid.Editor.Avalonia/ the editor, on Windows, macOS and Linux
MagSid.Editor.Views/ the tracker grid and DAW views, compiled against Shim/ - WinForms and GDI+
over Avalonia
MagSid.Editor.Common/ settings, session, .sid export - shared by both editors
MagSid.Editor.App/ the WinForms editor (to 1.64): the source of the grid and DAW views
MagSid.Audio.PortAudio/ sound out on every system
MagSid.Midi/ MIDI in: WinMM, CoreMIDI, ALSA
tests/
SongData/ the songs, as plain text
Digi/ a sample for the Digi-to-SID-osc feature
midifiles/ 14 public-domain and Creative Commons tunes for Import MIDI
website-messages/ the website's message wall: a Cloudflare Worker, see its README
Three pieces of C# each mirror something in the assembly player, and all three would drift silently if nothing checked them. So each is pinned to real assembler output rather than reviewed:
MagSid.Playback.SongSequencer mirrors Code/musicplayer.s — this is what makes in-editor
playback match the machine.MagSid.Core.SongSizeCalculator mirrors the Lua emitter in Startup/Tables.s. Its byte counts
are pinned against real c6510 builds in SongSizeTests, which has caught song edits three times
and a renamed file once.MagSid.Assembler produces the exported image: a byte emitter with labels, a line-for-line
port of the player, and five emitters mirroring the tables Tables.s generates. 34 mnemonics in 7
addressing modes is all the player uses, which is small enough to emit directly.Playing the exported file back is a separate answer to a separate question. MagSid.Playback
carries a 6502 interpreter and a PSID loader, so the editor plays a .sid by executing it —
SidFilePlaybackTests then checks that those bytes, run on the CPU, write the same SID registers as
SongSequencer over 1500 frames of every song. Goldens prove the export is the right bytes; this
proves those bytes make the right music. Neither alone would.
SongImageTests compares the complete image — player and song data — against what c6510
produced, for seven songs and for BellaCiao at $2000 and $4400. Two fixture songs come with it
because those seven reach only two of the four feature combinations: six are bare and BellaCiao has
vibrato. Songs written since — Clarity, Outlaws and Fairlighty, which use vibrato, slides and soft
hard restart — are checked by running their image on the 6502 against SongSequencer, frame by
frame.
Comparing whole images and not just their lengths is the point. Reversing the note dictionary's build order — arpeggios before pattern rows — yields an image of exactly the right length with every note wrong, and the length cross-checks stay green through it. Only the byte comparison catches that, and it is the failure mode that would ship.
Those reference images are frozen in tests/MagSid.Assembler.Tests/Goldens/, captured while the
assembler was still in this repository. See the README beside them before changing one.
Needs the .NET 8 SDK. Nothing else — no assembler, no include library, no player sources.
dotnet build MagSid.sln
dotnet test MagSid.sln
A tag v1.7 makes .github/workflows/release.yml build the packages for every system - the Mac app
for Apple Silicon and Intel, Windows and Linux, each with .NET inside - and open a draft release with
them. packaging/portable/package.sh and packaging/macos/package.sh do the same by hand.
Measuring how smoothly it draws. Set MAGSID_FRAMEPROBE to a log file and open a song, and the
editor plays it silently, measures 1500 displayed frames and closes. The log has the frame gaps, each
view's paint times, the garbage collections and the largest allocations. MAGSID_FRAMEPROBE_DAW=1
measures the DAW view instead of the Retro view. Check both after any change to how either draws.
MAGSID_FRAMEPROBE=retro.txt MagSID "SongData/MysData2026 - Clarity.s"
MAGSID_FRAMEPROBE=daw.txt MAGSID_FRAMEPROBE_DAW=1 MagSID "SongData/MysData2026 - Clarity.s"
The player sources, if you want to assemble the C64 side or regenerate a golden. The c6510 source
is in the Censor SVN tree under MAGSIDv7_LowMemory as it stood at commit 6221867, together with
the c6510 assembler, its include library, and the Python tools that measure byte cost and trace a
player's register writes. Every change made to the player since — pattern slides, soft hard restart,
and a note off that lets the release run on — is in tests/MagSid.Assembler.Tests/Goldens/player.patch,
against that version.
Exported .sid files - the player code and the song data in them - may be used freely, in any
release, commercial or not.
MagSID Editor is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE for the full text.
The editor's SID emulation is a C# translation of reSID by Dag Lem, which is licensed under the GPL, version 2 or later - so the editor is too. It also includes NAudio, under the MIT license. Both are credited in THIRD-PARTY-NOTICES.md.
The MIDI files in midifiles/ are not part of the program and keep their own licences - public
domain or Creative Commons - listed with credits in midifiles/README.md.