This is cool, so TL;DR: The 3rd gen run of a Roland early digital synth product had an unresolved timing issue causing pitch playback problems. Recently, investigation revealed they hadn’t accounted for an Intel MCU part sub. The spec indicated the sub part was running too fast. They downclocked it via crystal swap which destroyed the unit’s MIDI timing. So they located the control ROM instructions to modify to fix the resulting MIDI sync issue and burned a new one:
...plus the quartz crystal that you need to swap. And to get those 5 bytes into the ROM, you have to desolder that too unfortunately. But yeah, still cool.
I get what you mean, it was a temporal issue, but it’s a PCM synth. That’s sample playback, and vibrato in that context is a modulation of pitch of sample playback over time. It’s a pitch playback problem that was caused by too fast a clock causing too fast a pitch playback modulation. (The LFO being used to produce the vibrato effect being misclocked due to too-fast MCU, causing a pitch playback problem. The pitch playback modulation was at the wrong rate.)
Awesome work! I love the care and attention that people put into understanding these devices.
I'm currently in the middle of a vintage synthesiser hacking project as well. Last year I made a fully annotated disassembly of the Yamaha DX7 firmware, and did some other technical analysis of the synth. Since then, I've been waiting for a chance to put this knowledge to good use. I found a DX9 on a local trading site, and I'm in the process of hacking its firmware to remove the 4-operator restriction that made it such an unpopular synth.
Unfortunately you can't add any more operators to the DX10, however you could probably add multitimbrality! Yamaha's YM2164 sound chip at the heart of the DX100 is pretty well understood, and very similar to the later YM2414 used in the multitimbral TX81Z.
Are you familiar with Dexed[0]? It’s a free, open source DX7 emulator for most major DAWs. They’ve done similar work in figuring out how the device works internally.
I browsed through the repository as discovered by colejohnson66 downthread https://github.com/ajxs/yamaha_dx7_rom_disassembly. This is an example of superb, meticulous, lovingly documented work. The kind of thing you don't see every day, congratulations. The attention to detail is really just chef's kiss, starting with a really good repository name (a small thing, but still), continuing through clear and apparently comprehensive documentation of what you did and why, then on to beautifully formatted and commented assembly language (much better than the original source code I'd wager) with coherent and consistent paragraph commenting a particular delight, and finally (and very importantly) dedication to making sure others can reproduce your results and generate a matching binary too. There are likely to be other things of beauty in there I have forgotten to highlight, it's just that good. Oh the FAQ of course, what a great FAQ. Really I am being very wordy for someone that's lost for words.
BTW, I love retro computing too, this is my best attempt so far in the field https://github.com/billforsternz/retro-sargon. I aspire to similar standards to your good self, but I'm not there yet.
Thank you so much for your very kind words! I really appreciate them! It was indeed a labour of love. Being able to (re)create a matching binary was my benchmark for success, to prove the accuracy of the reverse-engineering.
Unfortunately it's impossible to know how well-documented the original assembly was. I've poked around in some of Yamaha's other synth firmware from the same era, and there's some reuse of code between them. That suggests there was some shared documentation, and tooling available between teams. Speaking of documentation, and naming: The placement of functions within the binary probably hints at the organisation of the project, and how things were named, however it's hard to tease out the abstractions they were working with after the fact.
This was my first project in 8-bit system programming. The Hitachi 6303 manual has some suggestions to use for project documentation that were even more comprehensive. I'd love to know more about how engineers worked in this era!
Also, your project looks amazing! I'll definitely give this a good look!
Thank you! I try to put the same level of care into the professional work that I do, when the company allows me to do so. It's very rarely as fun and engaging as this project is though!
Yes, the "Worst FM Synth Ever[0] is actually a DX7 in disguise. Internally it uses the same sound generation hardware as the DX7. The internal circuitry is different overall, but the main sound generation chips, DAC, and output circuitry are identical. This means that by altering the firmware it's possible to turn the DX9 into a DX7, with a few differences. As you've noted, one of them is the non-velocity sensitive keyboard. You can make it respond to velocity, and aftertouch via MIDI, but making the keyboard itself velocity, or aftertouch sensitive isn't possible unfortunately.
You'll probably love this - a complete reverse engineering of the Virus Synthesizer DSP code, which now runs extremely well in a DSP56400 emulator .. meaning you can run the Virus code directly on your PC and get the same audio as you'd get from real hardware:
I received a final software update from Kawai and had to open it to install the EPROMs, which is how I saw it. It was a very cool synth - very high quality feeling.
There's also a cool story about somebody fixing some bugs on the Six~Trak and related synthesizers by Sequential that were among the first MIDI synthesizers:
Though some bugs are really part of the sound now in my opinion. I bought a DX11 to replace my DX27S but I discovered it doesn't glitch as nice and now I need to keep both.
If a person wanted to be able to play a little keyboard, would they start with piano lessons or is synthesizer a unique enough instrument that you would start with a synthesizer teacher? Does the world of piano have somebody like Justin Sandercoe from the world of guitar?
36 comments
[ 3.2 ms ] story [ 82.3 ms ] threadI spent some time inside an early Roland sampler of this era during the pandemic. It’s really well engineered stuff that sounds great.
I'm currently in the middle of a vintage synthesiser hacking project as well. Last year I made a fully annotated disassembly of the Yamaha DX7 firmware, and did some other technical analysis of the synth. Since then, I've been waiting for a chance to put this knowledge to good use. I found a DX9 on a local trading site, and I'm in the process of hacking its firmware to remove the 4-operator restriction that made it such an unpopular synth.
You beast!
It’s extremely documented. More than I was expecting.
[0] https://asb2m10.github.io/dexed/
Jesus.
BTW, I love retro computing too, this is my best attempt so far in the field https://github.com/billforsternz/retro-sargon. I aspire to similar standards to your good self, but I'm not there yet.
Unfortunately it's impossible to know how well-documented the original assembly was. I've poked around in some of Yamaha's other synth firmware from the same era, and there's some reuse of code between them. That suggests there was some shared documentation, and tooling available between teams. Speaking of documentation, and naming: The placement of functions within the binary probably hints at the organisation of the project, and how things were named, however it's hard to tease out the abstractions they were working with after the fact.
This was my first project in 8-bit system programming. The Hitachi 6303 manual has some suggestions to use for project documentation that were even more comprehensive. I'd love to know more about how engineers worked in this era!
Also, your project looks amazing! I'll definitely give this a good look!
BTW, another thing that made it less popular: its keyboard. It didn't have velocity sensitity, nor aftertouch. Or is that also a ROM-upgrade away?
[0] https://yamahadx9.com/DX9Worst.html
https://dsp56300.wordpress.com
Pretty astonishing bit of reverse engineering there ..
I had a later Kawai K5000 which added short PCM samples for attack transients. That thing was crazy, foolishly gave it away more than a decade ago
http://www.tauntek.com/SixTrackBug.htm
Though some bugs are really part of the sound now in my opinion. I bought a DX11 to replace my DX27S but I discovered it doesn't glitch as nice and now I need to keep both.