This page includes details of the additions to the SysEx format to support the extensions in C16 firmware versions 1.1, 1.2 and 1.3. The firmware version of a C16 is shown briefly on the TARGET NUMBER display, at power-up.
Note, the stuff below should be viewed with monospaced type, and at least 75 columns.
USER TARGETS: 98 & 99
To reduce the chance of obsolescence C16 allows 32 sliders to
be individually programmed. Setting up these 32 sliders means sending
C16 SysEx from a sequencer. Any numbers ending
in 'H' are hexadecimal, and in MIDI the sliders are numbered 0~15 (not 1~16!). It
is also possible to send a command on entry into Targets 98 and 99.
Slider Numbers
panel number: 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16
hexadecimal: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f --->Target
98
hexadecimal: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f --->Target
99
Alert! Before sending these SysEx messages to the C16, the MIDI out of C16 should be disconnected
first, then the MIDI out of the sequencer connected to the MIDI in of C16. Alternatively
leave the cable in C16's MIDI out but disable the sequencer's
'echo' or 'thru' feature first as it is very easy to set up a MIDI feedback
loop because C16's MIDI out and thru are combined.
General C16
SysEx format:
F0H ID1 ID2 ID3 ID4 ID5 Slider# Type Chan ....data.... F7H
> The IDs are the three-byte manufacturer's ID for Phil Rees Music Tech
(00H 20H 43H), followed by the two-byte C16 product ID (00H
02H).
> Slider# is the slider to be set numbered 0~15 (00H~0FH) for Target
98, and 16~31 (10H~1FH) for Target 99. Slider# 7EH and 7FH are
used for the entry events for Targets 98 and 99, respectively.
See below for more info about the entry events.
> The Type element specifies the the type of MIDI messages to be sent,
Controller, SysEx etc. - see list below.
> Channel is MIDI channel (channel 1 is represented as 00H, channel
16 is represented as 0FH). If the value of this element is over 0FH, the MIDI
channel is determined by the position of the C16 front panel
rotary switch. This element is omitted for the all of the SysEx Types, where special
provision is made for Device ID - see below.
> The number of bytes in the data element depends on the Type.
Types: 00H Off
01H Controller
02H NRPN
03H RPN
04H SysEx
(Normal)
05H SysEx + 00H
06H SysEx + Checksum (1)
07H Pitch
Bend
08H Channel
After Touch
09H Notes
(introduced in C16 firmware version 1.1)
14H SysEx (2's Comp.)
(introduced in firmware v1.2)
15H SysEx (Mod and Sign)
(introduced in firmware v1.2)
16H SysEx + Checksum (3)
(introduced in firmware v1.2)
17H SysEx (Nibbles)
(introduced in firmware v1.2)
26H SysEx + Checksum (2)
(introduced in firmware v1.3)
Controller Example:
+--------- Slider (0FH = 16th slider of Target 98)
| +------ Type (01H = controller)
| | +-- Midi channel (>0FH = rotary switch)
| | | +- Controller no (01H = mod wheel)
F0H 00H 20H 43H 00H 02H 0fH 01H 7FH 01H F7H
NRPN or RPN Example:
+----------- Slider(18H = ninth of Target 99)
| +------------- NRPN Type
| | +--------- Midi Channel (0FH = channel 16)
| | | +----- Param LSB
| | | | +- Param MSB
F0H 00H 20H 43H 00H 02H 1FH 02H 0FH 12H 34H F7H
Pitch Bend Example:
+----------- Slider (11H = second of Target 99)
| +------- Type (07H = Pitch Bend)
| | +---- Midi Channel (>0FH = rotary switch)
F0H 00H 20H 43H 00H 02H 10H 07 7FH F7H
Channel After Touch Example:
+----------- Slider (00H = first of Target 98)
| +------- Type (08H = Channel After Touch)
| | +--- Midi Channel (>0FH = rotary switch)
F0H 00H 20H 43H 00H 02H 00H 08H 7FH F7H
Notes Example:
+------------- Slider (10H = first of Target 99)
| +--------- Type (09H = Legato MIDI Notes)
| | +----- Midi Channel (02H = channel 3)
| | | +- Note number (3CH = middle C)
F0H 00H 20H 43H 00H 02H 10H 09H 02H 3CH F7H
This Type produces legato notes, with the slider position represented in the
Note-On velocity. A Note-Off (8nH kkH 40H) is sent immediately before each Note-On
(9nH kkH vvH). If you require a terminating Note-Off (9nH kkH 00H), pull the
slider down to the zero position. This Type is intended primarily for various
MIDI lighting controllers. and is unlikely to find serious applications in music
production. This Type is only supported by C16 firmware versions 1.1 or higher.
System Exclusive
Example:
SysEx stream to recreate
in this example: JX8P's filter parameter.
+------------------------------
Roland ID
|
+---------------------- Device ID (as JX8P's MIDI channel)
|
|
+------ Filter param number
|
|
| +-- Value(range= 00H~7FH)
F0H 41H 36H 00H 21H 10H 01H 22H vvH F7H
Note that there 7 bytes between F0H and vvH, and JX8P doesn't
use checksums.
SysEx stream to send
to C16:
+------------------
Slider 02 (third of Target 98)
|
+------------------------- SysEx (normal) Type
|
| +------- Top limit of the data byte(range)
|
| | +----- lower nibble: Indicates 7 bytes
|
| | | follow
|
| | | upper nibble:
Value from rotary
| | | | switch
should be added to third
| | | | data
byte, to create Device ID
|
| | |
|
| | | +---+---+---+---+---+---+- 7 bytes
| | | | | | | | | | |from
JX8P
| | | | | | | | | | | stream
F0H 00H 20H 43H 00H 02H 02H 04H 7FH 37H 41H 36H 00H 21H 10H 01H 22H F7H
When the third slider of Target 98 is moved C16 will recreate
the original stream and automatically insert a seven-bit data value after the
'22H' and before the 'F7H'. This data value will be scaled to a maximum
set by the top limit (range). The front panel switch value (in the
range 00H~0FH) will be added to the third data byte to sythesise a Device ID.
In C16 firmware versions 1.0 and 1.1, there are two other Types of SysEx available, SysEx + 00H and SysEx + Checksum (1). In C16 firmware version 1.2, there are four additional SysEx command Types. Version 1.3 adds yet one more
SysEx Type:
> SysEx + 00H
Type 05H is implemented in the same way as a Normal SysEx except this Type automatically
appends a byte of value zero after the data byte. This is mostly used to
insert a dummy (positive) sign byte after the data byte, or for MSB-first
double-precision data.
> SysEx + Checksum (1)
Type 06H appends a Roland-format negative checksum after the data byte and is calculated by C16 without the user having the calculate it. It does not include the first four data bytes of the stream (which is the usual situation). When merely performing parameter changes via SysEx, checksums are mainly implemented only on Roland instruments. This is the most common kind of SysEx checksum.
> SysEx + Checksum (2)
Type 26H also appends a Roland-format checksum after the data byte and the checksum is again automatically calculated by the C16. To accomodate devices with a two-byte
Model ID, the first five data bytes in the message are not
included in the sum. This Type is only supported by C16 units with firmware versions 1.3 or higher.
> SysEx + Checksum (3)
Type 16H appends a Waldorf-format positive checksum after the data byte and is also automatically calculated by the C16. The first four data bytes in the message are not included in the sum. This Type is only supported by C16 units with firmware versions 1.2 or higher.
> SysEx (2's Comp.)
Type 14H is a two-byte data format. The first data byte contains the righthand seven bits of a two's complement value. The second data byte is a sign byte, which has the code 00H for positive values and 7FH for negative values. This Type is only supported by C16 units with firmware versions 1.2 or higher.
> SysEx (Mod and Sign)
Type 15H is also a two-byte data format. The first data byte contains a seven bit modulus or absolute value. As above, the second byte is a sign byte, which has the code 00H for positive values and 7FH for negative values. This Type is only supported by units with firmware versions 1.2 or higher.
> SysEx (Nibbles)
Type 17H is a two-byte data format, intended to provide for Peavey-style
'nibblized' data. The first data byte contains the most significant
three bits of a seven-bit value. The second data byte contains the least
significant four bits of said value. This Type is only supported by firmware 1.2 or higher.
Here are some notes about using the SysEx Types:
> Be sure that the number of bytes between the 'F0H' and the data byte are
counted correctly or erroneous MIDI may be sent from C16.
> The longest stream that can be stored is 12 bytes.
> Type 05H's can only send '00H' so synths that use this byte as a 'sign byte'
will behave positively only.
> Setting the range value to 0 is generally pointless!
> All bytes between the opening F0H and closing F7H must be 7FH or lower.
> The Device ID's location can only exist in the first eight data bytes (rarely
a problem).
> Be sure that any byte the rotary switch position value (Device ID) is added
to, the result won't exceed 7FH (C16 will limit the result to
7FH).
> If the Device ID location byte is set to zero it is not used.
TARGET ENTRY EVENTS:
It is possible to send one command as soon as a User Target has been selected
without having to touch a slider. This is mostly useful to send a
mode change message required before any slider movements will take effect -
usually this message is likely to be SysEx, but C16 can
send all command Types available for the sliders. The entry events are triggered when
the TARGET SELECT pushbutton is released.
There is no slider position associated with the entry events, so the value
is fixed at 40H for Controllers, NRPNs, RPNs, Channel After Touch, Pitch Bend
MSB and Note-On velocity. For SysEx, the data byte's value must be set
explicitly as part of the stream, and therefore the Number of bytes to be specified
is one greater than it would be for a slider generating the same message.
Controller Example:
+---------------- 7EH = 'On entry to Target 98'
| +------------ Type (01 = Controller)
| | +-------- Midi Channel
| | | +---- Controller Number
F0H 00H 20H 43H 00H 02H 7EH 01H 00H 0AH F7H
SysEx Example:
+------------------- 7FH = 'On entry to target 99'
| +--------------- Type (04 = SysEx normal)
| | +----------- Data Limit (irrelevant here)
| | | +------- Number of bytes and
| | | | Device
ID location
| | | | +---+---+---+---+---+---+---+SysEx
|
| | | | | | | | | | |bytes
|
| | | | | |
| | | | |incl.
|
| | | | | |
| | | | |
data
|
| | | | | |
| | | | |= 55H
|
| | | | | |
| | | | |
F0H 00H 20H 43H 00H 02H 7FH 04H xxH 38H 41H 36H 00H 21H 10H 01H 22H 55H F7H
In these examples, when Target 98 is selected controller message 0AH
(Pan position) will be sent with its data set to 40H (centre). And
when 99 selected the SysEx stream: F0H 41H 36H, 00H 21H 10H 01H 22H 55H
F7H would be sent with the third data byte also the device ID.