Ricard's synthesizer hacking page

Synth hacking in my case involves hacking synthesizer operating systems to make some often minor improvement. Haven't done a lot of this, but here's a list of what I have done.

Remove All Notes Off from Roland D-50

One irritating thing with Roland synths, at least from the 80's vintage, haven't checked recently, is that when all keys are released they emit a MIDI All Notes Off message. While technically correct, it can confuse sequencers such as the E-Mu XL-7, probably because All Notes Off is a Control Change messages and not a Note message, which I'm guessing is handled differently in the sequencer. In the XL-7 case, the All Notes Off message can end up being juxtaposed with surrounding Note messages, leading to chopped-off or missing notes.

Ok, so this could have been done using an external MIDI filter box, but it's cooler to do this within the synthesizer itself.

The main hassle here was that the CPU in the D-50 (a NEC µPD78312) is a rather unusual one so finding an opcode list let alone a disassembler was challenging. With some help from the UK Vintage Radio forum I managed to locate an opcode map and actually also a disassembler (see the link for details) and I was on the way.

An additional problem was that the OS ROM in the D-50 is soldered in place, so I had to remove the chip, then read it, then mount a socket, then after rewriting the small part of the OS code that handles the transmission of the All Notes Off message program an EPROM and mount it.

Anyway, the resulting binary image is here. It is based on the 2.20 version of the original D-50 ROM.

Remove All Notes Off from Roland S-10

This was actually done before the D-50 above, but the S-10 is probably of less interest these days so I put it second. Anyway, the work was considerably easier for this one as the S-10 has its OS EPROM mounted in a socket, and the CPU is Intel 8031 based so much easier to find software tools for disassembling etc.

Interestingly, the OS MIDI code is rather differently designed than in the D-50, although the two machines are from the same company and of similar vintage.

Anyway, the resulting binary EPROM image can be found here.

Remove All Notes Off from Roland Alpha Juno-2

As in the D-50, at least in the machine I have, Roland opted to solder the EPROM in place (altough it is an EPROM and not an OTP). So, again, cut the pins and mount a socket to put the new one in. (In pictures I've seen on the 'net it appears that some (probably earlier) versions of the machine have a socket for the EPROM.

Like the S-10, the Juno-2 uses an MCU (8032) derived from the Intel 8051. Decided to not only remove the All Notes Off message but also change the startup text to something more welcoming, as well as adjust the version number (visible by holding PORTAMENTO and MOD RATE while turning on the machine).

The resulting binary image is here.

Fix the autotune routine in an Oberheim OB-Xa

Ok, so the OB-Xa is not my favorite synthesizer. Horribly overweight and oversized for what it is, with small hard-to-turn knobs, and not very many parameters to boot. The only redeaming feature is the existence of both -24 dB/octave and -12 dB/octave filters, but given that there are actually two CEM 3320 4-pole filter chips inside, they could have done much more with the hardware.

But I digress.

One problem with the OB-Xa is that there is a bug in the autotune routine, whereby voices which during are proving hard to tune and end up being slightly sharp are reported as being 'untunable', which results in a flashing LED to be shown for that voice after autotuning has completed.

The reason for this is that the autotune acceptance range in the original OS is +0 / -24 cents. In other words, it's acceptable for an oscillator to be 24 cents flat, but not a single cent sharp. This is obviously a bug, as the acceptance range should be symmetric. I therefore modified the autotune acceptance range to be +/- 6 cents. It would be quite easy to change this to +/- 12 cents if necessary to get the same acceptance range as the original but without the offset, but if the synthesizer is working properly it should be no problem to get the oscillators within +/- 6 cents; it should be much closer than that anyway.

Normally this is not noticed on a properly working OB-Xa, as the autotune routine makes several attempts at tuning each oscillator, and one of them is bound to hit within the acceptance range. I discovered the problem on an OB-Xa where there was a slight amount of noise modulating the oscillators, causing them never to hit spot on during autotuning.

This was all tested and verified using my Nord Lead 2 patched into the autotune comparator on the lower mother board of the OB-Xa, together with a Korg tuner to measure the tune range.

Programming-wise, the OB-Xa has a Z80 CPU which I'm very familiar with, furthermore, the software wasn't very optimized to start with, so it was easy to optimize it in order to fit in the extra bytes needed to fix the bug.

So, after that long explanation, here's the revised XAC2.BIN EPROM for the the OB-Xa, file name XACA2.BIN (checksum B559h if you want to verify the downloaded image). If you want to try this, but you don't have an XAC2.BIN EPROM in your OB-Xa but rather another firmware version, email me and I'll send you images for the whole set.


This page is (c) Copyright 2013-2015 by Ricard Wanderlöf

Back to my synthesizer home page.