Polaris Sysex
by David Clarke [300831++] <agclarke@istar.ca>The Polaris sysex is essentially a command-language, as noted in the MIDI Implementation Manual (see Polaris manuals).
To send program data you need to send a sysex message to 'open' an object, then 'write' to an object.
Ideally, a .syx file to place a patch would perform 3 steps:
- send a 'create object' message to the Polaris (to create a new, program - if the section is currently empty);
- send a 'open object in write mode' message; and,
- send the program data to the object.
During investigation, it appears that Rev 5 and Rev 9 firmware work differently with these commands. Specifically, it seems that Rev 5 firmware will fail on the first step - i.e., that it doesn't seem that a 'create' will successfully create a new program via MIDI with Rev 5 firmware.
As there are still quite a few units out there that have not been upgraded to Rev 9 firmware, the desire was to create some sysex commands that could work on either firmware release.
Both Rev 5 and Rev 9 can successfully overwrite existing programs. So, to work around the 'create' problem, additional steps can be done to fill any empty programs in a different way.
Specifically, the .syx files here perform 3 main functions:
- take whatever patch is defined in the main program (i.e., instrument 0) and write it to each of the 132 patch locations);
- send a 'open object in write mode' message; and,
- send the program data to the object with a 'write' message.
The data is sent to MIDI channel 1.
In terms of technical details the SYSEX is created as follows:
FOR ProgNo = 1 to 132
/* Can't be guaranteed that the patch exists, but we know that
instrument 0 exists so, use the 'Send Message' capability to
copy instrument 0's data into each of the Polaris' programs.
Send message:
Sssiimmoo
ss = stream number
ii = instrument number
mm = message
oo = operand */
0xF0 /* Start of Sysex */
0x08 /* Fender Manuf. ID */
0x01 /* Channel Number */
0x53 /* "S" for Send Message */
/* Stream number = Instrument = 1E */
0x31 /* ASCII 0x31 = the number "1" */
0x45 /* ASCII 0x45 = the letter "E" */
/* Instrument Number = 0, always
exists */
0x30
0x30
/* Message = 7E = Store Program */
0x37
0x45
/* Operand = program number */
{output 'ProgNo' - prog #}
/* End Sysex */
0xF7
ENDFOR
FOR ProgNo = 1 to 132
/* OPEN */
0xF0 /* Start of Sysex */
0x08 /* Fender Manuf. ID */
0x01 /* Channel Number */
0x4F /* "0" for Open object */
/* 4 digit program number 1 - 132.
In hex, that's 1 - 0x84, so first
two digits always "0" */
0x30 /* "0" for Open object */
0x30 /* "0" for Open object */
{output 'ProgNo' - prog #}
0x30 /* 0x01, odd number = write enable */
0x31
0xF7 /* End Sysex */
/* WRITE */
0xF0 /* Start of Sysex */
0x08 /* Fender Manuf. ID */
0x01 /* Channel Number */
0x57 /* "W" for Write object */
0x32 /* Size of packet = 44 bytes, 0x2C */
0x43
0x30 /* Offset = 0x0 */
0x30
0x30
0x30
{Send 44 bytes of program data}
0xF7 /* End Sysex */
ENDFOR 


