Skip Navigation.
Section 0

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:

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.

218 (December 2014)

Changes:

Feature Additions (Summary)

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:

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:

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)

Changes:

Feature Additions (Summary)

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:

[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:

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:

New Known Limitations

[none]

216 (January 2012)

Changes:

Feature Additions:

[none]

New Known Limitations

[none]

215 (May 2011)

Changes:

Feature Additions (Summary)

Feature Additions (Detail)

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.

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.

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)

Changes:

Feature Additions (Summary):

Feature Additions (Detail):

New Known Limitations:

[none]

213 (December 2009)

Changes:

Feature Additions (Summary):

Feature Additions (Detail):

New Known Limitations:

[none]

212 (November 2008)

Changes:

Feature Additions (Summary):

Feature Additions (Detail):

"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:

With:

For both the Continuous Controller and SYSEX implementations:

New Known Limitations:

[none]

211 (March 2007)

Changes:

Feature Additions:

[none]

New Known Limitations:

[none]

210 (December 2006)

Changes:

Feature Additions:

[none]

New Known Limitations:

[none]

209 (November 2006)

Changes:

Feature Additions (Summary):

Feature Additions (Detail):

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)
After reception the instrument reply with the following data:

(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)

Known Limitations: