--- 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.Message
Re: SysEx String Programming / Syntax Help for BCR2000
2013-08-25 by Mark v.d. Berg
Attachments
- No local attachments were found for this message.