Chroma Expansion Board: MIDI
by Sandro Sfregola [21010294] <chroma.tech.one@gmail.com>with David Clarke [21030085++] <ac151@ncf.ca>
The CEB was the precursor of the CPU Plus (CC+), implementing the initial functionality of the CC+ as an add-on rather than a replacement board. The information on these pages is provided for historical interest; there will be no further updates or firmware revisions. See The Chroma CPU Plus (CC+).
Syntech/Chroma Cult vs. CEB Comparison
The MIDI Controllers Map
The original Syntech/Chroma Cult interface maps the MIDI controllers to Chroma parameters in a prefixed way (see the Syntech manual for reference) and only a subset of them is available.
Also, the performance controllers (Lever 1-2, Pedal 1-2, Footswitch 1-2, Volume) can be assigned to a limited number of CC (normally adequate in a typical MIDI setup).
In the MIDI implementation of the CEB firmware I have introduced the MIDI Controllers Map (MCM) functionality, a concept that is widely available on recent instruments; this allow the user to assign each of the 120 available MIDI CC to one of the 128 possible "destinations"; such destinations include all the Chroma parameters and the performance controllers with room for future additions as you can see in the following reference table:
Dest # | Destination Item |
---|---|
000 | Not assigned (off) |
001 | Patch |
002 | Fsw Mode |
003 | Kybd Alg |
004 | Detune |
005 | Out Select |
006 | A-Glide Rate |
007 | A-Glide Shape |
008 | A-Sweep Mode |
009 | A-Sweep Rate |
010 | A-Sweep Rate Mod |
011 | A-Sweep Wave Shape |
012 | A-Sweep Ampl Mod |
013 | A-Env1 Ampl Touch |
014 | A-Env1 Attack |
015 | A-Env1 Attack Mod |
016 | A-Env1 Decay |
017 | A-Env1 Decay Mod |
018 | A-Env1 Release |
019 | A-Env2 Delay |
020 | A-Env2 Ampl Touch |
021 | A-Env2 Attack |
022 | A-Env2 Attack Mod |
023 | A-Env2 Decay |
024 | A-Env2 Decay Mod |
025 | A-Env2 Release |
026 | A-Pitch Tune |
027 | A-Pitch Mod1 Select |
028 | A-Pitch Mod1 Depth |
029 | A-Pitch Mod2 Select |
030 | A-Pitch Mod2 Depth |
031 | A-Pitch Mod3 Select |
032 | A-Pitch Mod3 Depth |
033 | A-Wave Wave Shape |
034 | A-Wave Width |
035 | A-Wave Mod Select |
036 | A-Wave Mod Depth |
037 | A-Cutoff LP/HP |
038 | A-Cutoff Resonance |
039 | A-Cutoff Tune |
040 | A-Cutoff Mod1 Select |
041 | A-Cutoff Mod1 Depth |
042 | A-Cutoff Mod2 Select |
043 | A-Cutoff Mod2 Depth |
044 | A-Cutoff Mod3 Select |
045 | A-Cutoff Mod3 Depth |
046 | A-Volume Mod1 Select |
047 | A-Volume Mod1 Depth |
048 | A-Volume Mod2 Select |
049 | A-Volume Mod2 Depth |
050 | A-Volume Mod3 Select |
051 | Not assigned (off) |
052 | Not assigned (off) |
053 | Not assigned (off) |
054 | Not assigned (off) |
055 | Not assigned (off) |
056 | B-Glide Rate |
057 | B-Glide Shape |
058 | B-Sweep Mode |
059 | B-Sweep Rate |
060 | B-Sweep Rate Mod |
061 | B-Sweep Wave Shape |
062 | B-Sweep Ampl Mod |
063 | B-Env1 Ampl Touch |
064 | B-Env1 Attack |
065 | B-Env1 Attack Mod |
066 | B-Env1 Decay |
067 | B-Env1 Decay Mod |
068 | B-Env1 Release |
069 | B-Env2 Delay |
070 | B-Env2 Ampl Touch |
071 | B-Env2 Attack |
072 | B-Env2 Attack Mod |
073 | B-Env2 Decay |
074 | B-Env2 Decay Mod |
075 | B-Env2 Release |
076 | B-Pitch Tune |
077 | B-Pitch Mod1 Select |
078 | B-Pitch Mod1 Depth |
079 | B-Pitch Mod2 Select |
080 | B-Pitch Mod2 Depth |
081 | B-Pitch Mod3 Select |
082 | B-Pitch Mod3 Depth |
083 | B-Wave Wave Shape |
084 | B-Wave Width |
085 | B-Wave Mod Select |
086 | B-Wave Mod Depth |
087 | B-Cutoff LP/HP |
088 | B-Cutoff Resonance |
089 | B-Cutoff Tune |
090 | B-Cutoff Mod1 Select |
091 | B-Cutoff Mod1 Depth |
092 | B-Cutoff Mod2 Select |
093 | B-Cutoff Mod2 Depth |
094 | B-Cutoff Mod3 Select |
095 | B-Cutoff Mod3 Depth |
096 | B-Volume Mod1 Select |
097 | B-Volume Mod1 Depth |
098 | B-Volume Mod2 Select |
099 | B-Volume Mod2 Depth |
100 | B-Volume Mod3 Select |
101 | Lever 1 |
102 | Lever 2 |
103 | Pedal 1 |
104 | Pedal 2 |
105 | Footswitch 1 |
106 | Footswitch 2 |
107 | Volume |
108 | Unused (free) |
109 | Unused (free) |
110 | Unused (free) |
111 | Unused (free) |
112 | Unused (free) |
113 | Unused (free) |
114 | Unused (free) |
115 | Unused (free) |
116 | Unused (free) |
117 | Unused (free) |
118 | Unused (free) |
119 | Unused (free) |
120 | Unused (free) |
121 | Unused (free) |
122 | Unused (free) |
123 | Unused (free) |
124 | Unused (free) |
125 | Unused (free) |
126 | Unused (free) |
127 | Unused (free) |
There are 4 new user interface parameters (P18 - P21, see The User Interface below) dedicated to the MCM management; the MCM configuration can also be uploaded/downloaded by system exclusive messages (see the System Exclusive section below).
David and I have prepared a "default" MCM: using parameter P20 the map is initialised as follows:
MIDI CC# | MCM Dest# | Dest. Item |
---|---|---|
1 | 101 | Lever 1 |
2 | 0 | |
3 | 0 | |
4 | 103 | Pedal 1 |
5 | 0 | |
6 | 0 | |
7 | 107 | Volume |
8 | 0 | |
9 | 0 | |
10 | 6 | A-Glide Rate |
11 | 7 | A-Glide Shape |
12 | 8 | A-Sweep Mode |
13 | 9 | A-Sweep Rate |
14 | 10 | A-Sweep Rate Mod |
15 | 11 | A-Sweep Wave Shape |
16 | 12 | A-Sweep Ampl Mod |
17 | 13 | A-Env1 Ampl Touch |
18 | 14 | A-Env1 Attack |
19 | 15 | A-Env1 Attack Mod |
20 | 16 | A-Env1 Decay |
21 | 17 | A-Env1 Decay Mod |
22 | 18 | A-Env1 Release |
23 | 19 | A-Env2 Delay |
24 | 20 | A-Env2 Ampl Touch |
25 | 21 | A-Env2 Attack |
26 | 22 | A-Env2 Attack Mod |
27 | 23 | A-Env2 Decay |
28 | 24 | A-Env2 Decay Mod |
29 | 25 | A-Env2 Release |
30 | 26 | A-Pitch Tune |
31 | 27 | A-Pitch Mod1 Select |
32 | 28 | A-Pitch Mod1 Depth |
33 | 29 | A-Pitch Mod2 Select |
34 | 30 | A-Pitch Mod2 Depth |
35 | 31 | A-Pitch Mod3 Select |
36 | 32 | A-Pitch Mod3 Depth |
37 | 33 | A-Wave Wave Shape |
38 | 34 | A-Wave Width |
39 | 35 | A-Wave Mod Select |
40 | 36 | A-Wave Mod Depth |
41 | 37 | A-Cutoff LP/HP |
42 | 38 | A-Cutoff Resonance |
43 | 39 | A-Cutoff Tune |
44 | 40 | A-Cutoff Mod1 Select |
45 | 41 | A-Cutoff Mod1 Depth |
46 | 42 | A-Cutoff Mod2 Select |
47 | 43 | A-Cutoff Mod2 Depth |
48 | 44 | A-Cutoff Mod3 Select |
49 | 45 | A-Cutoff Mod3 Depth |
50 | 46 | A-Volume Mod1 Select |
51 | 47 | A-Volume Mod1 Depth |
52 | 48 | A-Volume Mod2 Select |
53 | 49 | A-Volume Mod2 Depth |
54 | 50 | A-Volume Mod3 Select |
55 | 0 | |
56 | 0 | |
57 | 0 | |
58 | 0 | |
59 | 0 | |
60 | 0 | |
61 | 0 | |
62 | 0 | |
63 | 0 | |
64 | 105 | Footswitch 1 |
65 | 0 | |
66 | 0 | |
67 | 106 | Footswitch 2 |
68 | 0 | |
69 | 0 | |
70 | 56 | B-Glide Rate |
71 | 57 | B-Glide Shape |
72 | 58 | B-Sweep Mode |
73 | 59 | B-Sweep Rate |
74 | 60 | B-Sweep Rate Mod |
75 | 61 | B-Sweep Wave Shape |
76 | 62 | B-Sweep Ampl Mod |
77 | 63 | B-Env1 Ampl Touch |
78 | 64 | B-Env1 Attack |
79 | 65 | B-Env1 Attack Mod |
80 | 66 | B-Env1 Decay |
81 | 67 | B-Env1 Decay Mod |
82 | 68 | B-Env1 Release |
83 | 69 | B-Env2 Delay |
84 | 70 | B-Env2 Ampl Touch |
85 | 71 | B-Env2 Attack |
86 | 72 | B-Env2 Attack Mod |
87 | 73 | B-Env2 Decay |
88 | 74 | B-Env2 Decay Mod |
89 | 75 | B-Env2 Release |
90 | 76 | B-Pitch Tune |
91 | 77 | B-Pitch Mod1 Select |
92 | 78 | B-Pitch Mod1 Depth |
93 | 79 | B-Pitch Mod2 Select |
94 | 80 | B-Pitch Mod2 Depth |
95 | 81 | B-Pitch Mod3 Select |
96 | 82 | B-Pitch Mod3 Depth |
97 | 83 | B-Wave Wave Shape |
98 | 84 | B-Wave Width |
99 | 85 | B-Wave Mod Select |
100 | 86 | B-Wave Mod Depth |
101 | 87 | B-Cutoff LP/HP |
102 | 88 | B-Cutoff Resonance |
103 | 89 | B-Cutoff Tune |
104 | 90 | B-Cutoff Mod1 Select |
105 | 91 | B-Cutoff Mod1 Depth |
106 | 92 | B-Cutoff Mod2 Select |
107 | 93 | B-Cutoff Mod2 Depth |
108 | 94 | B-Cutoff Mod3 Select |
109 | 95 | B-Cutoff Mod3 Depth |
110 | 96 | B-Volume Mod1 Select |
111 | 97 | B-Volume Mod1 Depth |
112 | 98 | B-Volume Mod2 Select |
113 | 99 | B-Volume Mod2 Depth |
114 | 100 | B-Volume Mod3 Select |
115 | 1 | Patch |
116 | 2 | Fsw Mode |
117 | 3 | Kybd Alg |
118 | 4 | Detune |
119 | 5 | Out Select |
The MCM is fully editable; also the user is free to choose between the normal Syntech/Chroma Cult "emulation" mode and the expanded MCM mode.
Local Control
I think this new feature will be welcome among users that would use the Chroma in combination with a MIDI sequencer; it is present in almost all MIDI instruments.
As probably you already know, setting Local Control to off the instrument is logically split in two blocks: a control keyboard and a sound generator module, with no connections between them.
Note: this feature is one of the benefits of having MIDI implemented on board; in fact it is impossible to achieve by an external MIDI converter. This is why the Syntech lacks this function.
Omni On vs. "Play mode"
I have partially changed the function of the P2 parameter: while "Normal mode" is the same of Syntech Omni Off, "Play mode" is functionally as Syntech Omni On but the instrument will receive only on the base channel.
I think it is more usable this way (Omni On mode is of little use these days...).
The User Interface
David Clarke [21030085++] has written the user interface code and the following reference:
The CEB firmware intentionally attempted to stay consistent with Syntech operation. Wherever possible, 'additional' functionality was added in a non-conflicting manner.
This process was also done in such a way so that a Chroma could actually even be fitted with both the Syntech interface and the CEB interface at the same time.
In terms of a comparison, to enter into the "MIDI Programming Mode", the Syntech interface requires the user to press Set Split: 46. Upon entering this mode, the large LED display shows "Pr" (to confirm that programming mode has been entered).
For the CEB, a similar functionality is present. In this case, pressing Set Split: 36 will enter Programming Mode. To provide a visual indication that it is the CEB code which is running, the large LED display is configured to display "EP" (which stands for 'extended programming' mode).
Syntech par.# | Syntech par. function | CEB par.# | CEB par. function | |
---|---|---|---|---|
P1 | Base Channel (1-16) | P1 | Base Channel (1-16) | |
P2 | Omni On/Off | P2 | Mode | |
P3 | MIDI Out/Thru | P3 | MIDI Out/Thru | See note1 |
P4 | Program Changes | P4 | Program Changes | |
P5 | Instruments Available | P5 | Instruments Available | |
P6 | Parameter Changes | P6 | Parameter Changes | |
P7 | Lever 1 Select | P7 | Lever 1 Select | See note 2 |
P8 | Lever 1 Polarity | P8 | Lever 1 Polarity | |
P9 | Lever 2 Select | P9 | Lever 2 Select | See note 2 |
P10 | Lever 2 Polarity | P10 | Lever 2 Polarity | |
P11 | Pedal 1 Select | P11 | Pedal 1 Select | See note 2 |
P12 | Pedal 2 Select | P12 | Pedal 2 Select | See note 2 |
P13 | Footswitch 2 Select | P13 | Footswitch 2 Select | See note 2 |
P14 | Volume Select | P14 | Volume Select | See note 1,2 |
P15 | Param Slider Select | P15 | Param Slider Select | See note 1 |
P16 | MIDI Pressure Mode | P16 | MIDI Pressure Mode | See note 1 |
P17 | Local Control (On/Off) | |||
P18 | MCM Mode Selection | See note 2 | ||
P19 | Edit MCM | |||
P20 | Init MCM | |||
P21 | MCM sysex dump |
Note 1: some items are not fully implemented yet (firmware 20.07)
- P3 does not work, Midi Out Port always works as Midi Out
- Volume CC messages are received but not transmitted (Link Balance)
- P15 does not work
- Both channel and poly pressure commands are received but not transmitted; parameter P16 does not work
Note 2: while the interface is running in expanded MCM mode (P18 = Cust) some MIDI interface parameters change behaviour as follows:
- P7 Lever 1 Select - only the Pitch Bend setting will work, any other setting will be overridden by the MCM
- P9 Lever 2 Select - same as P7
- P11, P12, P13, P14 - overridden by the MCM
The Syntech/Chroma Cult MIDI Programming Mode offers 16 settable parameters, which are selected by pressing parameter buttons 1-16.
All the parameters except P2 have exactly the same settings as the Syntech interface and are selectable and editable in the same way.
For the Syntech interface, parameter 2 selects whether the Chroma is in Omni mode or not.
For the CEB, P2 will select between "normal" and "play" mode. "Normal" mode is essentially the same as "Omni off". "Play" mode is very similar to the Syntech "omni on" mode, with the notable difference that the instrument will only receive on the selected base channel - but the Chroma will play links, splits, etc - just as it would in omni mode.
Over and above the 16 'standard' parameters supported by Syntech, the CEB firmware adds on an additional set of settings, as follows:
P17 Local Control (On/Off)
If Local Off is selected, notes played on the Chroma keyboard do not trigger the internal sound generators of the instrument; but rather are transmitted by the CEB via MIDI.
Sandro's note: the same is true for the performance controllers.
(Local Control On would configure the Chroma to operate as per the Syntech default).
In either mode (local on or local off), the Chroma is still fully capable to receive (and play) sounds via midi.
P18 MCM Selection
- Cult = Use Emulation Mode MCM (Syntech Mode)
- Cust = Use Expanded Mode (custom MCM Mode)
P19 Edit MCM
When selected, the small LED display shows the controller number to the left ("C" followed by 000-127) and the destination Chroma Parameter to the right (000-127). Moving the slider changes the controller number. Pressing "Edit A" will instruct the slider to make changes to the controller number. Pressing "Edit B" will instruct the slider to make changes to the destination parameter number.
P20 Init MCM
Parameter 20 provide a quick, convenient way to reset the Expanded MCM back to a known state. This effectively resets any changes made with P19 and allows the user to start fresh.
To protect against those times when you might accidentally enter this mode - and you don't want your hard edited MCM to be erased, when P20 is first pressed, no changes are made - but the display will say "Init"
If you leave this parameter - no changes will have been made.
If you do want to initialise the MCM however, simply move the parameter slider while the "Init" message is on the screen, and the MCM will be reset to the value stored in ROM.
For release 20.07 of the firmware, this default, expanded MCM is as discussed in "The MIDI Controllers Map" section.
P21 MCM sysex dump
When selected, the MCM is dumped via sysex messages (see the sysex section).
System Exclusive
Here is the description of how system exclusive is implemented in firmware Rev. 10.07.
As you can see, program dumps are 100% compatible with the Syntech/Chroma Cult interface.
Values are in Hex if not specified.
Single program dump request:
F0 08 00 4B 59 00 pp F0 System Exclusive 08 Fender ID 00 4B 59 KMX converter ID 00 Dump request (if non 0 denotes dump) pp 0 to 50 (decimal) program number 51 = fifty programs 52 = MIDI parameters file (not yet implemented) 53 = MCM file
Fifty programs dump request:
F0 08 00 4B 59 00 33 33 = decimal 51
Single program dump:
F0 08 00 4B 59 7F pp 0h 0l 0h 0l...
(118 data bytes: 59 (dec) data bytes that make up a Chroma program, nibblized and sent high nibble first)
Fifty programs dump:
F0 08 00 4B 59 7F 33 pp 0h 0l .... pp 0h 0l ....
pp 1 to 50 (dec)
Note: the CEB firmware can load an incomplete "fifty programs" dump; only complete programs are stored in memory.
MCM dump request:
F0 08 00 4B 59 00
MCM dump:
F0 08 00 4B 59 7F 35 dd dd dd .... dd = 128 MCM bytes (dec values 0 - 127)