Skip to content
smoothdeveloperPublic

About

DSP56300 toolchain in F#. Write, audition and render kernels on an emulated DSP, and target the Machinedrum MDS (X.20 MDX).

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

fsdsp56k

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.

Build and test

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.

Credits

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.

Licence

AGPL-3.0-or-later (LICENSE). Ported machines keep their own licences and attributions (THIRD-PARTY-NOTICES.md); dependencies keep theirs.

About

DSP56300 toolchain in F#. Write, audition and render kernels on an emulated DSP, and target the Machinedrum MDS (X.20 MDX).

Topics

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages