Skip to content

Instantly share code, notes, and snippets.

@arachsys arachsys/8N70OS_.PGM
Last active Sep 9, 2017

Embed
What would you like to do?
Fixing CFX PopStudioGrand on Yamaha Montage
Fixing CFX PopStudioGrand on Yamaha Montage
===========================================
Generally, the quality control on factory patches in Yamaha synthesisers is
excellent. Occasionally, a duff one slips through the net, such as the
single-part CFX PopStudioGrand performance on the Montage. Two flaws in the
programming of this patch stick out like a sore thumb.
1. The performance squeezes much of the full four-part CFX Concert into a
single part. The eight elements available are sufficient for all the
velocity layers in the damped notes below G5, but not for a second copy of
these in the undamped high notes from G#5 up. The highest velocity layer is
used unconditionally at the top of the keyboard, giving a very harsh
discontinuity between the two ranges.
2. The half-damper feature is turned on, but the time is set very short
rather than at the realistic value used in the other piano performances.
This is presumably a simple mistake, but it results in a sharp and unnatural
'drop' of the sound at the slightest lift on the pedal.
Montage is a synthesiser: it's easy to program a version of the performance
with these warts eliminated.
The former can be fixed by removing the high-range element entirely, and
extending the main elements to cover the entire keyboard. Although this
doesn't reproduce the undamped ring on the highest notes, it sounds far
better than a harsh discontinuity at G#5.
The latter can be fixed by correcting the half damper time from 50 to 103,
matching the CFX Concert performance.
With these fixes, CFX PopStudioGrand is massively improved and matches the
quality of the vast majority of other performances on the Montage.
But wouldn't it be nice to fix the bug in the factory preset itself, rather
than being left with both the original broken preset and the fixed user
performance in category search?
At its heart, the Montage is just a 32-bit ARM Linux machine with some nice
custom DSP ASICs and shiny hardware. The firmware is stored in writeable
flash, so making the modification is both possible and fairly easy.
Montage firmware updates consist of an ext2 filesystem image which is
loopback mounted from a file 8N70OS_.PGM on an attached USB drive when the
machine powers up with the Utility and Cursor Up buttons held. The /init
script in an initramfs detects the magic button combination, mounts the USB
drive and filesystem image, then runs update.sh within that image.
(Incidentally, this name is sloppy: update.sh is actually exec()ed rather
than run with a shell, so needs execute permissions and #! magic.)
Real firmware updates overwrite the partitions on /dev/mmcblk0 with new
images, but you can instead use this mechanism to non-destructively run
scripts on the Montage, examine and learn about the system and even to make
changes. However, please remember that if your synthesiser bursts into
flames and kills the cat as a result of unofficial modifications gone wrong,
you are unlikely to elicit much sympathy from Yamaha.
The Montage X7L/X7U format is an evolution of the Motif X3A format which I
picked apart at
https://gist.github.com/arachsys/2883877
On the Montage filesystem, the Entr entries in the EPFM block live in
/usr/share/yamaha/contents/performance.cfg, and the Data chunks from the
DPFM block are in /usr/share/yamaha/contents/performance/ in individual
files. (Try saving and examining a .X7L with some unmodified factory
performances copied to the User bank to clarify how it works.)
For anyone feeling both brave and trusting enough, attached to this gist is
a ready-made 'updater' filesystem image containing copies of the factory and
fixed settings for performance 0x3f0003 "CFX PopStudioGrand" together with a
simple update.sh.
- If the installed performance 0x3f0003 matches the bundled factory
version, it is replaced by the fixed version.
- If the installed performance 0x3f0003 matches the fixed version, it is
replaced by the bundled factory version.
- In all other cases, no changes are made: we don't want to replace a
future fixed version from Yamaha, or try to modify the performance if
the storage format changes in a future firmware upgrade.
However, please note that I make no warranty and disclaim all liability for
any damage caused by your use of this unofficial firmware modification. I
have received no consideration for it and hereby dedicate it to the public
domain.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.