Website, playground and full documentation
F# tooling for the Motorola DSP56300 family, and on top of it, a workflow for writing Elektron Machinedrum machines: MDS packages for X.20, the MDX custom firmware.
You prototype a machine in F# as three functions (init, trig, render) over fixed-point types
that behave like the DSP's own arithmetic, and run it as ordinary code on .NET, or through
Fable as JavaScript and Rust. The same code then compiles to DSP56300 assembly,
graded word for word against the prototype on the DSP56300 emulator, with every call's cycles
measured against the track's limit. That allows you to audition and render your kernels long
before you spend effort on hand optimisation or on the real machine.
The fsdsp56k command line also assembles, checks, disassembles, packs and converts hand-written
machines (MDS packages and SysEx dumps), and runs them with a WAV and a cycle report.
The website has the commands, the kernel pipeline, the DSL, and a playground where the shipped kernels and public MDS machines play in your browser.
dotnet tool restore && dotnet paket install
(cd native && cargo build --release) # oracle, emulator, import, run
./scripts/fetch-fixtures.sh # shipped machines the tests compare against
dotnet run --project tests/dsp56k.tests
dotnet run --project src/dsp56k.tool -- <command> --help lists each command's options.
fsdsp56k stands on other people's work:
Motorola for the DSP56300 and asm56300;
Elektron for the Machinedrum;
Justin Mammarella and Yatao Li for MDX, and Justin Mammarella for
MDS;
The Usual Suspects for their dsp56300
emulator, which runs the browser playground;
Matt Borgerson for dsp56300, the oracle, assembler and
emulator behind every grade;
Matthew Fecher (AnalogMatthew) and Fadedlimes for the TX6 kit in
kitbasher.
The full credits are on the website.
AGPL-3.0-or-later (LICENSE). Ported machines keep their own licences and attributions (THIRD-PARTY-NOTICES.md); dependencies keep theirs.