[HN Gopher] Yamaha DX7 chip reverse-engineering, part 6: the con...
___________________________________________________________________
Yamaha DX7 chip reverse-engineering, part 6: the control registers
Author : picture
Score : 54 points
Date : 2022-02-07 19:18 UTC (3 hours ago)
(HTM) web link (www.righto.com)
(TXT) w3m dump (www.righto.com)
| kens wrote:
| Yes, another DX7 post. Author here if there are any questions :-)
| bsedlm wrote:
| I have a question (from part one); it's a clarification
| question.
|
| > The digital implementation of frequency modulation starts
| with a lookup table that holds a digitized sine wave.
|
| > The next step is to modulate the output by adding a
| modulation signal to the index.
|
| In those paragraphs, you're saying that you start with a table
| of sine-function values.
|
| This table has (for the sake of example) 4096 different values.
| I suppose in real life there may be many more.
|
| then you read this table by incrementing an index between 1 and
| 4096. this happens many times per second and every time you
| increment the index by one unit. This will output a sine wave
| at a specific frequency determined by how quickly you increment
| this index (i.e. how often the table is read out).
|
| So far alright, if you're adding 1 to the index 40960 times
| every second you'll a sine wave with a 10hz frequency (is this
| correct?)
|
| but then, instead of adding 1 to the index 40960 times per
| second, you add 100 every single one of those 40.1k reads of
| the table? and this generates a sine with a frequency of
| 1000hz!?
|
| this is quite frankly very surprising to me. The kind of thing
| I don't see myself coming up with easily; referring to the fact
| that it's possible to change the output frequency just by
| jumping around the table (instead of reading it all out one by
| one jump the index by 100 table entries) while keeping the
| number of times per second the table is read the same.
|
| Finally, if the index increments themselves are read out from
| another sine wavetable, you get FM modulation... this is more
| reasonable but it depends on the previous very surprising (to
| me) way to change the frequency of a sine wave.
|
| thanks for the great write-ups.
| kens wrote:
| Yes, that's essentially how it works. You might think that
| jumping through the sine table in large steps would make your
| waveform too irregular. But that's what happens with any
| digital audio. E.g. a CD has music at 44kHz, so a 4400 Hz
| tone only gives you 10 points from a sine wave which would
| seem very irregular. But a low-pass filter smooths things
| out, so you end up with a nice smooth sine wave. (Look up
| Nyquist frequency if you want more details.)
|
| One additional thing about the DX7 index is that you can
| think of the index as having 10 fractional bits, so you have
| much more accuracy in the increments. Otherwise, the
| frequency resolution is pretty bad because the frequency
| changes in big jumps when the index step changes by 1.
| jacquesm wrote:
| Keep them coming :)
| DoctorNick wrote:
| Are you working on an FPGA re-implementation? Basically
| everything with a DX7 chip in it is insanely priced (especially
| the PLG cards for the Yamaha MU-series, those are >$400), so
| this would be awesome to have.
| mbf1 wrote:
| I do wonder if it's feasible just to use some cheap off the
| shelf (COTS) general purpose ARM cpus like in Rasperry Pi
| computers and some code to perform the same calculations that
| Yamaha did in an ASIC in 1980's in real time. Even PIC
| microcontrollers today have a decent amount of computation
| for a couple cents.
|
| Being latency sensitive here is definitely key.
| DoctorNick wrote:
| Someone ported an emulator to the teensy:
| https://github.com/dcoredump/MicroDexed
| edb_123 wrote:
| Very good and deeply interesting work! As the owner of the
| later model, I have to ask: would you consider doing the same
| with a DX7II, if they are dissimilar enough at this level to
| warrant doing do?
| kens wrote:
| My plan is to look at the DX7's other custom chip (the EPS),
| but I probably won't look at another synthesizer since I have
| too many other projects.
| cush wrote:
| Is the idea this will soon yield a VST/emulator?
| [deleted]
| jacquesm wrote:
| That has already been done (see: Dexed), think of this as the
| last steps in documenting what exactly it is that the DX7
| actually does internally.
|
| You can then use that to:
|
| - verify that the emulators indeed get it all correct
|
| - test your assumptions about how you thought it worked
|
| - maybe program it to do things it wasn't strictly speaking
| meant to do
| monocasa wrote:
| What's the expected clock rate for the logic? I think I missed
| that for context. The output is probably latched into the DAC
| at tens of khz, but there's so much bit serial stuff and time
| shared logic like the oscillators that it's much higher
| internally? Does it reach mhz?
| jacquesm wrote:
| 3142144 Hz
|
| 4 times the DAC frequency.
|
| Or, actually, 49096 * 16 * 4
|
| http://yates.ca/dx7/Schematics%20&%20PCBs/DX7%20Schematic%20.
| ..
|
| Top right of the diagram.
| mmastrac wrote:
| Almost p MHz!
| jacquesm wrote:
| Heh, I must have looked at that diagram a million times
| and never noticed that. Thank you!
| throw_m239339 wrote:
| No question, just fascinating article, although I'm not an
| electrical engineer nor I'd be able to program these chips.
| TheOtherHobbes wrote:
| "The second way updates a single entry, allowing different notes
| to have different algorithms..."
|
| So the chips allowed multitimbral operation, but the DX7 didn't
| support it?
| kens wrote:
| Yes, that's how it looks, the chip supports multitimbral
| operation but the synthesizer doesn't. Disclaimer: I haven't
| tested this out, so I'm not 100% sure.
| olliej wrote:
| This is a skill I wish I had because it just seems so
| interesting, but I'm badness enough at EE (quantitively bad: I
| failed out :D ) to not have any real hope :D
___________________________________________________________________
(page generated 2022-02-07 23:00 UTC)