Jump to content

about patch programming in sysex


vix
 Share

Recommended Posts

Hi

i just finished my midibox sid (with one slave) and i'd like to create a "patch manager" with Max/MSP.

I read the MIDIbox SID SysEx Implementation and OK it seem to be easy, but i don't understand how to organize the "256 bytes Dump Data" i have to send to define a patch

F0 00 00 7E 46 <device-number> 02 <patch-number> <256 bytes of dump data> F7

      Write a Dump to Patch <patch-number>

So what is the structure of these 256 bytes ?

should i repeat 256 times a "Direct Write of parameter" ?

F0 00 00 7E 46 <device-number> 06 AH AL <value> F7

      Direct Write of parameter (AH = 0..1, AL = 0..7F)

ok, but i don't understand the AH & AL values...

Please help !

???

Link to comment
Share on other sites

Hi Vix,

the structure is defined in sid_sysex_table.inc - here the 128 first SysEx bytes are mapped to the related CCs. The upper 128 bytes are part of the wavetable.

A more readable format can be found in the source code of the JSynthLib MIDIbox SID module, or in the mk_sid_random.pl script

Best Regards, Thorsten.

Link to comment
Share on other sites

i'm woprking on the (big) sysex part of my apps, and i have few questions

i'd like to know which actions or 'sid reply' are used by the missing bytes in the sysex SID implementation.

the fonction of a sysex command seems to be defined by the 7th byte of the message :

a) F0 00 00 7E 46 <device-number> 01 <patch-number> F7

      Request a Dump of Patch <patch-number>

  b) F0 00 00 7E 46 <device-number> 02 <patch-number> <256 bytes of dump data> F7

      Write a Dump to Patch <patch-number>

  c) F0 00 00 7E 46 <device-number> 03 F7

      Request a Dump of the whole Bank (128 patches)

we can see '01' for the 'request dump patch' command, '02' for the 'write dump patch', etc...

so what about the '04', '07', '08', '09', '0A', '0C' ?  ;)

I ask that because i receive sysex command i don't know from the SID, for example if i send "F0 00 00 7E 46 0 0D 03 00 1 F7" for changing the device number from 0 to 1 (i only have 2 sids), the SID send me a PING in return, associated with device 0 :"F0 00 00 7E 46 0 0F F7"

But i have maybe troubles with my hardware, because my main SID receive my sysex commands, (and transmit CC) but don't send anything when i'm changing manually the patch number (with link or not).

My second SID don't apply my commands (and answer me ping!) but send a sysex dump patch each time i change the patch number  ???

Link to comment
Share on other sites

i'd like to know which actions or 'sid reply' are used by the missing bytes in the sysex SID implementation.

An unknown reaction will happen. Propably you won't get any reply at all (the SysEx implementation is very primitive in order to have more memory free for powerful sound features)

I ask that because i receive sysex command i don't know from the SID, for example if i send "F0 00 00 7E 46 0 0D 03 00 1 F7" for changing the device number from 0 to 1 (i only have 2 sids), the SID send me a PING in return, associated with device 0 :"F0 00 00 7E 46 0 0F F7"

This is propably because the AUTO_DEVICE_ID flag in main.asm is set. I added this newbie friendly feature, since people were mostly confused about the MIOS Device ID and the SID Device ID. With AUTO_DEVICE_ID, the SID will automatically get the same ID like MIOS, and - of course - in this mode you are not able to change the ID anymore.

If you really need this, then just set this flag to 0, but on the other hand: I don't know why you want to change it?

But i have maybe troubles with my hardware, because my main SID receive my sysex commands, (and transmit CC) but don't send anything when i'm changing manually the patch number (with link or not).

Thats normal when you are changing the patch number of the master SID (the SysEx is routed internally). It only sends a dump (with the appr. device ID) when you are changing a patch of a slave.

If the dump would be invalid, the SID wouldn't send an acknowledge (0F) at all.

My second SID don't apply my commands (and answer me ping!)

Acknowledge (0F) means, that the command has been regognized and processed. Which command do you mean exactly?

but send a sysex dump patch each time i change the patch number

is your second SID configured as master or slave? It's a slave when the device ID is != 0 (thats also one of those newbie friendly options).

It's interesting thats newbies don't have problems with device IDs anymore since months, but now an expert stumbles over the auto features ;-)

General suggestion: read the main.asm

Best Regards, Thorsten.

Link to comment
Share on other sites

thanks Thorsten !

i see what goes wrong : i'm stupid  :P

i thought that "change device" was a fontion to change the selected SID... so yes, i don't need this feature.

The fact that only the slaves send sysex when patch is changed is a little annoying for me, but i'll find a solution.

is your second SID configured as master or slave? It's a slave when the device ID is != 0

i defined my 2 main.asm like that :

my master core has the device ID 00, with auto device ID set to 1 (so the master SID is device 00)

my slave core has the device ID 01, with auto device ID set to 1 (so the second SID has the device ID 01)

am i wrong ?

Acknowledge (0F) means, that the command has been regognized and processed. Which command do you mean exactly?

well, i try to change the bank (i got 2 chips) on my master and it works, the core reply the good sysex stuff, and the bank changes on the LCD (SID 1)

but when i try to change bank for my SID 2, the LCD don't change and the SID reply the sysex line i sent:

Master SID:

i send F0 00 00 7E 46 0 0B 1 F7 and the SID reply F0 00 00 7E 46 0 0F 1 F7 and the bank change from A to B (SID1)

slave SID :

i send F0 00 00 7E 46 1 0B 1 F7 and the SID reply F0 00 00 7E 46 1 0B 1 F7 and nothing happen...

Link to comment
Share on other sites

slave SID :

i send F0 00 00 7E 46 1 0B 1 F7 and the SID reply F0 00 00 7E 46 1 0B 1 F7 and nothing happen...

nothing happens, because there is propably no BankStick connected to the slave SID? (and this is the normal case, since only the master should be stuffed with a BankStick)

Best Regards, Thorsten.

Link to comment
Share on other sites

Thanks again TK

exact ! i have 2 sticks on the master, none on the slave.

so if the banksticks are plugged to the master, the SID 2 can use a patch from these banksticks ?

in fact, i don't have to care about the SID 2 for a patch manager software ..? only the master is usefull ??

Link to comment
Share on other sites

You could provide an option which allows to update the single patch of a slave directly. This could make sense on stereo sounds to improve fineadjusting without a control surface.

Sidenote: the master sends a specific patch from a specific bankstick to the slave with "Bn 00 <bank> Cn <patch>", where n is the MIDI channel to which the slave has been assigned. I know, that this is proplematic if two or more cores are assigned to the same MIDI channel, but it's maybe worth to mention it.

Best Regards, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...