Roland MC-303 Checksum in SXformat

KevinMcCallister's icon

Hey Guys–

Several months ago I asked you guys to help on a DX7's sysex formatting. The help I received was incredible.

Now I'm here again, with another sysex midi implementation question. I've got this old Roland MC-303 whose sysex I'd love to fiddle with. After perusing the manual, it seems that there are sound parameters you can control via sysex that aren't accessible on the interface.

The problem: I've never worked with checksums before.

The DX7 sysex messages were shorter (like 7 bytes or something). The sysex messages on The Roland are typically longer, including the checksum, for instance:

| F0 41 10 00 03 12 | 00 40 18 02 | 07 | 1F | F7 |
Header | Address | Data | Chksum | End

In the sxformat example in max, the example message seems to be for a DX7. The checksum on the MC-303 adds the address and data together, and subtracts it from 80(hex). How do you write a function that calculates this kind of message?

In short, I just wanna be able to fiddle with sysex parameters through max via a midi controller.

My apologies if this has been answered elsewhere; I was unable to find anything particularly specific to this question.

Thank you!

avantronica's icon

it's spelled out here on the 1st google hit !
(i can see you've maybe even been there)
http://www.synthman.com/roland/support/supplementalnotes/SUPNOTES/MC303MID.html
you should do your maths in *decimal* anyway as max converts into hex when you send it out
i just create raw midi data so i cannot comment on using sxformat
so your sysex strings go to [midiout] starting with 240[0xF0] and ending with 247[0xF7]

Max Patch
Copy patch and select New From Clipboard in Max.

i've done the following as an investment in your sharing the 'proceeds' here when you're done, hope it helps

KevinMcCallister's icon

Um, wow? Thanks, a lot!

Since there are a few objects here that I've never used, it'll take a bit of messing around to wrap my head around this well organized, good-lookin' reverb macro example that you've provided. Thank you!

Yes, I've been to that site; it's a good resource. It seems to be, more or less, a transcription of some of the MC-303 documentation.

Question: You know in your example how you provided a drop down menu with the various reverb options in it? I am guessing that is sending a value from 0 - 7? What if the particular sysex parameter that you want to control could take a value from 0 - 127? Could you just replace the drop down menu with a number box?

avantronica's icon

yep - the example on the left (it virtually duplicates the guts of template patcher) does just that with a value limited to 7, just change that value to 127 ! (also change the parameter address list ! e.g. Reverb_Send for Part_1 is 00 40 01 22, the available range is 0-127 ) (00 40 02 22 for Part 2 and so on)

the example i provided is an overly detailed way to do the formatting task - i just thought it'd help you see what you need to do more easily and establish how to assemble the other synth parameters - if it's clear there's a better chance you'll knock up something helpful to give life to this currently unloved device on my shelf !!

do post back if you assemble something you're happy to share

it's an unusually deep midi implementation though

i'm excited because it seems to allow non-western tunings : - ]

KevinMcCallister's icon

Yeah I am really surprised at how deep the midi implementation goes. Pretty surprising as this thing generally gets written off as a mere rompler. Can't say why exactly, but I love this machine.

I can't wait to report back!

Thanks so much.

mda's icon

Hi Kevin and Avantronica!

Bit of a bump....

I've taken this on board, with the intention of converting to a M4L once completed (Sysex will be smuggled to an external).

Anyhow, Checksums...

I'm trying LFO Waveform for my first sysex (I did these years ago on my Kenton KontrolFreak).

Max Patch
Copy patch and select New From Clipboard in Max.

Does this look correct?

With your patch (further up the page) I had some negative numbers in the checksum, so I've broken it down. At one point I had a Checksum greater than 127, can you have Checksums greater than 127?

I'm doing this without the 303 connected at the moment, as I'm doing it from bed at the moment!

Thanks,

mda's icon

sysex attached.

Screen-Shot-2015-08-24-at-01.52.19.png
png
avantronica's icon

i'll have a look to refresh myself - can you provide more info on exactly how/where an issue arose . cheers

mda's icon

Hi There,

Thanks for the input. I've gone back to your patch now and changed the sysex from the reverb macro to the lfo waveform and don't seem to get the errors...

With the sysex for lfo waveform: [00] [40] [midi chan] [39] [waveform 0-5] [checksum] [end] and the formula for calculating the checksum from:

Max Patch
Copy patch and select New From Clipboard in Max.

have I done this correctly here?:

I still haven't connected the 303, working on this thoeretically at the moment.

Thanks,

Miles
www.bugcompass.co.uk

Guy's icon

Hi Guys, Had the same issue too. I came up with this. Has been working well for me.

TSt's icon

@avantronica

perhaps somebody has a suggestion, but these SysEx-strings from the jd-xi (Roland) seems not correct (?)

the strings were received from a former ver. of a "jd-xi editor" (this was made with Ctrlr) now selling for $42 (memorysplice)

but if I try to send these strings back to the editor, nothing happens

1. Roland jd-xi
eff-par: delay time 0ms:
F0 41 10 00 00 00 0E 12 18 00 06 0C 08 00 00 00 6C F7

delay time max
F0 41 10 00 00 00 0E 12 18 00 06 0C 08 0A 02 08 58 F7

delay feedb. min
F0 41 10 00 00 00 0E 12 18 00 06 18 08 00 00 00 60 F7

delay feedb. max
F0 41 10 00 00 00 0E 12 18 00 06 18 08 00 06 02 58 F7

thanks for help and examples

TSt

Guy's icon

Not sure i fully understand what your trying to acheive but I guess the editor isn't configured to receive single sysex strings. I would have thought the editor would receive a bulk data set message from the unit to update the GUI. Maybe also the editor will update the necessary messages sent from the physical controllers on the unit wether they be CC or sysex.

avantronica's icon

@TST, also a bit confused about the role of the editor in your issue. I'm not familiar with the JD, but it likely has read across in terms of broad message formation and calculation of checksum etc

@MDA and anyone interested
Yep, good catch, i looked at the Roland docs again and the check i'd put in place to catch high checksums above 128 (80H) just had the [% 128] the WRONG side of the expression - you've dropped it in the correct position

In my example above it's in the wrong position (so swap order [% 128] with [expr(128 - $i1)] )

cheers