"Some people don't really seem to know what they're doing with that spec"
lol yes that´s true.
today much more than ever......
"The real fun comes with how to properly send SysEx messages to one or all ports."
XG Levels and the sending of SysEX to different "port" devises are spect.
XG Level 1 16 Parts(Channels) 1 Port
XG Level 2 32 Parts, 2 Ports
XG Level 3 64 Parts (Channels) 4 Port (Devises)
One example for a correct SYSEX string (in an MIDI File) to XG Level 1 Devises with only 16ch one port
Reverb Send:
F0,43,10,4C,08,NN,13,XX,F7
NN= Part No(Channel ) 0x0-0xF) 0-15
XX=Value (Data Range)
Reverb Send to Channel 1 Port 1 Value 64:
F0,43,10,4C,08,01,13,40,F7
And the same if the SYSEX should adress an XG Level 2 Devise on Part 17= Port 2/Channel 1 if the SYSEX String is correct in the XG MIDI File!!
Reverb Send to Channel 1 Port 2 Value 64:
F0,43,10,4C,08,10,13,40,F7
The range for NN in all possible SYSEX Messages for XG Level 2 is 0-31(Channel) instead of 0-15(Channel) for XG Level 1 and
0-63(Channel) if the devise is XG Level 3 compatible.
For now if XMplay Bass Midi has 2 Devises(Ports) it could be the same like XG Level 2 gear..
So with XG SYSEX params i would -with your really great BassMIDI plugins- act like the specs and simply ignore 0x21 or 0x9 if this adress maybe Port 2 and the sysex in that track adress Port 1.
Of course as an example....
For XG no need to send SYSEX to all ports. But i am not such a great DEV like you, guys...
I am simply only an old german musican with a bad english.
Maybe to much Jever in my life.
EDIT:
And for GM/GS general SYSEX to spez. port, I would evaluate the DEVICE ID.
0x7F Device ID (Broadcast) to all ports
0x01 Device ID Address Bass Midi Device 1
0x02 Device ID Address Bass Midi Device 2
...
...
That would be completely within specification.
Also for XG general..
EDIT 2
In addition to Rolands GS ,the SYSEX and the SC-88 which has also two ports:
Not so easy to adress the ports as in XG Level 2-3 but near much the the same.
The SYSEX patch part parameter - for example- increase from 0x40-0x4F for "port 1" channel 1-16
to 0x50-0x5F for device 2 channel 1-16(17-32)
if you use only one MIDI IN/OUT.
Like from one MIDI File with 32 channels that splits into two BassMIDI Ports ....
Of course, just as a note.