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.
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.
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.
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.
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.
Back to my synthesizer home page.