The Chroma CPU Plus (CC+): Firmware
by Sandro Sfregola [21010294] <chroma.tech.one@gmail.com>and David Clarke [21030085++] <ac151@ncf.ca>
The behaviour and operation of the CC+ is controlled via code resident in a single 27C256 EPROM on the CC+ board.
As features are added, or behaviour is changed, the firmware version will be updated and a new image will be available on this page.
You don't always have to have the newest firmware. If the features noted in the newer versions are not of interest to you - or if the updates do not affect you - then using an earlier version of firmware is fully supported.
The firmware version is listed on a label on the top of chip U2 on the CPU board. The version can also be checked without opening the keyboard by pressing [Set Split 36], [Param 25] on the front panel. (The version number will appear in the small LED display.)
To upgrade the firmware, program the desired 32KB binary image into a 27C256 EPROM and replace the chip currently found at U2 on the CC+ board with the newly programmed device.
Notes:
- the EPROM should be of the -120 speed grade, or faster.
- it is recommended that prior to installing a new firmware version that the user record the current user-settings by issuing [Set Split 36] and recording the values stored for each of the parameters. Once the new firmware is installed the settings can be confirmed to be as desired or updated, if required.
Recommended device: ST M27C256B-12 (or -10, -90 respectively 120, 100 and 90 nS access time).
PLEASE READ CAREFULLY BEFORE DOWNLOADING!
The program available here for downloading is in the form of a binary executable of 32 Kbytes. It contains a modified version of the original Chroma firmware Rev.14 plus added code.
The original Chroma firmware remains the property of Fender or whoever might currently own the rights to Chroma products.
The additional code is the property of the authors, Sandro Sfregola and David Clarke. The program cannot be used in whole or in part for commercial purposes nor can it/they be disassembled and modified for use in other commercial devices.
The firmware is written in Motorola 68B09 Assembler and compiled with AS09 release 1.31.
Thanks to Frank A. Vorstenbosch for his good and freeware AS09 cross assembler.
Firmware Revision History
The following provides an overview of the firmware revisions and a summary of the changes which were made in each release, in reverse chronological order.
All 'known limitations' from earlier releases are assumed to be carried over into the newer releases, unless otherwise noted as being addressed.
222 (June 2023)
- CCP222.zip, 21K
Changes:
- [Set Split 36] + P25 returns "222"
- Updated S&H timing to correct legacy auto-tune timing and improve settling time
- Corrected some parameter numbering in KMX emulation mode
- Minor change to Alphanumeric display text
- Minor change to internal Alphanumeric display code
Feature Additions (Summary)
- Allow the user to adjust LED behaviour during auto-tune
Feature Additions (Detail)
The standard Chroma behaviour is that when voice tuning is being performed, all of the front panel LEDs will flash off and on. Starting in this release, a new configuration parameter (Parameter 33 = "Limit LEDs for Tune") has been added to the CC+ configuration menu. When set to "Off" (the default), the LEDs will flash during auto-tune exactly as the stock Chroma firmware setup. When set to "On", only the "Copy From A" and "Copy From B" LEDs will flash (they flash alternately, back and forth).
Note: Full details of the changes and additions were captured in the January 14, 2024 ChromaTalk e-mail entitled "[ChromaTalk] New CC+ firmware (222)"
221 (April 2020)
No public release offered.
220 (September 2018)
- CCP220.zip, 21K
Changes:
- [Set Split 36] + P25 returns "220"
- Correction of MIDI base channel handling for controllers when running in 'Play' mode
Feature Additions (Summary)
- The ability for the user to defeat an initial pressure response based on velocity
Feature Additions (Detail)
Ability to defeat initial pressure response based on velocity
There is a provision in the original Chroma firmware code (carried over to the CC+) which assigns an initial pressure value for high velocity key strikes.
A new CC+ configuration parameter called "Initial Pressure from Velocity" has been added to allow users a way to defeat this feature [Set Split 36][P32].
When this parameter is set to "On", an initial pressure value is assigned based on key velocity (original behaviour).
When this parameter is set to "Off", the CC+ will not assign an initial pressure value based on velocity - and will instead always assume an initial key-strike pressure of '0'.
Note - this parameter only affects the 'initial' pressure value. It does not change how pressure is otherwise detected from the pressure sensor (if installed).
219 (August 2017)
- CCP219.zip, 21K
Changes:
- [Set Split 36] + P25 returns "219"
- Updated microtonal tuning code to correct a slight, unintentional slide of frequencies on newly played notes.
Feature Additions (Summary)
- [none]
218 (December 2014)
- CCP218.zip, 21K
Changes:
- [Set Split 36] + P25 returns "218"
- Update to correct the 'performance tune' SYSEX response. It now properly returns the SYSEX preamble of F0 08 00 4B 59 01 37.
- Update to ensure an appropriate MIDI program change will be sent if the same program button is pressed twice on the panel.
Feature Additions (Summary)
- MIDI Syncable LFO/Sweeps
- Ability to assign arbitrary frequencies to each key of the keyboard (Microtonal Tuning)
Feature Additions (Detail)
MIDI Syncable LFO/Sweeps
Starting with this firmware release, initial support for sync’ing the Chroma's Sweep generators to MIDI is added.
The Sweep Clock Source can be chosen by going into the Configuration Interface [Set Split 36] and selecting parameter 28 [P28].
The user has two choices, as below:
- int = Internal Clock (normal Chroma operation)
- nIdi = MIDI Clock (external sync operation)
When ‘int’ is selected, the sweep rate is determined by Chroma Parameter #9 (as per normal).
When ‘nIdi’ is selected, the sweep rate is determined by the MIDI timing clock (MIDI realtime message 0xF8). In this mode, Chroma Parameter #9 no longer directly controls the rate; instead, it behaves as a MIDI clock multipler.
Further details are discussed in the CC+ user manual: see Syncing Sweeps/LFO to MIDI.
Microtonal Tuning
This firmware release provides the user the ability to arbitrarily assign frequencies to each of the 128 defined MIDI notes and will support the custom tuning from MIDI as well as the on-board keyboard.
This “Microtonal Key Map” support can be enabled/disabled by going into the Configuration Interface [Set Split 36] and selecting parameter 31 [P31].
The user has two choices:
- Off = Standard key mapping used (normal Chroma operation)
- On = User-Specific key map used (Microtonal tuning enabled)
When ‘On’ is selected, the frequencies for each ‘key’ are defined by an internal lookup table, 128 entries in size (one entry for each possible MIDI note). The table is initialized by the receipt of a MIDI Tuning Specification Bulk Tuning Dump message.
Further details are discussed in the CC+ user manual (Microtonal Key Mapping/Arbitrary Key Tuning).
Performance Tune SYSEX
If you wish to request the Chroma tell you what it’s current ‘performance tune’ setting is, then the following SYSEX would request the Chroma send back the tune data:
F0 08 00 4B 59 00 37 F7
The intent was that the Chroma would repond back with:
F0 08 00 4B 59 01 37 aa F7
where "aa" is the tune value (0->0x7F, 0-127 decimal).
In earlier firmware releases, the ‘aa’ data returned was correct - but the actual reponse string was:
F0 08 00 4B 59 01 36 aa F7
In this version of firmware the response string has been corrected to be:
F0 08 00 4B 59 01 37 aa F7
MIDI Program Change for Twice Press of Program
With older versions of firmware, pressing the same program button on the Chroma panel would not have resulted in the final MIDI program change bringing you back to the original/safe program change - but instead insofar as MIDI was concerned, it would think the Chroma was still on button last pressed.
This functionality has been changed in this release, and the stream of MIDI program change messages should match whatever program ends up being displayed on the panel (whether that be by double-pressing a program number, the sequence footswitch or other).
New Known Limitations:
When using a Microtonal Key Map Support, a Portamento glide may not be ‘smooth.’
NOTE: When upgrading to this release, the “Auto-Send MIDI CC” [Set Split 36][P30] value may change - so you will want to check/reset this parameter to your desired value after you update the firmware.
217 (October 2012)
- CCP217.zip, 20K
Changes:
- [Set Split 36] + P25 returns "217"
- Update to correct the 'reset' issue noted in CC+ Firmware hiccup - entering 'config mode' with a high 'safe mode' program and pressing "P1"
- Update to the the MIDI Continuous Controller "Prog" Mode to allow automatic LCD decoding of patches from BCR2000, Enabler, iPad, etc.
Feature Additions (Summary)
- Native support for the SparkFun serial LCD controller
- [Set Split 40] now displays Autotune failure information
- Support for a user-defined MIDI velocity map
- Auto-send of patch parameters with a Program Change
Feature Additions (Detail)
Previous firmware versions exclusively supported the Parallax 27979 LCD display. Starting in this version of firmware, the user can also choose to use the SparkFun serial-to-LCD unit. The Serial Display Type can be chosen by going into the Configuration Interface [Set Split 36] and selecting parameter 27 [P27]. The user has the following two choices:
- PArL = Parallax
- SFun = SparkFun
[Set Split][40] tells the CC+ to print details of any auto-tune failures to the Alphanumeric Display in the format of CnEm, where "n" represents the channel number and "m" represents one of the 10 different error locations.
The user can specify and use a custom MIDI transmit velocity map. By going into the Configuration Interface [Set Split 36] and selecting parameter 29 [P29] the user can choose from:
- int = Internal CC+ velocity map (normal CC+ behaviour)
- CUSt = Custom (user-defined) velocity map
The first selection will choose the default internal CC+ MIDI velocity map. The second selection will chose a custom velocity map stored inside the Chroma by a user (sent via MIDI SYSEX). To send a custom map to the Chroma, a MIDI SYSEX message like the following would be used:
F0 08 00 4B 59 7F 39 dd dd dd .... F7
where dd = 32 bytes, corresponding to the desired 32-position table for MIDI Tx values (from 0 to 127)
Starting with firmware 217, an "Auto-Send MIDI CC" (MIDI Talkback) feature has been added as a user configurable option. When enabled, the contents of the current patch are automatically sent via MIDI CC's when a program change is made. This feature is enabled by going into the Configuration Interface [Set Split 36] and selecting parameter 30 [P30]. The user has two choices, as below:
- Off = Don't auto-send patch contents (normal CC+ behaviour)
- On = Automatically send patch settings via MIDI CC
New Known Limitations
[none]
216 (January 2012)
- CCP216.zip, 20K
Changes:
- [Set Split 36] + P25 returns "216"
- Updated code implementation to avoid a reset condition when the CC+ had MIDI Pressure Transmit enabled, Channel Pressure Mode was selected and a Link Patch issued a Pressure Message.
Feature Additions:
[none]
New Known Limitations
[none]
215 (May 2011)
- CCP215.zip, 20K
Changes:
- [Set Split 36] + P25 returns "215"
- Updated the [Set Split 39] (Scratch Patch) implementation to prevent unintentional changes to Patch 1 link data (xref: CC+ Set Split-39 (Scratch Patch) Quirk)
- Update so that a Program 0 SYSEX receive will automatically redefine the main and link instruments according to the new program. (E.g., add in a special case so that receiving a Program 0 SYSEX message will make that program the actively sounding program).
Feature Additions (Summary)
- Support for transmission of Monophonic (Channel) Pressure via MIDI
- [Set Split 20] now triggers a Program 0 SYSEX dump via MIDI.
- [Set Split 38] now invokes a Random Patch Generator.
- Support a SYSEX request to dump all parameters as MIDI CC's.
Feature Additions (Detail)
- The CC+ firmware has always responded to incoming MIDI Pressure messages (both Polyphonic/Key Pressure as well as Monophonic/Channel Pressure). The CC+ has always provided direct support of an installed pressure sensor so that key pressure could be used to modulate on-board parameters (just as the original Chroma CPU did). As of firmware release 213, the CC+ would also allow Polyphonic/Key pressure messages to be transmitted via MIDI (if a pressure sensor was installed).
Starting with this release the [Set Split 36] + P16 (MIDI Pressure Mode) configuration parameter will give users with an installed pressure sensor a choice as to whether they would like to transmit MIDI pressure as Polyphonic/Key pressure messages or Monophonic/Channel Pressure messages.
- Setting P16 to "Pol" selects Polyphonic/Key pressure messages.
- Setting P16 to "Chnl" selects Monophonic/Channel Pressure messages.
The Channel Pressure calculation is performed as a 'cumulative moving average' of the individual pressures of the keys. When there are no more keys being held, a Channel Pressure message of value 0 is sent.
As with Poly/Key pressure, Channel Pressure is supported for both the Main and Link instruments on the Chroma.
Note: In order for any Pressure messages to be transmitted via MIDI, [Set Split 36] + P26 (MIDI Pressure Transmit) needs to be set to 'On', and the Chroma needs to have a pressure sensor installed.
- [Set Split 20] is a standard Chroma command which allows the user to "Send [the current] Program over [the] Chroma Interface". Starting with this firmware release, this command also sends the current program [Program 0] over the MIDI interface as a single program SYSEX message.
- The [Set Split 38] key combination now invokes a 'Random Patch' functionality. The parameters of the new patch are chosen randomly except as below:
- 'Threshold' modulation selections are excluded
- The 'Output' selection is always set to Output 0
- The 'Chord Buffer' keyboard algorithm is excluded
- Link Balance is set to 0
- Footswitch Mode is always set to 'Left = Latch, Right = Sustain'
- Link is always set to 'no link.'
- The keyboard split is always set to 0 (mid keyboard)
- Volume Mod Depths A1, A2, B1 & B2 are set to Deep (15)
- 'Pedal' settings for Ampl. Mod Select 3 are excluded.
- A new SysEx command was added to help support external controllers/editors (such as the BCR2000) which can't otherwise request parameter values via individual parameter SYSEX commands.
Sending the following SYSEX to the CC+ will initiate an "All Controllers Request":
F0 08 00 4B 59 00 38 F7
Once received, the CC+ will respond will a stream of MIDI continuous controller messages - one for the current value of each of the Chroma's parameters.
New Known Limitations
[none]
214 (July 2010)
- CCP214.zip, 20K
Changes:
- [Set Split 36] + P25 returns "214"
- Startup initialization delay set to 100mS from 10mS (to allow serial display to become active).
Feature Additions (Summary):
Feature Additions (Detail):
- The CC+ can detect the presence of an additional serial UART device. When present, Chroma parameters and operational modes are decoded and are sent via serial to an external display device. This version of firmware specifically supports the Parallax Model 27979 4-line x 20 character display running at 19,200 baud.
New Known Limitations:
[none]
213 (December 2009)
- CCP213.zip, 16K
Changes:
- [Set Split 36] + P25 returns "213"
- [Set Split 36] + P26 added
Feature Additions (Summary):
- Support for transmission of Polyphonic Key Pressure via MIDI (if a pressure sensor is installed)
Feature Additions (Detail):
- The sending/not sending of MIDI pressure messages are controlled by the Configuration Mode P26 selection. [Set Split 36] + P26 will allow the user to choose "On" or "Off". If set to 'On', pressure commands will be sent via MIDI (if they are generated from an installed pressure sensor). If set to 'Off', pressure commands will not be sent via MIDI (regardless of whether a pressure sensor is installed).
- Pressure values transmitted have values from 1 to 127.
- Polyphonic Key Pressure transmission is supported. Channel Pressure messages are not supported.
New Known Limitations:
[none]
212 (November 2008)
- CCP212.zip, 16K
Changes:
- [Set Split 36] + P25 returns "212"
- Config Mode Updates to protect against trying to issue [Set Split 39] while already inside of the Config Menu ([Set Split 36]).
- Corrected an error in MIDI Tx code that could sometimes cause the running status to become confused - especially when controller and note data were intermixed in rapid succession (xref: filterpedal and midi)
- Enhanced running status code so that complete status is periodically resent (to avoid issues where a receiver may have missed an earlier change in status).
- Updated Default Custom MCM to map Performance Tune to CC #8
Feature Additions (Summary):
- Tapper Support in Config Menu
- Read/write control over 'Performance Tune' via MIDI
Feature Additions (Detail):
- In earlier firmware releases, the tapper was always disabled when the Config Menu was entered. To provide for a more uniform operational experience, the firmware has been changed so that the Config Menu uses the same tapper settings as the main Chroma panel (i.e., if the tapper is enabled before entering the Config Menu, then the Config Menu will also have the tapper enabled. If the tapper is disabled, then the Config Menu will also have the tapper disabled).
- Chroma Parameter #108 was added and assigned to "Performance Tune". If the custom MCM is used, this is mapped (by default) to continuous controller #8.
"Performance Tune" is the data which is controlled by the Tune Slider on the Chroma. The slider allows control of +/- 1 semitone.
A send to CC #8 will result in a Performance Tune value being set and provides control to the 64th of a semitone.
In addition to Continuous Controller Support, read/write support via SYSEX was also added. Type "0x37" (55 decimal) was added to the SYSEX message types and it is decoded as a byte-wise access to the Performance Tune setting.
Specifically we now have:
- F0 System Exclusive
- 08 Fender ID
- 00 4B 59 KMX converter ID
- 00 Dump request (if non 0 denotes dump)
- pp Type of Data where:
- 0 to 50 (decimal) program number
- 51 = fifty programs
- 52 = MIDI parameters file (not yet implemented)
- 53 = MCM file
- 54 = Program 0 Parameter
- 55 = Performance Tune (Byte Control)
With:
- Performance Tune Read (F0 08 00 4B 59 00 37)
- Performance Tune Write (F0 08 00 4B 59 01 37 aa), where "aa" is a value 0->127, to represent the desired tune value.
For both the Continuous Controller and SYSEX implementations:
- A value of "0" would be 1 semitone flat (maximum 'pull' on the slider).
- A value of "127" would be almost 1 semitone sharp (maximum 'push' on the slider).
- A value of "64" represents the centre setting of the tune slider.
New Known Limitations:
[none]
211 (March 2007)
- CCP211.zip, 16K
Changes:
- Update Sysex "Read program 0" code to ensure correct value is returned to requester.
Feature Additions:
[none]
New Known Limitations:
[none]
210 (December 2006)
- CCP210.zip, 16K
Changes:
- Update MIDI CC Transmit Code to ensure proper range of values is sent (for parameter numbers > 31). [This issue was present in both Rev 208 and Rev 209 firmware].
- Update MIDI Sysex "parameter" code to ensure proper range of values is sent and received (for parameter numbers > 31). [The ability to request/send parameters via Sysex was only added in Rev 209 firmware, and so this issue is only present in Rev 209].
- With P24 = "Prog", update MIDI CC Receive code to ensure proper range of values parameter numbers > 31) is received. [The "Prog" mode of MIDI CC reception was only added in Rev 209 firmware, and so this issue is only present in Rev 209].
Feature Additions:
[none]
New Known Limitations:
[none]
209 (November 2006)
- CCP209.zip, 16K
Changes:
- [Set Split 36] + P25 returns "209"
- Updates to SYSEX Transmission code to address a MIDI "running status" issue. (In the previous version of firmware - after a sysex data transmission - dump of any kind - from the Chroma, the instrument omits the first status byte from the first subsequent transmitted MIDI message.
Feature Additions (Summary):
- Support for MIDI 'Tune Request'
- Support for SYSEX read/writing of all Chroma Parameters
- Editing of MIDI Program 0 via MIDI CC.
Feature Additions (Detail):
- The Chroma will now listen for MIDI opcode 0xF6 (Tune Request), and will perform a 'Tune All' in response to receiving it.
Inside the Chroma there are the 50 programs that you can chose from. Once you've chosen one, the data in that program is converted to an internal 'instrument' definition.
The default KMX CC interface and earlier CC+ continuous controller changes affected the 'instrument' and not the 'program.' This is often desired as you do not necessarily want to affect your actual patch data, if you're only trying out new settings.
This type of editing isn't necessarily what would be most useful however if you wish to use an external editor. In that case you do likely want to have the Program data changed (and not just the temporary instrument data.)
To allow the user to change the program data under external control, two new features were added in this release.
First, a new control was added ([Set Split][36] + P24). The menu which appears allows the user to choose between "Inst" and "Prog " - which will change how the Chroma responds to MIDI Continuous Controller data.
If "Inst" is selected, the Continuous Controller data will work just as it does with Rev 208 - with the changes only affecting the 'instrument', and not affecting the program. (i.e., the changes are gone when the program is reselected, the Chroma is turned off, etc.)
If "Prog" is selected, then any Continuous Controller data sent to the Chroma will actually 'change the values' for Program 0.
Beyond continuous controller support (which uses the controller mapping information), SYSEX read and writes of all the parameters in Program 0 (one at a time) are now supported, as below:
Write program 0 parameter command:
(Hex) F0 08 00 4B 59 01 36 pn pv F7
F0 | System Exclusive |
08 | Fender ID |
00 4B 59 | KMX converter ID |
01 | (Any non-zero value) |
36 | (decimal 54) edit program 0 command |
pn | Parameter Number |
pv | new Parameter Value |
F7 | End Of Exclusive (optional, the firmware execute the command after reception of pv) |
Read program 0 parameter command:
(Hex) F0 08 00 4B 59 00 36 pn F7
F0 | System Exclusive |
08 | Fender ID |
00 4B 59 | KMX converter ID |
00 | (must be 0) |
36 | (decimal 54) edit program 0 command |
pn | Parameter Number |
F7 | End Of Exclusive (optional, the firmware execute the command after reception of pn) |
(Hex) F0 08 00 4B 59 01 36 pn pv F7
F0 | System Exclusive |
08 | Fender ID |
00 4B 59 | KMX converter ID |
01 | |
36 | (decimal 54) |
pn | Parameter Number |
pv | read Parameter Value |
F7 | End Of Exclusive |
New Known Limitations:
[none]
208: Initial Release (May 2006)
- CCP208.zip, 16K
Known Limitations:
- [Set Split 36] + P14 (Volume Select) - Link Balance Tx Not Supported
- [Set Split 36] + P15 (Param Slider Select) - Param Slider Tx Not Supported
- [Set Split 36] + P16 (Pressure Mode) - MIDI Pressure not tx'd (for either mode)
- CC+ neither Generates nor responds to a 'MIDI Parameter File' (for the KMX or CC+ box) (sysex file type $34)