yamaha_dx7_rom_disassembly
music-synthesizer-for-android
yamaha_dx7_rom_disassembly | music-synthesizer-for-android | |
---|---|---|
4 | 3 | |
60 | 395 | |
- | - | |
7.1 | 0.0 | |
about 1 month ago | over 2 years ago | |
Assembly | Jupyter Notebook | |
- | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
yamaha_dx7_rom_disassembly
-
Reverse-engineering the Yamaha DX7 synthesizer's sound chip from die photos
I wrote the article mentioned by Ken: https://ajxs.me/blog/Yamaha_DX7_Technical_Analysis.html
I've unwittingly become a bit of a Yamaha FM Synth historian!
Here are some other contributions to reverse-engineering the DX7:
A fully documented disassembly of the DX7 ROM: https://github.com/ajxs/yamaha_dx7_rom_disassembly
A new firmware ROM that makes the DX9 function like a DX7:
-
Fixing a 30 year-old Roland synthesizer Bug
I browsed through the repository as discovered by colejohnson66 downthread https://github.com/ajxs/yamaha_dx7_rom_disassembly. This is an example of superb, meticulous, lovingly documented work. The kind of thing you don't see every day, congratulations. The attention to detail is really just chef's kiss, starting with a really good repository name (a small thing, but still), continuing through clear and apparently comprehensive documentation of what you did and why, then on to beautifully formatted and commented assembly language (much better than the original source code I'd wager) with coherent and consistent paragraph commenting a particular delight, and finally (and very importantly) dedication to making sure others can reproduce your results and generate a matching binary too. There are likely to be other things of beauty in there I have forgotten to highlight, it's just that good. Oh the FAQ of course, what a great FAQ. Really I am being very wordy for someone that's lost for words.
BTW, I love retro computing too, this is my best attempt so far in the field https://github.com/billforsternz/retro-sargon. I aspire to similar standards to your good self, but I'm not there yet.
-
Patching an Embedded Synthesiser OS from 1996 with Ghidra
Very cool! This is really great work! It's awesome that there's been so many synthesiser related topics on Hacker News lately. I did a similar project myself to disassemble, and fully annotate the firmware for the Yamaha DX7: https://github.com/ajxs/yamaha_dx7_rom_disassembly
The biggest hint I could give anyone looking to disassemble a synthesiser operating system is to direct your attention towards the code processing individual MIDI messages. The code is invariably is huge mess, however you'll be able to very quickly identify the operating system's core functions, since the corresponding SysEx parameter numbers clearly identify what functionality you're looking at.
-
Yamaha DX7 reverse-engineering, part III: Inside the log-sine ROM
Anthony just released his annotated DX-7 ROM listing:
https://github.com/ajxs/yamaha_dx7_rom_disassembly
music-synthesizer-for-android
-
Reverse-engineering the Yamaha DX7 synthesizer's sound chip from die photos
This is for Cortex A8, which was the chip in the Nexus One. I wrote the original version of sound synthesis directly in ARM assembler[1]. It was very highly optimized, I remember using a cycle counting app that flagged any dependency chain that would cause the processor to stall, and ultimately utilization was in the 90%+ range. Back in those days, processors were simple enough you could do this kind of optimization by hand. By the time of Cortex A15 (Nexus 10 etc), instruction issue was out-of-order and much harder to reason about.
The best current info I could find for the latency advice is [2]. Quoting, "Moving data from NEON to ARM registers is Cortex-A8 is expensive..."
[1]: https://github.com/google/music-synthesizer-for-android/blob...
[2]: https://community.arm.com/support-forums/f/armds-forum/757/n...
Nice! A Google engineer also reverse engineered the DX-7 a while back, although I think it was just based on analyzing the behavior, not from the actual die itself like this. (I seem to recall there was more documentation/blog posts, but it looks like it was lost in the migration from Google Code to GitHub.) Later, someone used this as the core engine for the VST plugin Dexed.
-
Reverse-engineering the Yamaha DX7 synthesizer's clever exponential circuit
The specific thing I've found least documented, yet most important for the distinctive percussive attacks of the DX7, is a random variation of the pitch envelope for the first few milliseconds of the note. That's almost short enough it could be done in the firmware, but I believe it might be in the hardware. It's not present in the msfa source, but might have been recovered by later Dexed authors (I haven't carefully looked at their code).
If you get to the envelope hardware, you'll find it's just as clever as the exponential and sine generators. There's some info at [1], but it doesn't capture every single thing I found - there are cases where there is a slight amount of additional noise in the amplitude, I'm not sure whether intentional to give more character or an unintentional artifact. That's also missing from the msfa source.
[1]: https://github.com/google/music-synthesizer-for-android/blob...
What are some alternatives?
dexed - DX7 FM multi plaform/multi format plugin
zynaddsubfx - ZynAddSubFX open source synthesizer
opl3_fpga - Reverse engineered SystemVerilog RTL version of the Yamaha OPL3 (YMF262) FM Synthesizer
Sonic Pi - Code. Music. Live.
sim68xx - Simulators for 6800 based CPUs
fluidsynth - Software synthesizer based on the SoundFont 2 specifications