summarized from Matrix-6 / Matrix-6r MIDI spec, 5/87, for 2.13 ROM. -eub
notation:
0xNN represents a hex byte. As in C, bitwise-and is "&",
shift-left is "<<", and shift-right is ">>". Shifts are
unsigned.
sysex format:
0xF0
sysex start
0x10
Oberheim ID
dd
Device ID: 0x02 for M-12 or Xpander, 0x06 for M-6.
op
any of the opcodes described below.
data
the corresponding data, if any.
0xF7
sysex end (EOX)
The high bit of each byte is zero, reserved as the MIDI status bit.
Wait at least 20 ms between sysex operations.
select quick patch edit
0x05
opcode
Send this before changing parameters through remote editing.
"This operation selects the Quick mode of the Patch Edit function.
The M-6 must be in Patch Edit mode in order to act upon parameter
change commands."
change parameter
0x06
opcode
pp
parameter number, 0-99.
vv
value. may not be negative. (damn!)
If you want to set negative values, you have to send the whole patch,
breaking the sound. I can't imagine why they didn't just use bit 6
as a sign bit.
single patch
0x01
opcode
pp
patch number, 0-99.
xx yy
data, sent nybblewise:
a data byte dd is sent as
xx = dd&0x0F;
yy = dd>>4
cc
checksum:
the sum of the original data bytes dd,
masked with 0x7F.
Here I don't see why they chop up the data bytes; none exceeds 7 bits.