{"id":50766074,"url":"https://github.com/rkrajnc/sidsynth-mist","last_synced_at":"2026-06-11T14:01:18.585Z","repository":{"id":363910421,"uuid":"1252694390","full_name":"rkrajnc/sidsynth-mist","owner":"rkrajnc","description":"SID synthesizer for the MiST board","archived":false,"fork":false,"pushed_at":"2026-06-10T21:08:46.000Z","size":557,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-10T23:08:34.441Z","etag":null,"topics":["c64","fpga","midi","midi-player","sid","sidsynth","synth","synthesizer"],"latest_commit_sha":null,"homepage":"https://somuch.guru/category/fpga/sidsynth/","language":"SystemVerilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rkrajnc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-28T19:21:58.000Z","updated_at":"2026-06-10T21:08:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rkrajnc/sidsynth-mist","commit_stats":null,"previous_names":["rkrajnc/sidsynth-mist"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/rkrajnc/sidsynth-mist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkrajnc%2Fsidsynth-mist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkrajnc%2Fsidsynth-mist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkrajnc%2Fsidsynth-mist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkrajnc%2Fsidsynth-mist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rkrajnc","download_url":"https://codeload.github.com/rkrajnc/sidsynth-mist/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkrajnc%2Fsidsynth-mist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34201842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c64","fpga","midi","midi-player","sid","sidsynth","synth","synthesizer"],"created_at":"2026-06-11T14:01:04.001Z","updated_at":"2026-06-11T14:01:18.556Z","avatar_url":"https://github.com/rkrajnc.png","language":"SystemVerilog","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SIDsynth-MiST\n\n\nA standalone MOS 6581/8580 (SID) synthesizer for the\n[MiST](https://github.com/mist-devel) FPGA board. The SID sound chip is\nborrowed from the [C64-MiSTer](https://github.com/MiSTer-devel/C64_MiSTer)\nproject and driven two ways at once:\n\n- **MIDI synth** — MIDI notes arrive on the board's serial input (via\n  opto-isolator), are parsed and voice-allocated in hardware, and play\n  through a SID core in real time.\n- **`.sidraw` playback** — a second SID core plays a tune streamed from\n  the SD card as a `.sidraw` register dump, picked from an on-screen OSD\n  menu, in parallel with the live MIDI synth.\n\n\n## Status\n\nThis build is an early bring-up. What works today:\n\n- `.sidraw` tunes streamed from the SD card, selected via an OSD menu;\n- a **monophonic** MIDI synth — one SID voice, last-note priority;\n- no MIDI CC handling (note on/off and pitch only).\n\nShort-term goals:\n\n- **polyphonic** voice allocation across the SID's voices;\n- MIDI CC controls (filter, envelope, and other SID parameters).\n\n\n## Layout\n\n```\nrtl/    SID core, MIDI front-end, .sidraw player + SD reader, OSD/video,\n        DC blocker, SDM DAC, top\nfpga/   Quartus project (device, pins, PLLs, SDC) + build.sh\nhex/    legacy .sidraw BRAM init (unused in this build; SD streaming only)\nsw/     sidraw-dump host tools (.sid -\u003e .sidraw -\u003e .wav)\n```\n\n\n## Build the FPGA core\n\nQuartus II 13.1 is required; the build script runs it inside a Docker\nimage so no local install is needed:\n\n```sh\ncd fpga\n./build.sh\n```\n\nOutput lands in `fpga/build/`:\n\n- `sidsynth_mist.rbf` — copy to your MiST SD card as `core.rbf` to run it.\n- `sidsynth_mist.sof` — program over JTAG with\n  `quartus_pgm -m jtag -o \"p;build/sidsynth_mist.sof\"`.\n\n\n## Build the host tools\n\n`sw/sidraw-dump/` builds a triplet of CLI tools (`sidraw-dump`,\n`sidraw-play`, `sid-play`) that convert between `.sid`, the custom `.sidraw`\nregister-dump format, and `.wav`. They statically link vendored copies of\nlibsidplayfp + libresidfp, so the result is a self-contained binary:\n\n```sh\ncd sw/sidraw-dump\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake -j\n```\n\n\n## Play tunes from the SD card\n\nTunes are loaded at runtime from the SD card — no rebuild needed. Convert a\n`.sid` to the `.sidraw` register-dump format with the host tools and copy it\nto a `SIDSYNTH` directory on the card:\n\n```sh\nsidraw-dump your_tune.sid -o your_tune.sidraw\ncp your_tune.sidraw /path/to/sdcard/SIDSYNTH/\n```\n\nWith the card inserted, press **F12** on the MiST to open the OSD menu and\npick a `.sidraw` file. `user_io` mounts the selection and `sidraw_sd_reader`\nstreams it on demand through a small FIFO into the `.sidraw` player — so tune\nlength is bounded by the SD card, not on-chip BRAM. Stock MiST firmware is\nused; no custom firmware is required.\n\n\n## Blog\n\nRead more about what I'm working on my [blog](https://somuch.guru/category/fpga/sidsynth/).\n\n## License\n\nThe RTL in `rtl/` is licensed under the\n[CERN-OHL-S v2](rtl/LICENSE.txt) (Strongly Reciprocal). The vendored\nlibsidplayfp and libresidfp sources under `sw/sidraw-dump/external/` are\nGPL v2 and remain under their own licenses.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkrajnc%2Fsidsynth-mist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frkrajnc%2Fsidsynth-mist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkrajnc%2Fsidsynth-mist/lists"}