[sdiy] Logs on a micro? Was: Reverse engineer an EPROM encoding?

MTG grant at musictechnologiesgroup.com
Wed Nov 13 00:19:28 CET 2013


I have made some progress in figuring out this EPROM/ASIC/DAC combo that 
Kawai were using in the mid-80's, but I need some help with coding 
suggestions.  You may recall some of the details by looking back in the 
archives. It's a drum machine that stores the sounds in some kind of log 
format. The ASIC then anti-logs the data before presenting it to the 
DAC. The ASIC does mixing and volume control.

I made an EPROM containing a 12-bit ramp and inserted it in the drum 
machine. Then for every friggin single step of that ramp, I recorded the 
output from the ASIC to the DAC. Here is the transfer function:

http://musictechnologiesgroup.com/blog/wp-content/uploads/2013/11/Kawai_R100_DGU.bmp

So one obvious way of pre-encoding my own sound data would be to use a 
look-up table for the data I've recorded. BUT I'm looking for 
alternatives and since there has been talk about fixed point math and 
the like before... I thought people here might help. In a nutshell, it 
looks to me like for every 80h change in input data, the output data 
doubles. I wonder if there is a some binary math I can do here that do 
the same thing??  Here are some sample values:

EPROM out   DAC Input
  (hex)      (decimal)
---------   ---------
   000           0
   080           0  (1/16)
   100           0  (1/8)
   180           0  (1/4)
   200           0  (1/2)
   280           1
   300           2
   380           4
   400           8
   480          16
   500          32
   580          64
   600         128
   680         256
   700         512
   780        1024
   7FF        2048 (rail)

I don't think it's piecewise linear either, but I've not had time to 
look at the in-between values.

GB

On 10/16/2013 12:40 PM, Scott Nordlund wrote:
> Several drum machines did use Mu-law encoding (Drumulator or something; I don't remember). And several others used floating point DACs (various Yamaha models since they were into that sort of thing). But you'd be able to tell this from the DAC circuits themselves. I do think it's likely that the waveforms are stored in logarithmic format, which is exponentiated before being sent to the DAC, but for a different reason. Two part question: (1) Is it possible to control the amplitudes of the individual drum sounds? (2) Is it a multiplying DAC configuration where the sounds are scaled by a time-multiplexed control voltage fed into the DAC's Vref pin? If (1) is yes and (2) is no, it's most likely that the wave data is stored in a logarithmic format for easier amplitude control. As in the DX7, amplitude is controlled by adding the amplitude value to the logarithmic format waveform data, then passing the result through an exponential table. y = exp(log(a)+log(b)) is equivalent to y = a*b.
 It's more efficient because it requires only a lookup table rather than a multiplier.
>



More information about the Synth-diy mailing list