Korg DW6000 256 Waveforms Mod

DW6000 Mod

The Korg DW6000 has 8 digitally stored waveforms, 2 oscillators which can pick any of the 8 waves independently with octave shift and detune plus 6 analogue VCFs. Perfect for modifying!

DW6000 unmodified

Without access to schematics I wondered if it was possible just to boost the waveform count by increasing the size of the wave ROMs. The first step was to open up the synth, deduce which ICs were the wave ROMs and to desolder them. The Wave ROMs are one-time programmables and are 32 kbytes each. They are labelled IC29 and IC30.

DW6000 Mod

I then needed to read the contents of these ROMs. They read OK in my EPROM programmer as standard 27256 EPROMS which was an excellent start. I then had to work out Korg's waveform storage format. The DW6000 has 8 waves and the DW8000 has 16. Now if 64 kbytes is used for the waves (the ROMs store 32 kbytes each for 8 waves) and the waves are only 8 bit resolution then that's a whopping 8 kbytes per wave. What's going on?

IC30 contains waves 1 to 4 in 8 octaves of range.

These are made up of:

Wave 1:

0000-2047 2K samples Octave 1

2048-4095 2K samples Octave 2

4096-5119 1K samples Octave 3

5120-6143 1K samples Octave 4

6144-6655 512 samples Octave 5

6656-7167 512 samples Octave 6

7168-7679 512 samples Octave 7

7680-8191 512 samples Octave 8

As the number of samples per wave reduces, the more the waveform is band limited. This is to reduce the amount of aliasing distortion that is created by this process for high frequency waves. Korg created these waveforms mathematically using a computer program performing additive synthesis.

Waves 2 to 4 are similarly constructed

DW6000 Waves 1 to 4

IC29 contains waves 5 to 8 in 8 octaves of range.

DW6000 Waves 5 to 8

Now to fill it with more interesting waves. I've been collecting waves for a while as I find them on the internet but also I had to create some myself. My 256 waves are culled from sources such as the PPG Wave 2.3, Ensoniq ESQ1, DW8000 (ha!), Casio CZ series (samples), formants (vowel sounds) and single cycle segments snipped from classic vintage synth samples, even a stylophone!

The waves I had collected were usually 256 samples per wave. I needed to get the variants of 2048 samples per wave, 1024 samples per wave and 512 samples per wave. I created a batch script in Adobe Audition to do this. I didn't attempt to do any band limiting at this time but it would be here that you would do it. I consequently expected to hear horrible aliasing distortion in the upper registers for the more complex waves with a lot of high frequency content. I wasn't disappointed!

I had to write a little C program to glue all these separate files together. Remember that there are 8 separate waves (1 for each octave) to make a whole wave and that there are now 256 new whole waves. That's 2048 separate waves! Of course this is then split into two new 27C801 EPROMs, each one being 1 MByte. The DW6000 would go from 64 kbytes of ROM storage to 2 Mbytes!

Now how do I got about putting the new ROMs in and accessing the new waves. I didn't want to access all 256 from the new control as this would force Osc 1 and Osc 2 to have the same waveform. Also there was no way I could rewrite the Korg software to have random access of teh 256 waves. I had to stick to Korgs 8 wave selection restriction. I then hit upon the Waveform Bank Select idea where I then would have 32 banks of waveforms with 8 waves in each bank. This way I could have Osc 1 and Osc 2 have any two separate (or same) wave within that bank. Adjusting the bank select in realtime would then sweep the waves for both oscillators.

Now, how to control the bank selection? The thought of MIDI control or other form of digital bank selection is very appealing (sequenced waves anyone?) but would need a fair bit of hardware for MIDI handling and microprocessor coding. I hit upon just plain simple voltage control. The higher the input voltage the greater the bank selection. This way perhaps analogue LFOs and envelope generates could affect the bank selection. Maybe the voltages that are presented to the internal VCF/VCA chips? This one for later!

For this I would need a simple potentiometer and an 8 bit ADC. Only the 5 most significant bits are needed to select the 32 banks. I would "throw away" the 3 LSBs. This would also help with reducing LSB dithering errors due to noise which would otherwise randomly switch adjacent banks.

It would be useful to see what bank I have selected. I would then need two 7 segment displays and a means of driving them. It soon become apparent that custom rather than proprietry logic would be needed. Fortunately I have a lot of experience with EPLDs and FPGAs - it's my day job! I found a simple FPGA that I would be able to program so as to generate the ADC control signals and to decode the binary bank select number into the 7 segment display format.

Now I needed to get the components and build it. I decided against a PCB due to time and expense constraints therefore good old stripboard came to the rescue. The problem was how to mount the FPGA which required a 44 pin PLCC socket. There are solutions that involve a converter board that goes from 44 pin PLCC to 44 pin DIL but they are expensive. Instead, I just used very long wire and let my FPGA flop about - not ideal but it worked well enough. Also I couldn't have components that were too high otherwise it wouldn't fit inside the case.

The new ROMs are 32 pin devices and the old ROMs are 28 pin devices. Most of the pins between the two versions are common so with some double socketing and with 4 pins dangling over the side I could fit the new ROMs in exactly the same place as the old ones. The extra pins were connected to the MSBs of the ADC for the bank selection.

A location for the dual 7 segment display and the pot had to be found on the front panel of the DW6000. There was a lovely space for this above where the presets are printed. Some drilling/sawing/filing later and everything fitted in there. I even had a nice plastic filter to fit over the 7 seq display to reduce the glare and finish the mod off nicely.

DW6000 Clear shot

I found a place to mount the board and I hot melt glued it in postion. Anything that would flap about also got hot melt glued too. I then found suitable ground and +5V connections and soldered my mod board power wires to these points.

DW6000 board in place

DW6000 board in place sideways look

Here's a picture of the finished modification.

DW6000 Ledtastic!

Audio examples

OK that's all well and good but how does it sound?

The first demo is the DW6000 in poly mode with a simple chord progression repeating. I slowly change the banks as the sequence repeats and towards the end go really crazy with the bank changes! This is recorded dry.

The second demo is the same poly mode demo but I've added effects and drums.

The third demo is the DW6000 in unison mode with a simple bassline repeating. Again, I slowly change the banks as the sequence repeats and towards the end go really crazy with the bank changes! This is recorded dry.

The fourth demo is the same unison mode demo but I've added effects and drums.

DW6000 Glowing!

Video examples

Here's two short clips, one of me putting it through its paces and the other showing you the insides and the mod board itself - it'll help if you pretend for now that your name is Mike - OK?

DW6000 Funky Joystick!

This modification could also be done to DW8000 and EX8000.

Please don't ask for schematics, FPGA code or the binary contents of the expanded ROMs for this mod. I really can't afford the time to support other peoples modification attempts. Sorry.

email me