An ASCII text version of this document, as well as several C programming tables with algorithm and
parameter information is available on CompuServe under section seven of the MIDI B forum. To
access these documents:
•Enter CompuServe, type GO MIDIBVEN
•Select "section seven: Lexicon"
•Enter the Lexicon library
Program Change Messages
Reception of MIDI Program Change and Bank Select messages can be selectively enabled/disabled from
Control Mode parameter 3.0 MIDI Pgm Change, or via System Exclusive (sytem parameter 20). The
manner in which the PCM 80 interprets these messages is determined by the value of this parameter as
follows:
Pgm Change: Off All Program Change and Bank select messages are ignored.
Pgm Change: On Program Change messages 0—49 correspond to PCM 80 Effects 0.0 —4.9 in the
current bank. Program Change messages 50—127 are ignored.
The current bank can be changed with MIDI Bank Select Messages as follows:
0–3: Program Banks 0–3
4: Internal Register Bank
5–9: reserved
10–57: Memory Card Banks (The number of banks available on a given card will vary with
its size.)
Pgm Change: Map Program Change 0-127 can be mapped to any PCM 80 Effect in any internal or
card bank. Two 128 element maps are stored internally, additional maps may be
stored on RAM cards. The map to be used can be selected from the PCM 80 front
panel or via SysEx (system parameter 21).
Pgm Change: Chain Any Program Change number can be selected to load any one of ten customized
effect “chains.” Once a chain is loaded, effects in the chain are accessed by the
controller patched to Pgm + and Pgm – (program increment and program
decrement). The chain can be selected by Program Change (system parameter
22=0) or via SysEx (any other value for system parameter 22).
SysEx Automation
The PCM 80 will transmit SysEx automation messages when Control Mode parameter 3.4 MIDI
Automation is set to On. All changes made by front panel operations are transmitted as PCM 80 SysEx
messages. This is intended primarily for use by editor programs and in configurations where it is desirable
for one or more PCM 80s to be slaved to a single PCM 80 acting as a master. In this case, Program
Changes are sent directly via SysEx and are not dependent on Program Change mode.
1
PCM 80 MIDI Implementation DetailsLexicon
Controller Automation
For applications where it is desirable to “automate” changes made to PCM 80 effects with its own controls
( ADJUST knob, Foot Pedal , Footswitch 1 or Footswitch 2), we recommend assigning the controllers to
MIDI destinations and recording the changes with a MIDI sequencer (see Control Mode parameter 3.5,
MIDI Destinations).
Reset All Controllers
The PCM 80 recognizes the “Reset All Controllers” message. When received, all patched parameters are
reset to their stored values. Patched parameters may also be reset from the PCM 80 front panel —Control
Mode parameter 3.0. The message will also be transmitted from the PCM 80 on its transmit channel.
MIDI Clock and Clock Commands
The PCM 80 recognizes MIDI clock messages when Tempo Mode parameter 0.2, Tempo Source is set
to MIDI. Any Delay or LFO parameter set to display tempo values will be synchronized to the tempo of
the incoming MIDI clock.
MIDI Clock and Clock Commands are also available as Dynamic MIDI patch sources. The value of MIDI
Clock when used as a patch source is a linear scaling of 0 to 127 (0 = 40 BPM and 127 = 400 BPM). The
value of Clock Commands when used as a Dynamic MIDI patch source is 1 for START and CONTINUE
and 0 for STOP.
Dynamic MIDI
The following MIDI messages are available as Dynamic MIDI patch sources:
MIDI Controllers 1-119
Pitch Bend (most significant 7 bits)
After Touch (Polyphonic and Channel combined)
Velocity (Note On)
Last Note
Low Note
High Note
Tempo (Linear scaled value is always available, and
will reflect the selected source: Internal or MIDI.)
Clock Commands
These MIDI messages are also available as threshold sources for several Modulation parameters: AR
Env, Latch, Sw 1 and Sw 2. They may also be used as a tap source for controlling Tempo.
Bulk Data Dumps
Control mode 3.8 (MIDI Dump) allows selection of the following types of bulk data to be dumped directly
from the PCM 80 to another PCM 80, or to editor/librarian software.
Displayed NameDescription
CurrentPgmCurrently running effect
Bank RInternal Register Bank
Bank C0-CKCard Banks (card must be inserted)
Map 0, 1Internal Program Change Maps
Map 2-33Card Program Change Maps (card must be inserted)
Chain 0-9Internal Program Chains
Chain 10-19Card Program Chains (card must be inserted)
Int ChainsAll Internal Program Chains
Ext ChainsAll Card Program Chains (card must be inserted)
Setup CCurrent Setup
Setup 0-4Internal Setups
Setup 5-9Card Setups
Use ADJUST to select the bulk data type. Press Store to transmit the data .
2
Lexicon
PCM 80 MIDI Implementation Details
SysEx Implementation
There are two primary classes of SysEx messages: Requests and Dumps. The PCM-80 must be enabled
for receipt of SysEx messages (Control mode 3.7) or incoming SysEx messages will be ignored.
SysEx Header
All SysEx messages are preceded by the standard header:
1F0Sysex ID
206Lex ID
307PCM80 ID
40iii iiiiDevice ID (Values 0-126 are defined as specific addresses. Any
The byte immediately following the header is the identifier for the type of SysEx message.
Requests
A request is initiated by a remote host (never by a PCM-80). A request usually results in a dump.
Dumps
A dump is data transmitted by a PCM-80 in response to a request, or as a result of specific front-panel
dump or SysEx automation instruction.
A dump can be purely informational, containing version information, etc. This sort of dump will be
transmitted by the PCM-80 only as the result of an external request. It can be considered as unidirectional.
The PCM 80 will ignore any such requests received.
connected and enabled PCM 80 will recognize messages sent
to device 127.)
All other dumps (effect dumps, parameter dumps, etc) can be treated as bidirectional. If transmitted by
a PCM-80, such dumps show the current internal state of the machine. When received by a PCM-80, they
will cause state changes.
To receive dumps or requests, the PCM 80 must be enabled for receipt of SysEx message at Control 3.1.
If receipt of SysEx messages is not enabled, all SysEx messages will be ignored.
System Configuration
System Configuration will be transmitted by the PCM 80 to a remote host on request.
Byte #ByteValueDescription
1-4Header
50x0Config Data
60iii iiiiMajor Version #
70iii iiiiMinor Version #
8-150iii iiiiTime string
16-260iii iiiiDate string
27-340nNibbleized longword (LS first) that defines size of 56K memory in 64k word blocks.
35-1500iii iiiiBank info. 2 characters for each bank. First character is the bank size. A size of 0
indicates bank not present. A non-zero in the second byte indicates that the bank
is a preset bank (not writeable).
1510nCard Present (non-zero if present)
1520nCard write protect (non-zero if protected)
1530iii iiiiCard version*
1540iii iiiiCard Type*
155-1640iii iiiiName string for card*
1650iii iiiiCard page count (1 page = 64K)*
1660iii iiiiCount of algorithms online
167-1900iii iiiiList of algorithm IDs (only 'count' are valid)
1910iii iiiiCurrent mode of user interface
1920iii iiiiUser interface is in a submode
This is a bidirectional dump which can be initiated from front-panel as a bank dump.
Byte #ByteValueDescription
1-4Header
50x1Effect bulk Data
60iii iiiiBank (source bank if sent by PCM 80. Target bank if received by
7-43706xxxxxxxx50 Single effect data packets, with checksums after each. (See
437070xF7End of SysEx
PCM 80)
Single Effect).
Single Effect
This is a bidirectional dump which can be initiated from the front-panel as a current-effect dump. NOTE:
The internal data is bit-packed and must be decoded according to bitpacking information in this document.
These messages should be treated as read-only.
Byte #ByteValueDescription
1-4Header
50x2Single Effect Data
60iii iiiiBank #*
70iii iiiiProgram #
8-8770x0nNibbleized data (Least-significant nibble first).
878-8790iii iiiiValid. This is an 8-bit value, nibblized with LSB first. (0 - not a valid
880-8810iii iiiiChecksum. This is an 8-bit value, nibblized with LSB first. It is a
8820xF7End of SysEx
effect, 1 -valid effect)
simple additive checksum that starts at the beginning of nibblized
data and goes through the Validity flag byte.
If both Bank and Program values are set to 0x7f, the dump will consist of the contents of the current edit
buffer. If the dump is received by a PCM 80 (and Bank and Program values are set to 0x7f), the incoming
data will be put into the edit buffer (the effect will be loaded), but the dump is not stored.
Table
This bidirectional dump describes a complete program table (map). This dump can be initiated from the
front-panel as a map dump.
Byte #ByteValueDescription
1-4Header
50x3Table Data
60iii iiiiTable (map) #
70iii iiiiBank for table position 0
80iii iiiiOffset for table position 0 (offset refers to program #)
9-262Bank/offset for positions 1-127
2630xF7End of SysEx
Table Element Message
This bidirectional dump describes a single position in a program table (map).
Byte #ByteValueDescription
1-4Header
50x4Table Element Data
60iii iiiiTable (map) #
70iii iiiiOffset in table
80iii iiiiBank
90iii iiiiOffset
100xF7End of SysEx
4
Lexicon
PCM 80 MIDI Implementation Details
Bulk Chain
This bidirectional dump describes a set of program chains (either the internal set of 10, or 10 from a card).
This can be initiated from the front-panel as a bulk chain dump.
Byte #ByteValueDescription
1-4Header
50x5Chain Bulk
60000 000iInternal/Card (0=Internal, 1=Card)
7-260iii iiiiData for chain 0 (10 if card). See description for Chain message
27-206.... ....Data for chains 1-9 (11-19 if card)
2070xF7End of SysEx
(0x6), bytes 7-26 for details
Chain
This bidirectional dump describes a complete program chain. This can be initiated from the front-panel
as a chain dump.
Byte #ByteValueDescription
1-4Header
50x6Chain Data
60iii iiiiChain #
70iii iiiiBank for chain position 0 (0x7f if nothing is mapped to this position)
80iii iiiiOffset for chain position 0 (0x7f if nothing is mapped to this position).
9-26Bank/offset for positions 1-9
270xF7End of SysEx
Chain Element
This is a bidirectional dump which describes a single position in a program chain.
Byte #ByteValueDescription
1-4Header
50x7Chain Element Data
60iii iiiiChain #
70iii iiiiOffset in chain
80iii iiiiBank
90iii iiiiOffset
100xF7End of SysEx
Display
This is a bidirectional dump. When transmitted from the PCM-80, this holds the current display
information. When received by a PCM-80, this text is briefly displayed (for 2 seconds).
Byte #ByteValueDescription
1-4Header
50x08Display message
6-250iii iiiiTop line of display (blank-padded, no NULL terminator)
26-450iii iiiiBottom line of display (blank-padded, no NULL terminator)
460xF7End of SysEx
Note: Any characters below 0x20 (space) or above 0x7e (tilde) are converted to space.
5
PCM 80 MIDI Implementation DetailsLexicon
Matrix
The matrix dump gives general information about the front-panel layout of the Edit, Control and Tempo
modes, including row labels, etc. It does not give a full description of the various parameters assigned,
since it is assumed that editing programs will manipulate parameters directly by ID.
Byte #ByteValueDescription
1-4Header
50x09Matrix dump
60nMatrix type:
70iii iiiiAlgorithm ID (only for Edit mode)
8-230iii iiiiAlgorithm name string (only for Edit mode)
240iii iiiiCount of rows
25-1124010 Row description buffers (1610 bytes total. See description
11250xF7End of SysEx
0 - Control
1 - Tempo
2 - Edit (matrix for current prog)
below).
Row description buffer — There are 10 of these in the packet, although only Byte 20 (Count of rows) is
meaningful.
0-80iii iiiiRow label
90nNumber of columns in the row
10-10910 column description buffers (150 bytes total. See below for
description)
Column description buffer — There are 10 of these in each row description buffer, although only Byte 10
(Number of columns in the row) is meaningful.
0-80iii iiiiColumn label
90nColumn type. Types of objects are:
The matrix dump could be used by a self-configuring editing program. SysEx and bitpacking information
will be available for for any PCM 80 algorithms released on cards.
6
Lexicon
PCM 80 MIDI Implementation Details
Parameter
This bidirectional message can be transmitted or received by a PCM-80. This is the message that is used
when a PCM-80 is transmitting SysEx automation. There are three types of parameters: System,
Patchable, and NonPatchable.
System ParametersThese are not saved with an effect, but are part of the system
setup. They include things such as Midi Channel, etc. These
values are also transmitted in Setup Data.
Patchable ParametersThese are saved with an effect, and include all parameters that
can be patch destinations.
NonPatchable ParametersThese are saved with the effect but are not patch destinations.
They include things such as envelope thresholds, etc.
Byte #ByteValueDescription
1-4Header
50BParameter Value
60xParameter Type
70iiiiiiiParameter Offset
80000000iTempo Mode Flag
90000iiiiLeast-significant nibble of absolute value or numerator byte.
100000iiiiNext nibble of absolute value or numerator byte.
110000iiiiNext nibble of absolute value or denominator byte.
120000iiiiMost-significant nibble of absolute value or denominator byte.
13F7End of SysEx
0 - system
1 - patchable
2 - nonpatchable
(Defines the value as an absolute 16-bit value (0) or as a ratio split
into bytes (1). It also forces the parameter into the appropriate
mode. This flag should be 0 except for those parameters that
support tempo mode.)
0 - Absolute mode
1 - Tempo Mode
7
PCM 80 MIDI Implementation DetailsLexicon
Button
This is a bidirectional message. The following buttons are transmitted in SysEx automation mode:
Compare, Tap, Bypass. Any button will be received, and PCM 80 response will be identical to front panel
button press responses.
Byte #ByteValueDescription
1-4Header
50xCButton message
60iii iiiiButton #
70xF7End of SysEx
0 - UP
1 - DN
2 - PRG
3 - LOAD
4 - REG
5 - STORE
6 - EDIT
7 - COMPARE
8 - CTL
9 - BYP
10 - TEMPO
11 - TAP
12 - Reserved
13 - Footswitch 2
14 - Reserved
15 - Footswitch 1
Button SysExes may be sent in quick succession (faster than 40 ms) to mimic holds.
Soft Row Assignment
Bidirectional. Assigns a PRO-mode slot to a GO-mode soft slot.
* This is the row/column that will appear in the soft row slot. A soft row position can be deassigned by setting
both row and column to 0x0f. The number of rows and columns is dependent on the current algorithm
(obtainable from a matrix dump, or from the documentation.) Slots in the Patch row cannot be assigned
to the Soft Row.
Patch Assignment
Bidirectional.
Byte #ByteValueDescription
1-4Header
50x13PatchAssign
60nPatchID (0-9)
7-80iii iiiiPatch Source. Nibblized with less significant part first. This is the
90iii iiiiPatch Destination (0x7f = disconnect). All other values remain valid.
100nPoint Count (0-8) (Only the ‘n’ values are meaningful. Remaining
index on the source control list. Source list indices are fixed (not
variable by preset, algorithm, or card).
values should be set to 0.
8
Lexicon
This point packet is repeated 8 times...
PCM 80 MIDI Implementation Details
100iii iiiiPoint Position (0-127). Positions should be in ascending order, and
110000 iiiiPoint Value LS nibble . The point value is independent of the specific
120000 iiiiPoint Value next nibble
130000 iiiiPoint Value next nibble
140000 iiiiPoint Value MS nibble.
15000i iiiiTempo value Numerator (1-24)
16000i iiiiTempo value Denominator (1-24)
may not be duplicated.
parameter range. The point value range is from 0 [minimum] to 0xffff
[maximum]. This format allows a new patch destination to be chosen
while maintaining the contour of the patch table.
7 additional 7-byte point packets...
670xF7End of SysEx
Knob
Host to PCM-80 only. Knob values can be sent via the following SysEx. Knobs operate within the current
context of the user interface. For example, in Register mode, ADJUST is a soft knob. In Edit mode,
ADJUST varies the displayed parameter.
Byte #ByteValueDescription
1-4Header
50x14Knob Code
60nKnob ID:
70nLeast-significant nibble of 2’s complement knob delta (16 bits) Due
80nNext nibble
90nNext nibble
100nMost-significant nibble
110xF7End of SysEx
Note: In automation mode, the PCM-80 sends parameter values, not knob deltas.
0 - Select Knob
1 - Adjust Knob
to knob ballistic calculations, large deltas may result in very large
value changes.
Program Change
Bidirectional, used in SysEx automation to effect Program change. The current MIDI program change
mode (mapped, chained, off, etc) is ignored.
PCM-80 to host only. This dump returns information about a specific parameter. It is provided for an editing
program that doesn’t know the count, range or name of a parameter.
Byte #ByteValueDescription
1-4Header
50x16Param Spec Data
60nType (see the param message)
70nOffset
80iii iiiiFlags (tempo mode available, etc). There are two bits defined in this
9-200xxx xxxxParameter name (space-filled)
210nLeast-significant nibble of the maximum parameter value (16-bit
220nNext nibble
230nNext nibble
240nMost-significant nibble
250xF7End of SysEx
field:
Bit 0 (0x01) Parameter supports tempo mode
Bit 3 (0x08) Parameter is not patchable. This overrides the type
field.
unsigned).
Parameter Display
PCM-80 to host only. This dump returns the current display for a specific parameter. It is provided for an
editing program that doesn’t know the display specifics for a parameter. Note: This is the momentary
active value. If the parameter is currently driven by a patch, the value at the time of inquiry will be
transmitted, but the tru value may continue to change.
Byte #ByteValueDescription
1-4Header
50x17Param display data
60nType (see param message)
70nOffset
8-270iii iiii20-char display string. String is space-padded, no NULLS.
280xF7End of SysEx
System Setup
This dump is both transmitted and received by the PCM80. It contains all system parameters (those
parameters that are not part of a preset).
Byte #ByteValueDescription
1-4Header
50x18Setup Data
60iii iiiiSetup ID (0x7f=Current, 0-4=Internal, 5-9=Card)
7-15Setup name (ASCII, space-filled)
16-19OnNibbleized unsigned short param value (LS first) for first param
20-183OnRemaining params
1840xF7End of SysEx
10
Lexicon
PCM 80 MIDI Implementation Details
Save Current Edit Buffer
Host to PCM-80 only. Current edit buffer is named and saved with this SysEx message.
Byte #ByteValueDescription
1-4Header
50x19Save Code
60iii iiiiDestination Bank
70iii iiiiDestination Program
8-190iii iiii12-character program name
20-280iii iiii9-character knob name
290xF7End of SysEx
Note: Any characters below 0x20 (space) or above 0x7e (tilde) are converted to space.
Effect Information
PCM-80 to host only. This dump allows a remote master to get information about any of the effects.
Byte #ByteValueDescription
1-4Header
50x1aEffect Info
60iii iiiiBank #
70iii iiiiProgram #
8-230iii iiiiAlgorithm Name
24-350iii iiiiProgram Name
36-440iii iiiiKnob Name
450xF7End of SysEx
Failure Message
PCM-80 to host only. This tells the host that the PCM-80 was unable to service a particular request.
Byte #ByteValueDescription
1-4Header
50x7cFailure
60xF7End of SysEx
11
PCM 80 MIDI Implementation DetailsLexicon
Data Request
Host to PCM-80 only. The host may request that a message be sent by the PCM-80.
Byte #ByteValueDescription
1-4Header
50x7FData request
60iii iiiiType of data requested. This matches the message IDs described
7-11Parameters for request. These depend on the type of message
120xF7End of SysEx
RequestRequest ByteParameter bytes
System Config0x00no parameters
Effect Bulk0x01Bank
Effect Single0x02Bank, Offset
Table0x03TableID
Table element0x04TableID, Offset
Chain0x06ChainID
Chain element0x07ChainID, Offset
Display0x08no parameters
Matrix0x09Mode
Param0x0bType, Offset
Soft Row0x12Offset (0-9)
Patch0x13PatchID (0-9)
Param spec0x16Type, Offset
Param display0x17Type, Offset
System setup0x18ID of setup
Program Info0x1aBank, Offset
above, but not all messages may be requested. See table below.
requested. Any unused parameters should be set to 0. See table
below. Parameters are not nibblized.
Note: The entire 12-byte request must be sent with unused parameters set to 0.
Bank assignments
Effects in the PCM 80 are accessed by Bank and Program numbers. Banks are assigned as follows:
Bank 0-3Internal presets
Bank 4User-generated effects
Bank 5-9Extension presets. Presets are loaded into these banks from algorithm cards.
Bank 10-upCard banks (either user-generated or preset, depending on card type).
Program numbers are 0-49. Any program numbers greater than 49 are ignored. The exception is Map
mode, in which a program number (0-127) is used to look up a bank/program combination from a map.
12
Lexicon
PCM 80 MIDI Implementation Details
Patch sources by Index
The following values allow sources to be selected for patches, for Tap sources, or for other control sources
such as AR Source.
Note: MIDI controllers 0 and 32 are used for Bank change, and are not available as controllers.
13
PCM 80 MIDI Implementation DetailsLexicon
System parameters
These parameters are global (not part of a preset).
Param#DescriptionMaxValue
0Wordclock source2
1Analog input level100
2Digital input level100
3MIDI Receive on/off/channel18
4MIDI transmit on/off/channel17
5External tap sourcesee patch source list
6External tap threshold127
7MIDI controller ID for continuous pedal118
8MIDI controller ID for footswitch 1118
9MIDI controller ID for ADJUST knob118
10MIDI sysex device ID126
11MIDI sysex enable1
12Memory protect1
13Pro Mode/Go Mode1
14Mix Prg/Global1
15Tempo Prg/Global1
16Autoload1
17Bypass Mode3
18MIDI controller ID for footswitch 2118 (footnote 2)
19Patch update mode1
20MIDI program change mode3
21Map select127
22Chain select127 (footnote 3)
23Pgm+ source120
24Pgm- source120
25Program change bypass mode1
26Global Mix value100
27Transmit MIDI clock1
28Dump speed2
29MIDI automation mode1
30Transmitted device ID for automation127
31Tempo blink on/off1
32Global tempo value360
33Dig In status0
34Selects display of digital error5
35Autolock enable1
36Transmitted SCMS selection2
37Transmitted emphasis selection2
38Tempo source (internal/MIDI)1
39Analog output level1
40Sample dump output resolution20
42Bypass controller assign78
Note: The PCM 80 ignores received values for parameters 10 and 11 (Device ID and SysEx Enable).
These values can only be changed from the PCM 80 front panel (Control 3.7), or by restoring a setup from
internal memory or from a card. The values are transmitted correctly.
14
Lexicon
PCM 80 MIDI Implementation Details
Patchable Parameters
These are the patchable parameters that are the same (both offset and range) for all algorithms.
The MIDI specification defines a global message that allows a host device to determine what sorts of
devices are connected. The specification is somewhat ambiguous in its own wording and in the way it is
supported by different manufacturers. Here is the way the message is interpreted by the PCM 80.
Inquiry to the PCM 80:
Byte #ByteValueDescription
10xf0Sysex header
20x7eUniversal non-realtime header
30iii iiiiChannel. Treated as the sysex device ID assigned to the
40x06General information
50x01Device inquiry
60xF7EOX
PCM 80.
Response from the PCM 80:
Byte #ByteValueDescription
10xf0Sysex header
20x7eUniversal non-realtime header
30iii iiiiChannel. Sysex device ID assigned to the PCM 80.
40x06General information
50x02Device id message
60x06Lexicon sysex ID
70x00Family code LSB
80x00Family code MSB
90x07Family member code LSB. This is the PCM 80 sysex
100x00Family member code MSB
110iii iiiiMajor software revision #
120iii iiiiMinor software revision #
130iii iiiiRelease code. For normal released code, this byte is 0.
140x00Unused revision data.
150xf7EOX
product code (byte 3 of a standard sysex).
Any other value indicates test code that is not under
general release.
16
Lexicon
PCM80MIDIImplementationDetails
Single Effect Message Format
Bytes 8-879 of the System Exclusive Single Effect Message are described as “Nibbleized data”. The 872
nibbleized bytes, when reassembled make up 435 bytes that are the PCM 80 Effect Register and a 1-byte
checksum. The 435-byte record is of the following format:
BytesDescription
1-2Count of valid bytes (n) (ls byte first)
3Algorithm Id
4Position in Edit Matrix
5-16Register Name – space filled
17-25ADJUST Knob Name – space filled
26-nBitpacked Effect Control Data
(n+1)-435Zero Fill
Effect Register Header Information
Algorithm ID
PCM 80 software includes ten algorithms. The numbering and naming is as follows:
Position in the Edit Matrix refers to the row and slot numbers given in the PCM 80 User Guide for each
algorithm, the same as the displayed row.slot number. The format of this Edit Matrix Position is:
BitMeaning
rrrrssssrrrr = row (0x0 through 0xf)
ssss = slot (0x0 through 0xf)
Register Name
The Register Name is the text name that appears when the register is selected from any of the Program,
Register, or Card banks. This text is always 12 bytes of ASCII characters with no NULL (0x00) characters,
padded with spaces (0x20) if needed to fill out the 12 bytes.
ADJUST Knob Name
The ADJUST Knob Name is the text name that appears when a register has been loaded, at least one
parameter has been patched to the ADJUST knob, and the ADJUST knob is turned. This text is always
9 bytes of ASCII characters with no NULL (0x00) characters, padded with spaces (0x20) if needed to fill
out the 12 bytes.
Bitpacked Effect Control Data
The Bitpacked Effect Control Data contains all of the parameter values and patching information that make
up the effect. Details of this data make up the entire remainder of this document.
17
PCM 80 MIDI Implementation DetailsLexicon
Bitpacking
General Bitpacking Method
All PCM 80 effect control data fields are words from 1-16 bits in length utilizing the minimum number of
bits necessary to represent the full range of the field. The values of these fields are packed into bytes right
justified.
As an example, let us say we have fields a, b, and c which are, respectively, 5, 14, and 9 bits wide.
aaaaafirst field bits
bbbbbbbbbbbbbbsecond field bits
cccccccccthird field bits
. . . . . . . .unused bits
Our bitpack bytes would initially be all zeroes and the first several bytes would look like this:
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
...............................................
The first field is loaded right justified into the first byte.
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
...aaaaa........................................
The second field’s 3 least significant bits are loaded into the remaining 3 bits of Byte 1...
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
bbbaaaaa......................................
...the next (middle) eight bits are loaded into Byte 2...
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
bbbaaaaabbbbbbbb................................
...and finally the remaining (most significant) 3 bits of the second field are loaded right justified into Byte
3.
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
bbbaaaaabbbbbbbb.....bbb........................
The 5 least significant bits of the third field are loaded into the remaining bits of Byte 3...
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
bbbaaaaabbbbbbbbcccccbbb........................
...and the remaining (most significant) 4 bits of the third field are loaded right justified into Byte 4.
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
bbbaaaaabbbbbbbbcccccbbb....cccc................
If the values of those three fields had been 0x1f, 0x2222, 0x147 respectively, the bitpack field would look
like this:
Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
010111110101010100111101....1010................
If there we only three fields in this effect register, the remaining 4 most significant bits of Byte 4 would be
assigned to zero and the remaining 406 bytes would also be zero filled.
Byte 1Byte 2Byte 3Byte 4Byte 5 -> Byte 410
010111110101010100111101000010100000000000000000
18
Lexicon
PCM 80 MIDI Implementation Details
Bitpack Data Groups
The bitpacked Effect Control Data contains five distinct groups of information pertaining to the effect:
Soft Row Assignments
Unpatchable Parameter Information
ADJUST Knob Initial Value
Patchable Parameter Information
Patching Information
The first three Bitpacked Effect Control Data Groups: Soft Row Assignments, Unpatchable Parameter
Information, and ADJUST Knob Initial Value, are exactly the same for all algorithms. Patchable Parameter
Information, is different for every algorithm both in the number of fields and in the bit width for each field.
Patching Information follows a methodology that is the same for every algorithm, but which is dependent
on field values from the Patchable Parameter Information, so the Patching Information cannot not be said
to be “identical” in all the algorithms.
Soft Row Assignments
Familiarize yourself in the PCM 80 User Guide with respect to the “Soft Row” which occupies the top row
of every effect edit matrix. The edit matrix parameters in each of the 10 slots of the Soft Row are
assignable. Soft Row assignments in the Bitpacked Effect Control Data consists of ten 8-bit fields, i.e. one
byte for each of the Soft Row slots S.0-S.9. Each field contains the row and slot of the parameter that is
to be mapped to the Soft Row. The value of the 8-bit field is a pseudo BCD format, in that the upper nibble
of the byte is the row number of the parameter to be mapped, and the lower nibble of the byte is the slot
number.
For example, a Soft Row Assignment Value of 0x00 means that the parameter in the Edit Matrix at row
0 slot 0 will be mapped to this particular Soft Row slot. Row 0 Slot 0 happens to be the Wet/Dry Mix in every
algorithm. A Soft Row Assignment Value of 0x84 means that the Edit Matrix row 8 slot 4 parameter will
be mapped to the Soft Row Slot. Valid Soft Row Assignment Values are 0x00 through 0x09, 0x10 through
0x19, and so forth up to 0x90 through 0x99. The value 0x7f is reserved to indicate a Soft Row Assignment
that is specifically unassigned. Any other value put in a Soft Row Assignment, including valid values for
which that particular algorithm has no parameter (like 0x29 in the Plate Algorithm) will produce
UNKNOWN results.
Unpatchable Parameter Information
The Unpatchable Parameter Information contains only the values of fifteen unpatchable parameters. This
list of unpatchable parameters is identical for every algorithm
SeqBitsRangeFieldFoundWhere
09360TempoRateTempo Matrix
17127AR EnvT LvlEdit Matrix Mod Row
27127Sw 1T LvlEdit Matrix Mod Row
37127Sw 2T LvlEdit Matrix Mod Row
47127LatchLowEdit Matrix Mod Row
57127LatchHighEdit Matrix Mod Row
68255AR EnvT SrcEdit Matrix Mod Row
78255Sw 1T SrcEdit Matrix Mod Row
88255Sw 2T SrcEdit Matrix Mod Row
98255LatchSrcEdit Matrix Mod Row
10414TapDurationTempo Matrix
1136TempoBeatValueTempo Matrix
1236TapAverageTempo Matrix
137127ControlsADJUST Low LimitEdit Matrix Control Row
147127ControlsADJUST High LimitEdit Matrix Control Row
19
PCM 80 MIDI Implementation DetailsLexicon
ADJUST Knob Initial Value
The ADJUST Knob Initial Value is a single 7-bit field which defines the value, 0-127, to which the ADJUST
knob will be assigned when the effect register is loaded. Please note that the initial value of the knob ought
to lie in the range defined by Controls ADJUST Low Limit and High Limit fields in the Unpatchable
Parameter Information.
Patchable Parameter Information
As stated earlier, the Patchable Parameter Information is different for every algorithm. The actual list of
fields for each algorithm is provided earlier in this document. To give you an idea of what you will find there,
the first six parameters in every algorithm looks like this:
SeqBitsRangeField
07100ControlsMix
1780ControlsFX ADJUST
28160ControlsInLvl L
38160ControlsInLvl R
47100ControlsInPan L
57100ControlsInPan R
Look through the Edit Matrix picture for the algorithms in the PCM 80 User Guide, you will notice that the
sequence of these fields matches the order of the parameters found in the Edit Matrix, starting at Row 0
Slot 0 and going through the slots in Row 0. The Patchable Parameter Information is in fact derived from
the sequence of patchable parameters in the Edit Matrix. If you took the entire list of every parameter in
the Edit Matrix, then removed all the unpatchable parameters, the remaining list would be the patchable
parameters.
Patching Information
As the first Bitpacked Effect Control Data Group is the soft row information, which occupies the very
beginning of the Edit Matrix of the algorithms, followed by the unpatchable parameters, the ADJUST knob
value, and the patchable parameters (all of which draw from more and more of the Edit Matrix of the
algorithms), it is consistent that the last row of every Edit Matrix, the Patch row, finishes off the content
of the bitpack groups.
The Patching Information consists of 10 variable length blocks, one for each of the 10 patches in the Patch
row. Each block can be as small as 1 bit or as large as 204 bits (25 bytes, 4 bits).
A Patch Information Block always begins with a 1-bit field which indicates whether there is ANY patch
information for that patch. 0 means that there is no patch in that slot, 1 means that the data to follow is
to be interpreted as patch information. Therefore, an effect register which contains NO patches will have
a sequence of 10 zero-bits immediately after the Patchable Parameter Information in the bitpack
parameter data, each zero signifying an unassigned patch.
When the Patch Validity Value bit is a 1, it is immediately followed by the Patch Block Header with the
following format:
BitsContents
7Patch Source ID Value
1Destination Patchable Parameter List ID Value
8Destination Patchable Parameter Number Value
4Count of Patch Points Value
20
Lexicon
PCM 80 MIDI Implementation Details
If the Count of Patch Points is 0, the Patch Information Block will end with the above information. The Count
of Patch Points can be anywhere from 0-8. For values 1-8, the patch’s information block will be filled out
with the following sequence repeated for as many points as are defined.
BitsContents
7Patch Point Value (0 -27)
nDestination Patchable Parameter Value for that patch point
For the second field, the “n” bit count is anywhere from 1-16. It is the number of bits needed to represent
any value for that patchable parameter. For example, refer to the partial list of Patchable Parameter
Information in the previous section. If a patch destination parameter was Controls Mix, the number of bits
for the Destination Patchable Parameter Value would be 7, and the range of values for that parameter
would be 0-100. For every patch point there would be 7 bits to hold the Patch Point Value, and 7 bits to
hold the Destination Parameter Value. If the patch destination parameter was Control InLvl L, the number
of bits would be 8 and the range of values would be 0-160. For every patch point there would be 7 bits
to hold the Patch Point Value, and 8 bits to hold the Destination Parameter Value.
Bitpack Field Interdependencies
As mentioned in the previous section, there are details of implementation in the Patching Information that
are dependent (on an algorithm-by-algorithm basis) on the order of fields in the previous group, the
Patchable Parameter Information. The Plate Algorithm (Algorithm 0x00) will be used as an example to
point out these details.
There are 88 fields in the Patchable Parameter Information for the Plate Algorithm. Earlier information
might lead you to take the Edit Matrix for Plate from the User Guide, to count all the parameters from
Controls Mix up to (but not including) the Patch 0 information, to remove all the unpatchable parameters
from that list, count them all and see that there are 88 parameters. . . Not exactly so. . . You would find
there are 74 patchable parameters in the Plate Edit Matrix. The reason there are 88 fields in the Patchable
Parameter Information is that 14 of the 74 parameters in the Plate Edit Matrix are parameters which can
be represented in Tempo form in addition to some standard form (milliseconds, Hz, ...). Therefore, each
of those 14 parameters needs an additional 1-bit indicator flag as to whether the value for the parameter
is to be interpreted in its standard form or in tempo. 74 + 14 = 88.
21
PCM 80 MIDI Implementation DetailsLexicon
Plate Algorithm Patchable Parameter Information list
DestDest
SeqBitsList IDNumberRangeField
0700100ControlsMix
170180ControlsFX ADJUST
2802160ControlsInLvl L
3803160ControlsInLvl R
4704100ControlsInPan L
5705100ControlsInPan R
6706121ControlsHigh Cut
7707100ControlsVoice Dif
8708100ControlsFX Mix
91009720ControlsFX Width
1040109Rvb TimeLow Rt
11601163Rvb TimeMid Rt
12601260Rvb TimeCrossover
13601348Rvb TimeRt HC
1411<Tempo Flag>
1510014465Rvb TimePre Delay
16401515Rvb TimeRefLvl L
1711<Tempo Flag>
1810016600Rvb TimeRefDly L
19401715Rvb TimeRefLvl R
20111<Tempo Flag>
2110018600Rvb TimeRefDly R
22501930Rvb TimeEkoFbk L
2311<Tempo Flag>
2410020600Rvb TimeEkoDly L
25502130Rvb TimeEkoFbk R
2611<Tempo Flag>
2710022 600Rvb TimeEkoDly R
287023 100Rvb TimePstMix
2911<Tempo Flag>
30110241365Rvb TimePstDly L
3111<Tempo Flag>
32110251365Rvb TimePstDly R
337026100Rvb TimeGldResp
34110271365Rvb TimeGldRange
358028144RvbDesigSize
367029100RvbDesignDiffusion
377030100RvbDesigAttack
38603150RvbDesignSpin
3910321RvbDesignLink
4010033720RvbDesignRvb Width
41703480RvbDesignRvb In
42403515RvbDesignRvb Out
43703680LevelsMaster
448037160LevelsVoice1
458038160LevelsVoice2
468039160LevelsVoice3
478040160LevelsVoice4
488041200DelayTimeMaster
497042100DelayTimeGldResp
50110431365DelayTimeGldRange
5110441DelayTimeClear
5211<Tempo Flag>
53110451365DelayTimeVoice1
5411<Tempo Flag>
55110461365DelayTimeVoice2
5611<Tempo Flag>
57110471365DelayTimeVoice3
5811<Tempo Flag>
59110481365DelayTimeVoice4
607049100FeedbackMaster
618050200FeedbackVoice1
628051200FeedbackVoice2
638052200FeedbackVoice3
Near the top of the list you will find the Rvb Time Pre Delay field. Note that it is preceded by a <Tempo
Flag> indicator bit field. If the value of that indicator bit is 0, then contents of the 10-bit field set aside for
the Rvb Time Pre Delay value will control the time of the desired delay for that parameter. If the <Tempo
Flag> field was a 1, the contents of the 10-bit field for Rvb Time Pre Delay would contain tempo information
indicating the echoes/beat ratio to be used (in combination with the actual tempo) to calculate the delay
time for that parameter.
The Rvb Time Pre Delay field also illustrates a subtlety in the bit size of these fields. It was stated earlier
that PCM 80 effect control data fields are words from 1-16 bits in length utilizing the minimum number for
bits necessary to represent the full range of the field. If the range of Pre Delay is 0-465, which can be
represented in 9 bits, why are there 10 bits set aside for this parameter? It is precisely because of tempo
that 10 bits are reserved. The tempo information fits into 10 bits. The most significant 5 bits contain the
echoes count, 1-24 (0x18), and the least significant 5 bits contain the beat count, also 1-24 (0x18). All
parameters that can be assigned in tempo form will have a minimum count of 10 bits reserved, regardless
of the range of the parameter in standard form.
23
PCM 80 MIDI Implementation DetailsLexicon
Dest List ID and Dest List Number
The Patch Information Block has the following format:
BitsContents
7Patch Source Value
1Destination Patchable Parameter List ID Value
8Destination Patchable Parameter Number Value
4Count of Patch Points Value
You will notice that the Plate Algorithm Patchable Parameter Information list contains columns Dest List
ID and Dest Number for all the non-Tempo fields. The values in these columns are the exact values used
in the Patching Information to select the Destination Patchable Parameter for the patch.
Looking over the Patchable Parameter Information for all the algorithms (see Appendix.) you begin to
notice the pattern that all the algorithm edit matrix parameters before the Modulation parameters are of
Dest List ID 0, and that all the Modulation parameters are of Dest List ID 1. Why did we make this seemingly
annoying distinction instead of just having one long list of patchable parameters, sequenced 0-73? The
Modulation row is identical in every PCM 80 algorithm. It would have taken up a lot of space to duplicate
all the control information for all those parameters ten times, so we combined “algorithm specific” and
“general” patchable parameters in order to eliminate needless duplication in the software.
Patching a Tempo
Patching a parameter that can be in Tempo form has some subtle details which are best pointed out by
comparing four examples:
Patching a short delay time parameter to milliseconds.
Patching the same parameter to tempo.
Patching a long delay time parameter to milliseconds.
Patching the same parameter to tempo.
The reason for this lengthy example session will become very clear if you follow it through.
Patching a short delay time parameter to milliseconds
Here again, a few lines from the Plate Algorithm Patchable Parameter Information list.
DestDest
SeqBitsList IDNumberRangeParameter
14 11<Tempo Flag>
1510014465Rvb TimePre Delay
The range 0-465 in Rvb Time Pre Delay for the Plate Algorithm represents the value 0-930 milliseconds.
Each increment is 2 milliseconds.
Recall the format of the beginning of a Patch Information Block.
BitsContents
7Patch Source Value
1Destination Patchable Parameter List ID Value
8Destination Patchable Parameter Number Value
4Count of Patch Points Value
24
Lexicon
PCM 80 MIDI Implementation Details
We want to patch to the Rvb Time Pre Delay. The Tempo Flag bit field preceding the Rvb Time Pre Delay
parameter field in the Patchable Parameter Information list is assigned a 0 to indicate that the Pre Delay
parameter is in standard form. In the Patch Information Block, we assign the Destination Patchable
Parameter List ID Value to 0 and the Destination Patchable Parameter Number Value to 14 (0x0c). We
want two points, so we put a 2 in the Count of Patch Points Value.
Therefore, the Patch Information Block should be completed with the following 4 fields.
BitsContents
7First Patch Point Value (0 through 127)
10First Destination Patchable Parameter Value
7Second Patch Point Value (0 through 127)
10Second Destination Patchable Parameter Value
We want to patch a source point value of 0 to 0 milliseconds and a source point value of 100-500
milliseconds.
The first 7-bit field will contain a 0 to indicate point value 0. The first 10-bit field will contain a 0 to indicate
0 milliseconds. The second 7-bit field will contain 0x64 to indicate point value 100. The second 10-bit field
will contain 0xfa (250 decimal) to indicate 500 milliseconds.
Patching a short delay time parameter to Tempo
We want to patch to the Rvb Time Pre Delay again. The Tempo Flag bit field preceding the Rvb Time Pre
Delay parameter field in the Patchable Parameter Information list is assigned a 1 to indicate that the Pre
Delay parameter is in Tempo form. Down in the Patch Information Block, we put a 0 in the Destination
Patchable Parameter List ID, and a 14 (0x0c) in the Destination Patchable Parameter Number. We want
two points again, so we put a 2 in the Count of Patch Points.
Again the Patch Information Block should be completed with the following 4 fields.
BitsContents
7First Patch Point Value (0 through 127)
10First Destination Patchable Parameter Value
7Second Patch Point Value (0 through 127)
10Second Destination Patchable Parameter Value
We want to patch a source point value of 0 to 2 echoes/beat and a source point value of 10 to 4 echoes/
5 beats.
The first 7-bit field will contain a 0 to indicate point value 0. The first 10-bit field will contain an 0x041 to
indicate 2 echoes/beat. (Go binary for a minute. 10 bits, two 5-bit fields. The first 5 bits contains a decimal
2, which would be 00010 binary. The second 5 bits contains a decimal 1, which would be 00001 binary.
Put it together: 0001000001 binary = 0x041 hex.) The second 7-bit field will contain 0x0a to indicate point
value 10. The second 10-bit field will contain 0x0a4 to indicate 5 echoes/4 beats. (5 decimal = 00101
binary, 4 decimal = 00100 binary. 0010100100 binary = 0x0a4 hex.)
Note that this implies that you MUST know the state of the Tempo Flag bit field back in the Patchable
Parameter Information when you are assigning parameter values in a patch.
25
PCM 80 MIDI Implementation DetailsLexicon
Patching a long delay time parameter to milliseconds
Here is some information from the Glide>Hall Algorithm Patchable Parameter Information list, found
earlier in this document.
DestDest
SeqBitsList IDNumberRangeParameter
5211<Tempo Flag>
531604942325DelayTimeVoice1
Note: The range 0-42325 in DelayTime Voice1 for the Glide>Hall Algorithm represents the value 0-42325
milliseconds. Each increment is 1 millisecond. -(Be aware that you can only ACCESS 42.325 seconds
of audio when you have 4 Meg of audio memory installed. -The box is shipped with enough memory to
access 2645 milliseconds).
We want to patch to the DelayTime Voice1. The Tempo Flag field bit preceding the DelayTime Voice1
parameter field in the Patchable Parameter Information list is assigned a 0 to indicate that the Delaytime
Voice1 parameter is in standard form. Down in the Patch Information Block, we put a 0 in the Destination
Patchable Parameter List ID, and a 49 (0x31) in the Destination Patchable Parameter Number. We want
two points, so we put a 2 in the Count of Patch Points.
The Patch Information Block should be completed with the following 4 fields.
BitsContents
7First Patch Point Value (0 through 127)
16First Destination Patchable Parameter Value
7Second Patch Point Value (0 through 127)
16Second Destination Patchable Parameter Value
We want to patch a source point value of 0 to 0 milliseconds and a source point value of 127 to 1270
milliseconds.
The first 7-bit field will contain a 0 to indicate point value 0. The first 16-bit field will contain a 0 to indicate
0 milliseconds. The second 7-bit field will contain 0x7f to indicate point value 127. The second 16-bit field
will contain 0x04f6 (1270 decimal) to indicate 1270 milliseconds.
26
Lexicon
PCM 80 MIDI Implementation Details
Patching a long delay time parameter to Tempo
We want to patch to the DelayTime Voice1 again. The Tempo Flag field bit preceding the DelayTime
Voice1 parameter field in the Patchable Parameter Information list is assigned a 1 to indicate that the
parameter is in Tempo form. Down in the patching we put a 0 in the Destination Patchable Parameter List
ID, and a 49 (0x31) in the Destination Patchable Parameter Number. We want two points again, so we
put a 2 in the Count of Patch Points.
The Patch Information Block should be completed with the following 4 fields.
BitsContents
7First Patch Point Value (0 through 127)
10First Destination Patchable Parameter Value
7Second Patch Point Value (0 through 127)
10Second Destination Patchable Parameter Value
STOP RIGHT THERE. Look at the count of bits on those four parameters. Notice that instead of putting
16 bits (the maximum number of bits for the DelayTime Voice1 Parameter in the Glide>Hall algorithm),
we only put TEN bits. This is intentional, and is the reason these four examples are so explicit.
When the Tempo Flag field bit is assigned to 1 for a parameter, and the parameter is the destination of
a patch, the bit count for the parameter in the patching block is always 10 bits, even though the bit count
back in the Patchable Parameter Information may have been greater than 10 bits, as in this example.
Finishing off this example...
We want to patch a source point value of 0 to 10 echoes/3 beats and a source point value of 127 to 3
echoes/10 beats.
The first 7-bit field will contain a 0 to indicate point value 0. The first 10-bit field will contain an 0x143 to
indicate 10 echoes/3 beats. (10 decimal=01010 binary, 3 decimal=00011 binary. 0101000011
binary=0x143 hex.) The second 7-bit field will contain 0x7f to indicate point value 127. The second 10bit field will contain 0x0a4 to indicate 5 echoes/4 beats. (0001101010 binary=0x06a hex.)
27
PCM 80 MIDI Implementation DetailsLexicon
Parsing Prime Blue
The first effect preset register in the PCM80 is Prime Blue. A hex dump of the 435-byte effect register for
Prime Blue follows:
The number of valid bytes 0x00d2 tells us where the zero padding begins. The algorithm id 0x07 tells us
it is Chorus+Rvb. The last edit matrix position 0xf0 says Soft Row Slot 0. The name of register (50 72
69 6d 65 20 42 6c 75 65 20 20) spells "Prime Blue ". The name of the ADJUST knob (45 66
78 2f 52 76 62 20 58) spells "Efx/Rvb X".
The remaining data in the Prime Blue register is the bitpack information, as follows:
Conveniently, the first 10 bytes of the bitpack information is 10 8-bit fields for the 10 soft row positions.
Therefore, 00 03 05 11 13 14 20 50 80 85 tells us that the 10 soft row parameters are taken from
the following Algorithm Edit Matrix positions:
0.0Controls Mix
0.3Controls High Cut
0.5Controls FX Width
1.1RvbTime Mid Rt
1.3RvbTime Rt HC
1.4RvbTime Pre Delay
2.0RvbDesign Size
5.0Chorus Mstr
8.0MOD:LFO
8.5MOD:Sw 1
Rather than detailing parsing of the remaining 1400 bits of the bitpack information, we will detail the
parsing of the first few fields and then give an annotated dump of the entire Prime Blue register.
The first six bytes immediately following the soft row assignments are:
The first field after the soft row assignments is from the unpatchable parameter information. It is Tempo
Rate and is 9 bits. To get the value of Tempo Rate we take the entire first byte (0010 1001) and the least
significant bit of the next byte (0) to get 0 0010 1001, a decimal value of 41 which means a tempo rate
of 81 BPM.
The next field in the unpatchable parameter information is AR Env T Lvl and it is 7 bits. The next 7 bits
from the bitpack field are 0000 000, a decimal value of 0 which means AR Env T Lvl of Threshold 0.
ControlsMix100% Wet
ControlsFX ADJUST +0 dB
Controls InLvl LFull
ControlsInLvl RFull
ControlsInPan L50 L
ControlsInPan R50 R
ControlsHigh Cut12.00 kHz
ControlsFX Mix51% Reverb
ControlsFX Width+45 STEREO
Rvb TimeLow Rt1.2X
Rvb TimeMid Rt1.60 sec
Rvb TimeCrossover525 Hz
Rvb TimeRt HC5.18 kHz
Rvb TimePre Delay12: 1 Echo:Beat
Rvb TimeRefLvl L-14.5 dB
Rvb TimeRefDly L 12:1 Echo:Beat
Rvb TimeRefLvl R-14.5 dB
Rvb TimeRefDly R8: 1 Echo:Beat
Rvb TimeEkoFbk L+0%
Rvb TimeEkoDly L0 ms
Rvb TimeEkoFbk R+0%
Rvb TimeEkoDly R0 ms
RvbDesignSize49.0 Meters
RvbDesignDiffusion82%
RvbDesignAttack27
RvbDesignSpin40%
RvbDesignLinkOn
RvbDesignRvb OutFull
LevelsMaster+0 dB
LevelsVoice1+4 dB
LevelsVoice2-8 dB
LevelsVoice3-2 dB
LevelsVoice4-8 dB
LevelsVoice5-3 dB
LevelsVoice6-2 dB
DelayTimeMaster100%
DelayTimeGldResp50
DelayTimeGldRange0 ms
DelayTimeClearOff
DelayTimeVoice119 ms
DelayTimeVoice219:20 Echo:Beat
DelayTimeVoice39 ms
DelayTimeVoice4 9:19 Echo:Beat
DelayTimeVoice511 ms
DelayTimeVoice613 ms
ChorusMstDepth93%
ChorusMstRate97%
ChorusV1 Depth20 ms
ChorusV1 Rate2.10 Hz
ChorusV2 Depth27 ms
ChorusV2 Rate1.35 Hz
ChorusV3 Depth18 ms
ChorusV3 Rate2.05 Hz
ChorusV4 Depth28 ms
ChorusV4 Rate1.15 Hz
PCM 80 MIDI Implementation Details
31
PCM 80 MIDI Implementation DetailsLexicon
ChorusV5 Depth12 ms
ChorusV5 Rate2.05 Hz
ChorusV6 Depth20 ms
ChorusV6 Rate1.90 Hz
FeedbackMaster100%
FeedbackVoice1-13%
FeedbackVoice2+29%
FeedbackVoice3-13%
FeedbackVoice4+29%
FeedbackVoice5-15%
FeedbackVoice6-11%
PanningMasterC
PanningVoice150 L
PanningVoice228 L
PanningVoice325 L
PanningVoice450 R
PanningVoice550 R
PanningVoice625 R
MOD:LFORate0.33 Hz
MOD:LFOShapeSine
MOD:LFOP Width50%
MOD:LFODepth00%
MOD:AR EnvAttack0 ms
MOD:AR EnvRelease0 ms
MOD:AR EnvModeRetrigger
MOD:Env LRelease980 ms
MOD:Env RRelease0 ms
MOD:Sw 1Rate1: 6 Cycl:Beat
MOD:Sw 1P Width50%
MOD:Sw 1ModeRamp
MOD:Sw 2Rate1: 8 Cycl:Beat
MOD:Sw 2P Width50%
MOD:Sw 2ModeRamp
Patch 0Source Int LFODest Panning Voice2
Patch 1Source Int LFODest Panning Voice4
Patch 2Source Int ADJUSTDest Controls FX Mix
Patch 3Source Int FootPedalDest Controls FX Width
Patch 4Source Int ADJUSTDest Levels Voice2
Patch 5Source Int ADJUSTDest Levels Voice4
Patch 6Source Int ADJUSTDest Feedback Voice2
Patch 7Source Int ADJUSTDest Feedback Voice4
Patch 8Source Int Sw 1Dest Panning Voice3
Patch 9Source Int Sw 1Dest Panning Voice6
0to 50 L
127to 50 R
0to 50 R
127to 50 L
0to 0% Reverb
110to 93% Reverb
127to 100% Reverb
0to +45 STEREO
127to +0 MONO
0to -47 dB
32to -8 dB
127to -8 dB
0to -47 dB
32to -8 dB
127to -8 dB
0to +0%
16to +9%
48to +33%
127to +33%
0to +0%
16to +9%
48to +33%
27to +33%
0to 50 L
127to 50 R
0to 50 R
127to 50 L
32
Lexicon
Summary of Effect Register Format
Nibbleized data bytes (872 bytes)
Effect Register (435 bytes)
|Count of valid bytes (n) in the register (2 bytes)
|Algorithm Id (1 byte)
|Position in Edit Matrix (1 byte)
|Register Name (12 ASCII bytes)
|ADJUST Knob Name (9 ASCII bytes)
|Bitpacked Effect Control Data Groups (variable bytes)
|:Ten Soft Row Assignments
|:Soft Row Slot Assignment Value
|:Unpatchable Parameter Information
|:Edit/Tempo Matrix Parameter Values
|:ADJUST Knob Initial Value
|:Patchable Parameter Information
|:Edit Matrix Parameter Values
|:Edit Matrix Parameter Tempo Flag Values
|:Patching Information
|:Ten Patch Information Blocks
|:Patch Validity Value
|:Patch Header
|:Patch Source Value
|:Destination Patchable Parameter List ID Value
|:Destination Patchable Parameter Number Value
|:Count of Patch Points Value
|:Zero to Eight Patch Points
|:Patch Point Value
|:Patch Parameter Value
|Bitpack Zero Fill (needed to pad to 410 bytes)
Checksum (1 byte)
To elliminate excessive repetition unpatchable and patchable parameters are given “range decode”
numbers. These numbers can be used to reference this list for the key to decoding the parameter in its
useful range. For example, in the Plate Algorithm Patchable Parameters, the Feedback Voice1 (seq 61)
has a Range Decode of 34. Looking through this section you will find that 34 indicates that this always
refers to a range 200 parameter and that the values 0-200 translate to -100% to 0% to 100%, inclusive,
for a total of 201 values.
Range Decode 0
Null. This is a catchall for parameter fields that have no display, or for which a range decode is
meaningless. All Tempo Flags are given this designation.
Range Decode 1
Tempo. The value in the parameter represents a tempo. Add 40 to the value toget the tempo in BPM.
Range Decode 2
Threshold. The value will be displayed numerically, with the word “Threshold” preceding it.
Range Decode 3
Patch Source. The value is used to look up the name of the Patch Source. See Patch Source List.
Range Decode 4
Tap Duration. The value is used as a lookup to the following list of tap durations.
Width. The range (which is always 720) is display as integer values from -360 through 0 to +360 with the
following additional annotation at the given display value points.
Display ValueAnnotation
-360, 0, 360MONO
-315 and 45STEREO
-270 and 90L-R, R-L
-225 and 135R, L INV
-180 and 180MONO INV
-135 and 225STEREO INV
-90 and 270R-L, L-R
-45 and 315R, L
Range Decode 15
Low Rt. The value is used as a lookup to the valid low reverb time multiplier.
Mid Rt. The value to display translation for Range Decode 16 Mid Rt (and for Range Decode 29 Spread)
is not straightforward because it is dependent on the values of the RvbDesign Link and RvbDesign Size
parameters.
First, Mid Rt always has a range of 0-63. The value is used as a lookup to the following table of millisecond
assignments:
If the value of the RvbDesign Link parameter is Off, then the displayed Mid Rt is that millisecond value
rounded up by 50 milliseconds. For example: 3588 will display as 3.63 seconds. If the RvbDesign Link
parameter is On, then the Mid Rt value is scaled by the following integer math formula:
(((RvbDesign Size value + 16)/16) * Mid Rt milliseconds)/10
(Round up by 50 ms as before).
Example: With the Plate reverb loaded (from Plate, Chorus+Rvb, Res1>Plate, or Res2>Plate) and
RvbDesign Link is assigned to On. RvbDesign Size parameter has a value of 0 (which is 4.0 meters) and
RvbTime Mid Rt is has a value of 63 which looks up as 65393 milliseconds. Scaled Mid Rt = (((0 + 16)/
16) * 65393)/10 = 6539 milliseconds. Displayed Mid Rt = 6.58 seconds.
A few more brief examples:
Rvb Time Inverse algorithm slopes. The parameter is always range 32 and the values 0-32 translate to
the display -64% through 0% to +64% in increments of 4%.
Range Decode 20
Off/On. The values 0 and 1 are displayed as “Off” and “On” respectively.
Range Decode 21
The value represents time in increments of 2 milliseconds.
51
PCM 80 MIDI Implementation DetailsLexicon
Range Decode 22
The value is used as a lookup to the following valid gain assignments.
The value represents time in increments of 1 millisecond.
Range Decode 25
Simple. The value is displayed without units, displacement or multiplier.
Range Decode 26
Room Size. The value represents a reverberation room size. 0 indicates the smallest room size which is
4.0 meters. Each successive value is an increment of 0.5 meters.
Range Decode 27
Duration. The value represents a time starting at 140 milliseconds with increments of 5 milliseconds.
Range Decode 28
The value represents a percent value in increments of 2%.
Range Decode 29
Spread. The value to display translation for Spread is not straightforward because it is dependent on the
values of the RvbDesign Link and RvbDesign Size parameters. (Spread is only found in the Chamber and
Infinite reverbs, therefore in the three algorithms: Chamber, Infinite and M-Band+Rvb).
Spread always has a range of 0-255. The value is used directly. If the value of the RvbDesign Link
parameter is Off, then the displayed Spread is the value 0-255. If the RvbDesign Link parameter is On,
then the Spread value is scaled by the following integer math formula:
((RvbDesign Size value + 16) * RvbDesign Spread value)/160
Pitch assignement. The parameter is always 0-127, and maps to note assignments C0-G10.
Range Decode 46
Pitch tuning. The parameter always has a range of 200 and maps to the A440 tuning frequencies 430.0-
450.0 Hz in 0.1 Hz increments.
Range Decode 47
Pitch Key. The parameter always has a range 0-11 which map to a key based on the 12 diatonic notes
starting at C, C#/Db, etc. up to B.
Range Decode 48
Pitch scale. The value is used as a lookup to the following scale assignments:
Major, Harmonic
Range Decode 49
Pitch root. The parameter always has a range of 0 through 6 and is displayed as 1 through 7.
Range Decode 50
Pitch rule. The value is used as a lookup to the following harmonization rule assignments:
Round Down, Round Up, Shift Down, Shift Up
Range Decode 51
Pitch intervals. The parameter always has a range of 0-70. The values map to intervals from 5 octaves
down to 5 octaves up (7 notes/octave plus unison = 71 values). Without listing the precise text for all 71
positions, the form of the display can be derived from the following examples: