Christopher Snowhill

Blog


Meet Tabula Sonora: Roland GS once abandoned

August 3, 2026

Since Roland decided to completely abandon their reference GS synthesizer, and pulled it from sale, leaving it without an effective replacement... we decided to step in.

Kevin decided to start this effort, and began the process before even telling me what was up. He eventually told me about it and we agreed that this should be a fairly safe project to document, since there is no modern commercial replacement available, and the original hardware equivalent is more than 20 years old.

Through Ghidra decompilation and a large amount of analysis, we determined to a strong degree that the Sound Canvas VA product is a fairly faithful reimplementation of the Sound Canvas SC-8820: Right down to the Wave ROMs, a 16MB and 8MB block, which is still currently guessed, as we do not have the resources to dump a real SC-8820, or the desire to potentially destroy one in the process of dumping and tracing it.

The end result is our organization and project: Tabula Sonora. The spec repository maintains the original notes and findings, minus the decompilation and test corpus MIDI files.

The first stage of implementation was a now-archived .NET Managed implementation, which until a few days ago was the reference implementation. It is now missing many key features. Nothing further should use or extend this repository, it is kept for historical purposes only.

Now we are further fleshing out a working native C++20 implementation that implements most of the supported features, as well as some extensions and nice-to-haves that produce an enhanced product.

The entire project is under a BSD-3-Clause license. It requires a legitimate copy of the SCCore.dll from Sound Canvas VA 1.1.6 for 64 bit Intel Windows. If anyone wants to throw analyzers at older versions to determine how much, if any, of the required data already exists in older versions, that is a welcome contribution.

The requisite data that must match is the Wave ROM chunks, and the data tables used by various things, such as the send effects engine in the XP6 implementation, and the ramps and tables exposed to the XP6 or what would be the main SH-2 CPU on the original SC-8820. A lot of tables are only exposed to one or the other, and never touched directly by the opposite component.

We are continuing to implement more and more of the missing functionality. In fact, I am currently working on the hidden XG support, which at original finding supported XG System On messages to turn on a hidden XG mode. Crashes identified on the original SCCore.dll with XG dumps have turned out to be cases like a Part mode programming message that targeted a part index that was out of range for the synthesizer's hard coded 32 parts. (In this case, part #32, where 0-31 are legal.) These out of range writes were never range checked by the implementation. It is unknown if the real SC-8820 also implemented these, and similarly threw hardware exceptions, or just wrote to memory out of range.

A live web page implementing a given version of the C++ engine compiled by emscripten and wired into a web interface exists here. It stores the SCCore.dll you supply to it in a client local database blob, for future page loads, and is not guaranteed to keep it forever, but it never leaves your machine.

An implementation for my macOS player, Cog, already exists, but has not been published yet, pending completion of the implementation to our satisfaction. A similar implementation for Fooyin in my plugins repository is planned for a later date.



Support


Social


Contact me