14
MZ-2000 MIDI Implementation
4.1.4 Individual Parameter Operations
This section describes parameter operation formats.
IPR Communication Flow
A session consists of an IPC being sent in reply to an IPR request, or an IPC being sent and the
session being terminated with without a request.
When the MZ-2000 receives an IPR, it returns the corresponding parameter IPR.
When the MZ-2000 receives an IPC, it changes the value of the corresponding parameter.
Data Receiver Data Sender
IPR -> Send Request (Optional)
<- IPC Data Transfer
For information about how parameters are actually assigned, see sections 4.2 thorugh 4.11.
IPC/IPR
tt 0100aaaa aaaa = IPC/IPR
d0[0] 00100000 Parameter Modify Message ID = 20H
d0[1] 0000cccc cccc = Cat (Parameter Set Category)
d0[2] 0ttttttt 0TTTTTTT0ttttttt = Type ID
d0[3] 0TTTTTTT
d0[4] 0mmmmmmm 0MMMMMMM0mmmmmmm = Mdev ID
d0[5] 0MMMMMMM
d0[6] 0sssssss 00SSSSSSSsssssss = Section Number
d0[7] 0SSSSSSS
d0[8] 0nnnnnnn 00NNNNNNNnnnnnnn = PS Number
d0[9] 0NNNNNNN
d0[10] 0ppppppp qqPPPPPPPppppppp = Parameter ID
d0[11] 0PPPPPPP
d0[12] 0rbbbbqq bbbb = number of parameter block - 1
One less than the number nested parameter block levels in the parameter
configuration
bbbb==0 is interpreted as one-level parameter block nesting.
This means that at least one parameter must be associated with a param-
eter block.
r = array flag
0...single data
1...array data
Flag indicating whether the data immediately following it is single data
or array data
✩ Parameter block number specification (number of bytes required for parameter blocks)
d1[0] 0iiiiiii 0iiiiiii = block-0 number of parameter
:
d1[bbbb] 0IIIIIII 0IIIIIII = block-bbbb number of parameter
Data indicating the block number of the parameter when parameters are nested in a
parameter set
✩ Section indicating the number of data in a data array and the number of data array numbers
(This data string is not necessary in the case of non-array data.)
d2[0] 0ooooooo
d2[1] 0ppppppp oooooooppppppp = top index number of array to send
(Number of array where transfer starts)
d2[2] 0qqqqqqq qqqqqqq = number of array members to send
(Number of send members in current packet)
In the case of an array that does not fit inside one packet, multiple packets are sent for the length
specified by the top index number.
✩ One data size (number of bits) minus 1
d3[0] 000zzzzz
zzzzz = number of bits - 1
When zzzz + 1 is: The number of data bytes is:
1to 7 1
8to14 2
15 to 21 3
22 to 28 4
29 to 32 5
✩ Following is actual data transfer format, which is added only in the case of IPC
Single Data
When the data size is 29 bits to 32 bits
d4[0] 0xxxxxxx yyyyXXXXXXX....xxxxxxx = Data
:
d4[3] 0XXXXXXX
d4[4] 0000yyyy
When the data size is 22 bits to 28 bits
d4[0] 0xxxxxxx yyyyyyyXXXXXXX....xxxxxxx = Data
:
d4[2] 0XXXXXXX
d4[3] 0yyyyyyy
When the data size is 15 bits to 21 bits
d4[0] 0xxxxxxx yyyyyyyXXXXXXXxxxxxxx = Data
d4[1] 0XXXXXXX
d4[2] 0yyyyyyy
When the data size is 8 bits to 14 bits
d4[0] 0xxxxxxx XXXXXXXxxxxxxx = Data
d4[1] 0XXXXXXX
When the data size is 7 bits or less
d4[0] 0xxxxxxx xxxxxxx = Data
Array Data
When an entire array is transferred, the format is the same as that for single data.
d4[0][0] 0xxxxxxx yyyyyyy....xxxxxxx = Data
:
d4[0][X] 0yyyyyyy
d4[1][0] 0xxxxxxx yyyyyyy....xxxxxxx = Data
:
d4[1][X] 0yyyyyyy
:
:
d4[N][0] 0xxxxxxx yyyyyyy....xxxxxxx = Data
:
d4[N][X] 0yyyyyyy
Notes: N = oooooooppppppp - 1
X = depends on data size - 1
When zzzz + 1 is: The number of data bytes is:
1to 7 0
8to14 1
14 to 21 2
22 to 28 3
29 to 32 4