Bc2000 (for the BCF2000 & BCR2000) group photo

Yahoo Groups archive

Bc2000 (for the BCF2000 & BCR2000)

Index last updated: 2026-04-28 23:16 UTC

Message

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> 5) Looks like I don't have this one after all.  When there's a split high val/low val variable with an odd-numbered range, how do you break up the high and low ranges? Example, with range being 211 ("Tempo" parameter in the "System" group):
> 
> High Value:
> high 1 bit
> 
> Low Value
> low 6-0 bit (0-210)
> 
> I know on the 0-255 split variable, it was "00 00 - 01 7F" so that the first range effectively multiplied the second (2 x 128 = 256), but of course an odd number doesn't divide by two evenly.
> 
> At first, I thought I was interpreting it incorrectly, and that 0-210 should just be the range for the low variable.  Then I realized that the maximum range for any one-byte variable is 00-7F.

You're probably right: the manual wrongly suggests that Low Value's seven (available) bits ("low 6-0 bit") could hold 0-210, whereas High Value's extra bit is needed too.

To convert a "normal" byte (with actual data in all 8 bits) to two bytes with the highest bit ("bit 7") being 0 (as required for MinValue and MaxValue in the ini file), you insert a 0 at bit 7 (the most significant (leftmost) bit) of the original byte: thus, the original value at bit 7 is shifted one position to the left, i.e. to bit 8.
This new bit 8 then becomes bit 0 of the "Most Significant Byte" (MSB), and the original bits 0-6 together with the new bit 7 (being 0) become the "Least Significant Byte" (LSB).

So in this case we can calculate MaxValue as follows:

Actual MaxValue:
11010010 (decimal: 210)

Insert 0 at bit 7:
101010010

MSB=00000001 (hex: 01)
LSB=01010010 (hex: 52)

So I think the MinValue - MaxValue section of the parameter definition line should be "00 00 - 01 52".

> 7) What is the best way to set this one up, voice element wave selection:
> 
> High Value
> bit 6-5 mem
> 00 = preset
> 01 = wave card
> 10 = internal
> bit 4-3 card num
> 00 = 1, 01 = 1, 10 = 2
> bit 0 num high
> 
> Low Value
> bit 7-0 num low 7bit
> 
> What I want to do is only use preset waves (internal and wave card waves are very rare, since they require the installation of optional ROM cards or sample-loading RAM), so bit 6-5 should be 00.  The other problem is that the range on the wave number is 1-133, just a few too many to fit into a byte, and of course, some of the most appealing waves (pulse, saw, and triangle) are in the 129-133 range.  
> 
> At first, I was thinking, since I want to use only preset waves, I could just set the hi-val to 00, and then I realized that it's more complicated than that because it's actually specifying bits there, not hi val values directly.

If all bits of "Value High" except bit 0 can be 0, you can apply the same principle as above:

Actual MaxValue:
10000101 (decimal: 133)

Insert 0 at bit 7:
100000101

MSB=00000001 (hex: 01)
LSB=00000101 (hex: 05)

So if MinValue is 1 (as you say), the MinValue - MaxValue section of the parameter definition line should be "00 01 - 01 05".

Hope this helps,
Mark.

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.