Yahoo Groups archive

Casio CZ/ VZ/ FZ - Pro Series

Index last updated: 2026-04-28 22:42 UTC

Thread

VZ SysEx Format

VZ SysEx Format

2014-01-05 by <facebook@...>

Happy new year to all,

I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches.

Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.

Can anyone help me out on the details here?

My idea:
Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.

My progress:
So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).

My need:
Any help on the internal sysex format - especially on the check sum.

Technology:
HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.

Me:
I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)

Any help is appreciated,

cheers,

Pete

(I was in the forum before but lot my ID after a computer crash ;) )

Re: [CZsynth] VZ SysEx Format

2014-01-07 by Lee Borrell

I am currently working on a Csharp program for Synths - the Checksum is an issue that cropped up with the Commodore program that I built what we are re-building in Csharp.
The Yamaha one is give as 'The twos complement of the 7bit sum of all data bytes" in the PSS480 manual.

Since the data is held as nybbles (half bytes) it is these that are used to form the sum  - this is ANDED with 127 to form the '7bit sum' and then subtracted from 128 to get the 2's complement.

As to whether Casio used this in their checksums,I have no idea,but it would be easy to find out by carrying out the above and comparing it with the stored checksum.



________________________________
Show quoted textHide quoted text
 From: "facebook@..." <facebook@...>
To: CZsynth@yahoogroups.com 
Sent: Sunday, 5 January 2014, 21:23
Subject: [CZsynth] VZ SysEx Format
 


  
Happy new year to all,

I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches. 

Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.

Can anyone help me out on the details here?

My idea:
Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.


My progress:
So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).

My need:
Any help on the internal sysex format - especially on the check sum.

Technology: 
HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.

Me:
I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)

Any help is appreciated,

cheers,

Pete

(I was in the forum before but lot my ID after a computer crash ;) )

Re: [CZsynth] VZ SysEx Format

2014-01-29 by José Ángel Morente

Some time ago I posted a C program used to convert from VZ1 to standard SYX files. You may take a look at the checksum routine, maybe it can be helpful:

#include
#include
#include

#define TONES_NO 64;

typedef unsigned char byte;

int main (int argc,char *argv[])
{
char *inputfilestream;
char *outputfilestream;
FILE *inputfile;
FILE *outputfile;

byte tonebuf[336];
byte operbuf[100];

byte syxopen[8]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
};
byte syxdata[6]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
};
byte syxclose[7]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
};

int i,j,checksum=0;

byte buffer[10];

if (argc >= 2) {

inputfilestream = argv[1];
if (argc > 2) {
outputfilestream = argv[2];
} else {
outputfilestream = malloc(255);
strcpy(outputfilestream,inputfilestream);
outputfilestream = strcat(outputfilestream,".syx");
}

inputfile = fopen(inputfilestream,"rb");
outputfile = fopen(outputfilestream, "wb");

//write OPEN and DATA sysx messages
fwrite(syxopen,sizeof(syxopen),1,outputfile);
fwrite(syxdata,sizeof(syxdata),1,outputfile);

//process the patches
for (i=0;i<64;i++) {
fread(tonebuf,sizeof(tonebuf),1,inputfile);
checksum = 0;
for (j=0;j
//update the checksum
checksum -= tonebuf[j];

buffer[1] = tonebuf[j] & 0x0f;
buffer[0] = tonebuf[j] >> 4;
fwrite(buffer,2,1,outputfile);
}
//ignores the bit 7
checksum &= 0x7f;
fwrite(&checksum,1,1,outputfile);

}
//process the operations
for (i=0;i<64;i++) {
fread(operbuf,sizeof(operbuf),1,inputfile);
checksum = 0;
for (j=0;j
//update the checksum
checksum -= operbuf[j];

buffer[1] = operbuf[j] &; 0x0f;
buffer[0] = operbuf[j] >> 4;
fwrite(buffer,2,1,outputfile);
}
//ignores the bit 7
checksum &= 0x7f;
fwrite(&checksum,1,1,outputfile);

}

buffer[0] = 0xf7;
fwrite(buffer,1,1,outputfile);
fwrite(syxclose,sizeof(syxclose),1,outputfile);


fclose(inputfile);
fclose(outputfile);
}
return 0;
}


--

Show quoted textHide quoted text
On Sun, Jan 5, 2014 at 10:23 PM, <facebook@...> wrote:

Happy new year to all,


I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches.

Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.

Can anyone help me out on the details here?

My idea:
Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.

My progress:
So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).

My need:
Any help on the internal sysex format - especially on the check sum.

Technology:
HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.

Me:
I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)

Any help is appreciated,

cheers,

Pete

(I was in the forum before but lot my ID after a computer crash ;) )


Re: [CZsynth] VZ SysEx Format

2014-01-29 by Lee Borrell

Jose,

Can you explain the -= in C, is that subtraction?

It seems your routine is very similar to mine save for the 'twos complement' section - but if you are subtracting rather than adding,perhaps that accounts for it.
I do not know what the VZ checksum should be anyhow - only yamahas.

Is the VZ summing all nybbles and then anding with 7f,or is there something more? 




________________________________
 From: José Ángel Morente <msxjam@...>
To: CZsynth@yahoogroups.com 
Sent: Wednesday, 29 January 2014, 16:18
Subject: Re: [CZsynth] VZ SysEx Format
 


  
Some time ago I posted a C program used to convert from VZ1 to standard SYX files. You may take a look at the checksum routine, maybe it can be helpful:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TONES_NO  64;

typedef unsigned char byte;

int main (int argc,char *argv[])
{
        char *inputfilestream;
        char *outputfilestream;
        FILE *inputfile;
        FILE *outputfile;

        byte tonebuf[336];
        byte operbuf[100];

    byte syxopen[8]={
        0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
    };
    byte syxdata[6]={
        0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
    };
    byte syxclose[7]={
        0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
    };

    int i,j,checksum=0;

        byte buffer[10];

        if (argc >= 2) {

                inputfilestream = argv[1];
                if (argc > 2) {
            outputfilestream = argv[2];
                } else {
            outputfilestream = malloc(255);
            strcpy(outputfilestream,inputfilestream);
            outputfilestream = strcat(outputfilestream,".syx");
                }

                inputfile = fopen(inputfilestream,"rb");
                outputfile = fopen(outputfilestream, "wb");

        //write OPEN and DATA sysx messages
        fwrite(syxopen,sizeof(syxopen),1,outputfile);
        fwrite(syxdata,sizeof(syxdata),1,outputfile);

        //process the patches
        for (i=0;i<64;i++) {
            fread(tonebuf,sizeof(tonebuf),1,inputfile);
            checksum = 0;
            for (j=0;j<sizeof(tonebuf);j++) {
                //update the checksum
                checksum -= tonebuf[j];

                buffer[1] = tonebuf[j] & 0x0f;
                buffer[0] = tonebuf[j] >> 4;
                fwrite(buffer,2,1,outputfile);
            }
            //ignores the bit 7
            checksum &= 0x7f;
            fwrite(&checksum,1,1,outputfile);

        }
        //process the operations
        for (i=0;i<64;i++) {
            fread(operbuf,sizeof(operbuf),1,inputfile);
            checksum = 0;
            for (j=0;j<sizeof(operbuf);j++) {
                //update the checksum
                checksum -= operbuf[j];

                buffer[1] = operbuf[j] & 0x0f;
                buffer[0] = operbuf[j] >> 4;
                fwrite(buffer,2,1,outputfile);
            }
            //ignores the bit 7
            checksum &= 0x7f;
            fwrite(&checksum,1,1,outputfile);

        }

        buffer[0] = 0xf7;
        fwrite(buffer,1,1,outputfile);
        fwrite(syxclose,sizeof(syxclose),1,outputfile);


                fclose(inputfile);
                fclose(outputfile);
        }
        return 0;
}





--
Show quoted textHide quoted text
On Sun, Jan 5, 2014 at 10:23 PM, <facebook@cain-project.com> wrote:

 
>  
>Happy new year to all,
>
>
>I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches. 
>
>
>Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.
>
>
>Can anyone help me out on the details here?
>
>
>My idea:
>Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.
>
>
>
>My progress:
>So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).
>
>
>My need:
>Any help on the internal sysex format - especially on the check sum.
>
>
>Technology: 
>HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.
>
>
>Me:
>I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)
>
>
>Any help is appreciated,
>
>
>cheers,
>
>
>Pete
>
>
>(I was in the forum before but lot my ID after a computer crash ;) )
>
>

Re: [CZsynth] VZ SysEx Format

2014-01-29 by José Ángel Morente

That's right.

The checksum is in fact a 'checksub' :)

It works similar to a two's complement, but I remember (it was some years ago) that the traditional complement caused the checksum to fail in one or two cases (when the sum was 00 or 7F, can't remember for sure).

After a while I realized that substracting the accumulated value (instead of summing) the thing worked perfectly.

Then you must reset the more significant bit. I used for that a AND 7F operation (checksum = checksum & 0x7f)

However, the tricky part is that the VZ sends the data bytes splitted into 2 nibbles, but the checksum is calculated with the whole byte.

In other words, you have to do these steps:


1) Read one byte from sysex

2) Read one byte from sysex, shift 4 bits to left

3) Get the actual data, byte = 1) OR 2)

4) CHECKSUM = CHECKSUM - BYTE

5) goto 1) and repeat 64 times * patch length

6) Take the 7 less significant bits: CHECKSUM = CHECKSUM & 0x7F

7) Store the checksum byte, the sysex closing sequence, 0xF7, etc.



On 29 Jan 2014 17:27, "Lee Borrell" <templarser@...> wrote:

Jose,

Can you explain the -= in C, is that subtraction?

It seems your routine is very similar to mine save for the 'twos complement' section - but if you are subtracting rather than adding,perhaps that accounts for it.
I do not know what the VZ checksum should be anyhow - only yamahas.

Is the VZ summing all nybbles and then anding with 7f,or is there something more?


Show quoted textHide quoted text
From: José Ángel Morente <msxjam@...>
To: CZsynth@yahoogroups.com
Sent: Wednesday, 29 January 2014, 16:18
Subject: Re: [CZsynth] VZ SysEx Format

Some time ago I posted a C program used to convert from VZ1 to standard SYX files. You may take a look at the checksum routine, maybe it can be helpful:

#include
#include
#include

#define TONES_NO 64;

typedef unsigned char byte;

int main (int argc,char *argv[])
{
char *inputfilestream;
char *outputfilestream;
FILE *inputfile;
FILE *outputfile;

byte tonebuf[336];
byte operbuf[100];

byte syxopen[8]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
};
byte syxdata[6]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
};
byte syxclose[7]={
0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
};

int i,j,checksum=0;

byte buffer[10];

if (argc >= 2) {

inputfilestream = argv[1];
if (argc > 2) {
outputfilestream = argv[2];
} else {
outputfilestream = malloc(255);
strcpy(outputfilestream,inputfilestream);
outputfilestream = strcat(outputfilestream,".syx");
}

inputfile = fopen(inputfilestream,"rb");
outputfile = fopen(outputfilestream, "wb");

//write OPEN and DATA sysx messages
fwrite(syxopen,sizeof(syxopen),1,outputfile);
fwrite(syxdata,sizeof(syxdata),1,outputfile);

//process the patches
for (i=0;i<64;i++) {
fread(tonebuf,sizeof(tonebuf),1,inputfile);
checksum = 0;
for (j=0;j
//update the checksum
checksum -= tonebuf[j];

buffer[1] = tonebuf[j] & 0x0f;
buffer[0] = tonebuf[j] >> 4;
fwrite(buffer,2,1,outputfile);
}
//ignores the bit 7
checksum &= 0x7f;
fwrite(&checksum,1,1,outputfile);

}
//process the operations
for (i=0;i<64;i++) {
fread(operbuf,sizeof(operbuf),1,inputfile);
checksum = 0;
for (j=0;j
//update the checksum
checksum -= operbuf[j];

buffer[1] = operbuf[j] & 0x0f;
buffer[0] = operbuf[j] >> 4;
fwrite(buffer,2,1,outputfile);
}
//ignores the bit 7
checksum &= 0x7f;
fwrite(&checksum,1,1,outputfile);

}

buffer[0] = 0xf7;
fwrite(buffer,1,1,outputfile);
fwrite(syxclose,sizeof(syxclose),1,outputfile);


fclose(inputfile);
fclose(outputfile);
}
return 0;
}


--



On Sun, Jan 5, 2014 at 10:23 PM, <facebook@cain-project.com> wrote:
Happy new year to all,

I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches.

Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.

Can anyone help me out on the details here?

My idea:
Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.

My progress:
So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).

My need:
Any help on the internal sysex format - especially on the check sum.

Technology:
HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.

Me:
I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)

Any help is appreciated,

cheers,

Pete

(I was in the forum before but lot my ID after a computer crash ;) )




Re: [CZsynth] VZ SysEx Format

2014-01-30 by Lee Borrell

That's interesting thanks - I have worked on Yamaha checksums which calculate on the nybbles - not the bytes - I will bear what you have said in mind when I come to CZ.




________________________________
 From: José Ángel Morente <msxjam@...>
To: CZsynth@yahoogroups.com 
Sent: Wednesday, 29 January 2014, 22:30
Subject: Re: [CZsynth] VZ SysEx Format
 


  
That's right.
The checksum is in fact a 'checksub'  :)
It works similar to a two's complement, but I remember (it was some years ago) that the traditional complement caused the checksum to fail in one or two cases (when the sum was 00 or 7F, can't remember for sure).
After a while I realized that substracting the accumulated value (instead of summing) the thing worked perfectly.
Then you must reset the more significant bit. I used for that a AND 7F operation   (checksum = checksum & 0x7f)
However, the tricky part is that the VZ sends the data bytes splitted into 2 nibbles, but the checksum is calculated with the whole byte.
In other words, you have to do these steps:

1) Read one byte from sysex

2) Read one byte from sysex, shift 4 bits to left 
3) Get the actual data,  byte = 1) OR 2)
4) CHECKSUM = CHECKSUM - BYTE
5) goto 1) and repeat 64 times * patch length
6) Take the 7 less significant bits: CHECKSUM = CHECKSUM & 0x7F
7) Store the checksum byte, the sysex closing sequence, 0xF7, etc.
Show quoted textHide quoted text
On 29 Jan 2014 17:27, "Lee Borrell" <templarser@...> wrote:

 
>  
>Jose,
>
>Can you explain the -= in C, is that subtraction?
>
>It seems your routine is very similar to mine save for the 'twos complement' section - but if you are subtracting rather than adding,perhaps that accounts for it.
>I do not know what the VZ checksum should be anyhow - only yamahas.
>
>Is the VZ summing all nybbles and then anding with 7f,or is there something more? 
>
>
>
>
>
>
>________________________________
> From: José Ángel Morente <msxjam@...>
>To: CZsynth@yahoogroups.com 
>Sent: Wednesday, 29 January 2014, 16:18
>Subject: Re: [CZsynth] VZ SysEx Format
> 
>
>
>  
>Some time ago I posted a C program used to convert from VZ1 to standard SYX files. You may take a look at the checksum routine, maybe it can be helpful:
>
>
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>
>#define TONES_NO  64;
>
>typedef unsigned char byte;
>
>int main (int argc,char *argv[])
>{
>        char *inputfilestream;
>        char *outputfilestream;
>        FILE *inputfile;
>        FILE *outputfile;
>
>        byte tonebuf[336];
>        byte operbuf[100];
>
>    byte syxopen[8]={
>        0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
>    };
>    byte syxdata[6]={
>        0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
>    };
>    byte syxclose[7]={
>        0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
>    };
>
>    int i,j,checksum=0;
>
>        byte buffer[10];
>
>        if (argc >= 2) {
>
>                inputfilestream = argv[1];
>                if (argc > 2) {
>            outputfilestream = argv[2];
>                } else {
>            outputfilestream = malloc(255);
>            strcpy(outputfilestream,inputfilestream);
>            outputfilestream = strcat(outputfilestream,".syx");
>                }
>
>                inputfile = fopen(inputfilestream,"rb");
>                outputfile = fopen(outputfilestream, "wb");
>
>        //write OPEN and DATA sysx messages
>        fwrite(syxopen,sizeof(syxopen),1,outputfile);
>        fwrite(syxdata,sizeof(syxdata),1,outputfile);
>
>        //process the patches
>        for (i=0;i<64;i++) {
>            fread(tonebuf,sizeof(tonebuf),1,inputfile);
>            checksum = 0;
>            for (j=0;j<sizeof(tonebuf);j++) {
>                //update the checksum
>                checksum -= tonebuf[j];
>
>                buffer[1] = tonebuf[j] & 0x0f;
>                buffer[0] = tonebuf[j] >> 4;
>                fwrite(buffer,2,1,outputfile);
>            }
>            //ignores the bit 7
>            checksum &= 0x7f;
>            fwrite(&checksum,1,1,outputfile);
>
>        }
>        //process the operations
>        for (i=0;i<64;i++) {
>            fread(operbuf,sizeof(operbuf),1,inputfile);
>            checksum = 0;
>            for (j=0;j<sizeof(operbuf);j++) {
>                //update the checksum
>                checksum -= operbuf[j];
>
>                buffer[1] = operbuf[j] & 0x0f;
>                buffer[0] = operbuf[j] >> 4;
>                fwrite(buffer,2,1,outputfile);
>            }
>            //ignores the bit 7
>            checksum &= 0x7f;
>            fwrite(&checksum,1,1,outputfile);
>
>        }
>
>        buffer[0] = 0xf7;
>        fwrite(buffer,1,1,outputfile);
>        fwrite(syxclose,sizeof(syxclose),1,outputfile);
>
>
>                fclose(inputfile);
>                fclose(outputfile);
>        }
>        return 0;
>}
>
>
>
>
>
>--
>
>
>
>
>On Sun, Jan 5, 2014 at 10:23 PM, <facebook@...> wrote:
>
> 
>>  
>>Happy new year to all,
>>
>>
>>I spent some time during the holidays setting up an smal HTML5 based framework which is intented to act as a librarian for the VZ sound patches. 
>>
>>
>>Going through the specs I came over the checksum, which isn't described in detail in the CasioVZ-HohnerHS Sysex Format.pdf.
>>
>>
>>Can anyone help me out on the details here?
>>
>>
>>My idea:
>>Create a little helper to rearrange existing sysex files, which will (in the first step) be consolidated in a new sysex file to be uploaded.
>>
>>
>>
>>My progress:
>>So far I can drag and drop sysex files into the GUI and extract the tone and op names of the banks, also a re-arrangement is possible (from gui side).
>>
>>
>>My need:
>>Any help on the internal sysex format - especially on the check sum.
>>
>>
>>Technology: 
>>HTML5 so anyone could use it. Upload to the VZ would still need an external tool but maybe HTML5 will support that, too in the future.
>>
>>
>>Me:
>>I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, X3R, AN1x, Phm and sonic|core Scope 5)
>>
>>
>>Any help is appreciated,
>>
>>
>>cheers,
>>
>>
>>Pete
>>
>>
>>(I was in the forum before but lot my ID after a computer crash ;) )
>>
>>
>
>
>

Re: [CZsynth] VZ SysEx Format

2014-01-30 by charlie midi gfa

nybbles are bytes
?

charlie


----- Original Message -----
From: "Lee Borrell" <templarser@...>
To: <CZsynth@yahoogroups.com>
Sent: Thursday, January 30, 2014 1:59 PM
Subject: Re: [CZsynth] VZ SysEx Format


That's interesting thanks - I have worked on Yamaha checksums which
calculate on the nybbles - not the bytes - I will bear what you have said in
mind when I come to CZ.




________________________________
 From: José Ángel Morente <msxjam@...>
To: CZsynth@yahoogroups.com
Sent: Wednesday, 29 January 2014, 22:30
Subject: Re: [CZsynth] VZ SysEx Format




That's right.
The checksum is in fact a 'checksub' :)
It works similar to a two's complement, but I remember (it was some years
ago) that the traditional complement caused the checksum to fail in one or
two cases (when the sum was 00 or 7F, can't remember for sure).
After a while I realized that substracting the accumulated value (instead of
summing) the thing worked perfectly.
Then you must reset the more significant bit. I used for that a AND 7F
operation (checksum = checksum & 0x7f)
However, the tricky part is that the VZ sends the data bytes splitted into 2
nibbles, but the checksum is calculated with the whole byte.
In other words, you have to do these steps:

1) Read one byte from sysex

2) Read one byte from sysex, shift 4 bits to left
3) Get the actual data, byte = 1) OR 2)
4) CHECKSUM = CHECKSUM - BYTE
5) goto 1) and repeat 64 times * patch length
6) Take the 7 less significant bits: CHECKSUM = CHECKSUM & 0x7F
7) Store the checksum byte, the sysex closing sequence, 0xF7, etc.
Show quoted textHide quoted text
On 29 Jan 2014 17:27, "Lee Borrell" <templarser@yahoo.co.uk> wrote:


>
>Jose,
>
>Can you explain the -= in C, is that subtraction?
>
>It seems your routine is very similar to mine save for the 'twos
>complement' section - but if you are subtracting rather than adding,perhaps
>that accounts for it.
>I do not know what the VZ checksum should be anyhow - only yamahas.
>
>Is the VZ summing all nybbles and then anding with 7f,or is there something
>more?
>
>
>
>
>
>
>________________________________
> From: José Ángel Morente <msxjam@...>
>To: CZsynth@yahoogroups.com
>Sent: Wednesday, 29 January 2014, 16:18
>Subject: Re: [CZsynth] VZ SysEx Format
>
>
>
>
>Some time ago I posted a C program used to convert from VZ1 to standard SYX
>files. You may take a look at the checksum routine, maybe it can be
>helpful:
>
>
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>
>#define TONES_NO 64;
>
>typedef unsigned char byte;
>
>int main (int argc,char *argv[])
>{
> char *inputfilestream;
> char *outputfilestream;
> FILE *inputfile;
> FILE *outputfile;
>
> byte tonebuf[336];
> byte operbuf[100];
>
> byte syxopen[8]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
> };
> byte syxdata[6]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
> };
> byte syxclose[7]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
> };
>
> int i,j,checksum=0;
>
> byte buffer[10];
>
> if (argc >= 2) {
>
> inputfilestream = argv[1];
> if (argc > 2) {
> outputfilestream = argv[2];
> } else {
> outputfilestream = malloc(255);
> strcpy(outputfilestream,inputfilestream);
> outputfilestream = strcat(outputfilestream,".syx");
> }
>
> inputfile = fopen(inputfilestream,"rb");
> outputfile = fopen(outputfilestream, "wb");
>
> //write OPEN and DATA sysx messages
> fwrite(syxopen,sizeof(syxopen),1,outputfile);
> fwrite(syxdata,sizeof(syxdata),1,outputfile);
>
> //process the patches
> for (i=0;i<64;i++) {
> fread(tonebuf,sizeof(tonebuf),1,inputfile);
> checksum = 0;
> for (j=0;j<sizeof(tonebuf);j++) {
> //update the checksum
> checksum -= tonebuf[j];
>
> buffer[1] = tonebuf[j] & 0x0f;
> buffer[0] = tonebuf[j] >> 4;
> fwrite(buffer,2,1,outputfile);
> }
> //ignores the bit 7
> checksum &= 0x7f;
> fwrite(&checksum,1,1,outputfile);
>
> }
> //process the operations
> for (i=0;i<64;i++) {
> fread(operbuf,sizeof(operbuf),1,inputfile);
> checksum = 0;
> for (j=0;j<sizeof(operbuf);j++) {
> //update the checksum
> checksum -= operbuf[j];
>
> buffer[1] = operbuf[j] & 0x0f;
> buffer[0] = operbuf[j] >> 4;
> fwrite(buffer,2,1,outputfile);
> }
> //ignores the bit 7
> checksum &= 0x7f;
> fwrite(&checksum,1,1,outputfile);
>
> }
>
> buffer[0] = 0xf7;
> fwrite(buffer,1,1,outputfile);
> fwrite(syxclose,sizeof(syxclose),1,outputfile);
>
>
> fclose(inputfile);
> fclose(outputfile);
> }
> return 0;
>}
>
>
>
>
>
>--
>
>
>
>
>On Sun, Jan 5, 2014 at 10:23 PM, <facebook@...> wrote:
>
>
>>
>>Happy new year to all,
>>
>>
>>I spent some time during the holidays setting up an smal HTML5 based
>>framework which is intented to act as a librarian for the VZ sound
>>patches.
>>
>>
>>Going through the specs I came over the checksum, which isn't described in
>>detail in the CasioVZ-HohnerHS Sysex Format.pdf.
>>
>>
>>Can anyone help me out on the details here?
>>
>>
>>My idea:
>>Create a little helper to rearrange existing sysex files, which will (in
>>the first step) be consolidated in a new sysex file to be uploaded.
>>
>>
>>
>>My progress:
>>So far I can drag and drop sysex files into the GUI and extract the tone
>>and op names of the banks, also a re-arrangement is possible (from gui
>>side).
>>
>>
>>My need:
>>Any help on the internal sysex format - especially on the check sum.
>>
>>
>>Technology:
>>HTML5 so anyone could use it. Upload to the VZ would still need an
>>external tool but maybe HTML5 will support that, too in the future.
>>
>>
>>Me:
>>I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110,
>>X3R, AN1x, Phm and sonic|core Scope 5)
>>
>>
>>Any help is appreciated,
>>
>>
>>cheers,
>>
>>
>>Pete
>>
>>
>>(I was in the forum before but lot my ID after a computer crash ;) )
>>
>>
>
>
>

Re: [CZsynth] VZ SysEx Format

2014-01-31 by <domgoold@...>

yes: thanks for clarifying with your findings! somebody should do
a webpage on the various sysex checksums and how to calculate
them. i seem to remember that doing the one for Roland JV was
fairly easy. but this VZ one is (not very userfriendly..)

i used to use atari+vz/cz artist to edit casios vz+cz - is there an
equivalent for PC?(for VZ)(free? ;) )

i would like to start thinking about a Novation Remote map for the
VZ8m ( could do VZ10m version too) - i haven't tried to make any
remote maps yet, but it looks quite like building a cubase mixer map
for atari - shame you can't build your own button assignments in the
Novation software, to generate more menu pages, determine layout,
etc. - but it should turn out really well for the VZ.

if you can give a few specimen messages, parameter address with variable,
it will give me incentive to get it started :)

Re: VZ SysEx Format

2014-01-31 by steve_the_composer

I was under the impression that mapping parameters was primarily useful for gear that had a bunch of parameters that could be edited on the fly.

So far as I know (though I could be wrong), the VZ synth engine doesn't have a whole lot--except for the usual CCs.

Does anyone have a VZ sysex manual showing control of individual parameters?

--Steve

--- In CZsynth@yahoogroups.com, <domgoold@...> wrote:
Show quoted textHide quoted text
>
> yes: thanks for clarifying with your findings! somebody should do 
> a webpage on the various sysex checksums and how to calculate 
> them. i seem to remember that doing the one for Roland JV was 
> fairly easy. but this VZ one is (not very userfriendly..)
> 
> i used to use atari+vz/cz artist to edit casios vz+cz - is there an 
> equivalent for PC?(for VZ)(free? ;)  )
> 
> i would like to start thinking about a Novation Remote map for the 
> VZ8m ( could do VZ10m version too) - i haven't tried to make any 
> remote maps yet, but it looks quite like building a cubase mixer map 
> for atari - shame you can't build your own button assignments in the 
> Novation software, to generate more menu pages, determine layout, 
> etc. - but it should turn out really well for the VZ.
> 
> if you can give a few specimen messages, parameter address with variable, 
> it will give me incentive to get it started :)
>

Re: VZ SysEx Format

2014-02-01 by <domgoold@...>

sure, but while you're going to maybe edit the thing with an editor,
would it not be pretty excellent to have hands on control via the
Novation Remote? same way as programming an old analogue.
!remove! the age-old obstacle with all these old digi button boxes!! :)
liberate!!

it works differently on different machines: i've done sysex mixer maps
in the past fr things like e-mu orbit>which made much more sense of
it but only acts on active edit screen channel>so it in fact *only* good
for setting up patches there..i've got a feeling it will be the same for
many machines, especially those with separate voice and multi modes.

but when you consider that a Novation Remote can overwrite all of its
memories with user maps, and hold 40(?) in memory..if you have a few
devices that would benefit from extra access for editing, it makes a lot
of sense. nothing much else out there at the price, or with the features.
i picked up a novation remote zero cheap, but have never really had the
chance to use it. don't really want it for plugins, more for my vz and tx
-and orbit: that thing is nice when you link patches.

Re: VZ SysEx Format

2014-02-01 by <domgoold@...>

also did things like the alesis quadraverb/midiverbIII, roland jv (different

modes, checksum etc.), sy85...forget what else. but it makes those

machines a lot easier to get around. realtime control is a possibility

as well, but you have to be sparse with sysex, or use rpn/nrpn.


to be fair, doing randomize with the atari editor for a couple of days

pretty much showed me all the way round the vz, lol - resulted in me

flogging a very nice cz101 with cart :( boohoo - but you can always find

a new side of a machine if youhave easy access to parameters; less

likely when you have to spend all morning setting up a few patches you

may never use. *and* you can get at the machine without kneeling in front

of a rack pushing buttons or whatever.. :)

Re: [CZsynth] VZ SysEx Format

2014-02-06 by Daniel Forró

Nibble is half of byte. When some manufacturers want to sent 8-bit  
data bytes in MIDI communication, they divide them to half and send  
them in two bytes, for example

abcdefgh

sent as:

0000abcd
0000efgh

The main reason for this is that data bytes in MIDI communication must  
start with 0.

Other manufacturers did differently, for example they sent it this way:

0abcdefg
000000h

Why do you ask, you are software programmer, I'd suppose you know such  
basic things... If not, Google is your friend:

http://en.wikipedia.org/wiki/Nibble

http://www.techterms.com/definition/nybble

Daniel Forro
Show quoted textHide quoted text
On 31 Jan, 2014, at 5:43 AM, charlie midi gfa wrote:

> nybbles are bytes
> ?
>
> charlie
>
>
> ----- Original Message -----
> From: "Lee Borrell" <templarser@...>
> To: <CZsynth@yahoogroups.com>
> Sent: Thursday, January 30, 2014 1:59 PM
> Subject: Re: [CZsynth] VZ SysEx Format
>
>
> That's interesting thanks - I have worked on Yamaha checksums which
> calculate on the nybbles - not the bytes - I will bear what you have  
> said in
> mind when I come to CZ.

Re: VZ SysEx Format

2014-02-06 by gtrmacs

> nybbles are bytes

A nybble is half a byte??

<http://en.wikipedia.org/wiki/Nibble>



 --

Take care . . .

Brian

Re: [CZsynth] VZ SysEx Format

2014-02-06 by Lee Borrell

Charles,

There is some confusion sometimes with the use of the term 'nybble' and 'byte' in Sysex manuals - because all the message data has to be below 127,I suppose you may know that some manufacturers split the BYTE up into Hi and Lo nybbles - both below 16 in value.

Since the actual message BYTE contains these 4 bits then the item that is actually a NYBBLE is represented in a BYTE.

That is - if the data was 20 then the hi nybble has to represent 16 and the lower one 4 which means 


0001 0100 (20dec) becomes  0000 0001 = 1 in the hi 'byte' and 0000 0100 = 4 in the lo 'byte'

Of course referring to them as 'bytes' is kind of confusing - Yamaha refer to the 2s complement of all data BYTES in the PSS manual - what is actually means is to sum the numbers in the hi and lo 'bytes' which are actually nybbles in the sense that they never get beyond 4 bits.

I have not tried to do a Casio checksum yet,presumably I will be back referring to Jose when [if?] I get there!

LEE





________________________________
 From: charlie midi gfa <charles.copp@...>
To: CZsynth@yahoogroups.com 
Sent: Thursday, 30 January 2014, 20:43
Subject: Re: [CZsynth] VZ SysEx Format
 


  
nybbles are bytes
?

charlie

----- Original Message ----- 
From: "Lee Borrell" <templarser@...>
To: <CZsynth@yahoogroups.com>
Sent: Thursday, January 30, 2014 1:59 PM
Subject: Re: [CZsynth] VZ SysEx Format

That's interesting thanks - I have worked on Yamaha checksums which 
calculate on the nybbles - not the bytes - I will bear what you have said in 
mind when I come to CZ.

________________________________
From: José Ángel Morente <msxjam@...>
To: CZsynth@yahoogroups.com
Sent: Wednesday, 29 January 2014, 22:30
Subject: Re: [CZsynth] VZ SysEx Format

That's right.
The checksum is in fact a 'checksub' :)
It works similar to a two's complement, but I remember (it was some years 
ago) that the traditional complement caused the checksum to fail in one or 
two cases (when the sum was 00 or 7F, can't remember for sure).
After a while I realized that substracting the accumulated value (instead of 
summing) the thing worked perfectly.
Then you must reset the more significant bit. I used for that a AND 7F 
operation (checksum = checksum & 0x7f)
However, the tricky part is that the VZ sends the data bytes splitted into 2 
nibbles, but the checksum is calculated with the whole byte.
In other words, you have to do these steps:

1) Read one byte from sysex

2) Read one byte from sysex, shift 4 bits to left
3) Get the actual data, byte = 1) OR 2)
4) CHECKSUM = CHECKSUM - BYTE
5) goto 1) and repeat 64 times * patch length
6) Take the 7 less significant bits: CHECKSUM = CHECKSUM & 0x7F
7) Store the checksum byte, the sysex closing sequence, 0xF7, etc.
Show quoted textHide quoted text
On 29 Jan 2014 17:27, "Lee Borrell" <templarser@yahoo.co.uk> wrote:

>
>Jose,
>
>Can you explain the -= in C, is that subtraction?
>
>It seems your routine is very similar to mine save for the 'twos 
>complement' section - but if you are subtracting rather than adding,perhaps 
>that accounts for it.
>I do not know what the VZ checksum should be anyhow - only yamahas.
>
>Is the VZ summing all nybbles and then anding with 7f,or is there something 
>more?
>
>
>
>
>
>
>________________________________
> From: José Ángel Morente <msxjam@...>
>To: CZsynth@yahoogroups.com
>Sent: Wednesday, 29 January 2014, 16:18
>Subject: Re: [CZsynth] VZ SysEx Format
>
>
>
>
>Some time ago I posted a C program used to convert from VZ1 to standard SYX 
>files. You may take a look at the checksum routine, maybe it can be 
>helpful:
>
>
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>
>#define TONES_NO 64;
>
>typedef unsigned char byte;
>
>int main (int argc,char *argv[])
>{
> char *inputfilestream;
> char *outputfilestream;
> FILE *inputfile;
> FILE *outputfile;
>
> byte tonebuf[336];
> byte operbuf[100];
>
> byte syxopen[8]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x70, 0x02, 0xf7
> };
> byte syxdata[6]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x74
> };
> byte syxclose[7]={
> 0xf0, 0x44, 0x03, 0x00, 0x70, 0x71, 0xf7
> };
>
> int i,j,checksum=0;
>
> byte buffer[10];
>
> if (argc >= 2) {
>
> inputfilestream = argv[1];
> if (argc > 2) {
> outputfilestream = argv[2];
> } else {
> outputfilestream = malloc(255);
> strcpy(outputfilestream,inputfilestream);
> outputfilestream = strcat(outputfilestream,".syx");
> }
>
> inputfile = fopen(inputfilestream,"rb");
> outputfile = fopen(outputfilestream, "wb");
>
> //write OPEN and DATA sysx messages
> fwrite(syxopen,sizeof(syxopen),1,outputfile);
> fwrite(syxdata,sizeof(syxdata),1,outputfile);
>
> //process the patches
> for (i=0;i<64;i++) {
> fread(tonebuf,sizeof(tonebuf),1,inputfile);
> checksum = 0;
> for (j=0;j<sizeof(tonebuf);j++) {
> //update the checksum
> checksum -= tonebuf[j];
>
> buffer[1] = tonebuf[j] & 0x0f;
> buffer[0] = tonebuf[j] >> 4;
> fwrite(buffer,2,1,outputfile);
> }
> //ignores the bit 7
> checksum &= 0x7f;
> fwrite(&checksum,1,1,outputfile);
>
> }
> //process the operations
> for (i=0;i<64;i++) {
> fread(operbuf,sizeof(operbuf),1,inputfile);
> checksum = 0;
> for (j=0;j<sizeof(operbuf);j++) {
> //update the checksum
> checksum -= operbuf[j];
>
> buffer[1] = operbuf[j] & 0x0f;
> buffer[0] = operbuf[j] >> 4;
> fwrite(buffer,2,1,outputfile);
> }
> //ignores the bit 7
> checksum &= 0x7f;
> fwrite(&checksum,1,1,outputfile);
>
> }
>
> buffer[0] = 0xf7;
> fwrite(buffer,1,1,outputfile);
> fwrite(syxclose,sizeof(syxclose),1,outputfile);
>
>
> fclose(inputfile);
> fclose(outputfile);
> }
> return 0;
>}
>
>
>
>
>
>--
>
>
>
>
>On Sun, Jan 5, 2014 at 10:23 PM, <facebook@...> wrote:
>
>
>>
>>Happy new year to all,
>>
>>
>>I spent some time during the holidays setting up an smal HTML5 based 
>>framework which is intented to act as a librarian for the VZ sound 
>>patches.
>>
>>
>>Going through the specs I came over the checksum, which isn't described in 
>>detail in the CasioVZ-HohnerHS Sysex Format.pdf.
>>
>>
>>Can anyone help me out on the details here?
>>
>>
>>My idea:
>>Create a little helper to rearrange existing sysex files, which will (in 
>>the first step) be consolidated in a new sysex file to be uploaded.
>>
>>
>>
>>My progress:
>>So far I can drag and drop sysex files into the GUI and extract the tone 
>>and op names of the banks, also a re-arrangement is possible (from gui 
>>side).
>>
>>
>>My need:
>>Any help on the internal sysex format - especially on the check sum.
>>
>>
>>Technology:
>>HTML5 so anyone could use it. Upload to the VZ would still need an 
>>external tool but maybe HTML5 will support that, too in the future.
>>
>>
>>Me:
>>I have a VZ10m, HS-2, CZ-3000 and an HT-3000 in my set-up (besides D-110, 
>>X3R, AN1x, Phm and sonic|core Scope 5)
>>
>>
>>Any help is appreciated,
>>
>>
>>cheers,
>>
>>
>>Pete
>>
>>
>>(I was in the forum before but lot my ID after a computer crash ;) )
>>
>>
>
>
>

Re: [CZsynth] VZ SysEx Format

2014-02-06 by Lee Borrell

The alternative that Daniel has mentioned of keeping below 127 and putting the 128 bit in the next 'byte' I came across whilst programming an editor for the ART LT reverb unit.

There is by no means any consistency in how the manufacturers separate the data bits up to keep below 127. The two options Daniel has mentioned are the only ones I have seen (as yet).




________________________________
 From: Daniel Forró <dan.for@...>
To: CZsynth@yahoogroups.com 
Sent: Thursday, 6 February 2014, 3:26
Subject: Re: [CZsynth] VZ SysEx Format
 


  
Nibble is half of byte. When some manufacturers want to sent 8-bit 
data bytes in MIDI communication, they divide them to half and send 
them in two bytes, for example

abcdefgh

sent as:

0000abcd
0000efgh

The main reason for this is that data bytes in MIDI communication must 
start with 0.

Other manufacturers did differently, for example they sent it this way:

0abcdefg
000000h

Why do you ask, you are software programmer, I'd suppose you know such 
basic things... If not, Google is your friend:

http://en.wikipedia.org/wiki/Nibble

http://www.techterms.com/definition/nybble

Daniel Forro
Show quoted textHide quoted text
On 31 Jan, 2014, at 5:43 AM, charlie midi gfa wrote:

> nybbles are bytes
> ?
>
> charlie
>
>
> ----- Original Message -----
> From: "Lee Borrell" <templarser@...>
> To: <CZsynth@yahoogroups.com>
> Sent: Thursday, January 30, 2014 1:59 PM
> Subject: Re: [CZsynth] VZ SysEx Format
>
>
> That's interesting thanks - I have worked on Yamaha checksums which
> calculate on the nybbles - not the bytes - I will bear what you have 
> said in
> mind when I come to CZ.

Re: VZ SysEx Format

2014-02-06 by steve_the_composer

The discussion of nibblizing/nybblizing midi data might sound familiar to some members of this group. It seems that around 2009 as part of some discussion,* I posted some Commodore C-64 asm code segments as examples of how I handled it. 

See the CZ - C64 asm code segments directory here:
http://launch.groups.yahoo.com/group/CZsynth/files/

*The thread starts here: 
http://launch.groups.yahoo.com/group/CZsynth/message/4110

Dèjá vú?





 


--- In CZsynth@yahoogroups.com, Daniel Forró <dan.for@...> wrote:
Show quoted textHide quoted text
>
> Nibble is half of byte. When some manufacturers want to sent 8-bit  
> data bytes in MIDI communication, they divide them to half and send  
> them in two bytes, for example
> 
> abcdefgh
> 
> sent as:
> 
> 0000abcd
> 0000efgh
> 
> The main reason for this is that data bytes in MIDI communication must  
> start with 0.
> 
> Other manufacturers did differently, for example they sent it this way:
> 
> 0abcdefg
> 000000h
> 
> Why do you ask, you are software programmer, I'd suppose you know such  
> basic things... If not, Google is your friend:
> 
> http://en.wikipedia.org/wiki/Nibble
> 
> http://www.techterms.com/definition/nybble
> 
> Daniel Forro
> 
> On 31 Jan, 2014, at 5:43 AM, charlie midi gfa wrote:
> 
> > nybbles are bytes
> > ?
> >
> > charlie
> >
> >
> > ----- Original Message -----
> > From: "Lee Borrell" <templarser@...>
> > To: <CZsynth@yahoogroups.com>
> > Sent: Thursday, January 30, 2014 1:59 PM
> > Subject: Re: [CZsynth] VZ SysEx Format
> >
> >
> > That's interesting thanks - I have worked on Yamaha checksums which
> > calculate on the nybbles - not the bytes - I will bear what you have  
> > said in
> > mind when I come to CZ.
>

Re: [CZsynth] VZ SysEx Format

2014-02-06 by charlie midi gfa

i was joking ,
 how can you analyse a nybble without putting into a byte.or allready having
it in a byte ..... thats the joke

asl asr lsl lsr shl shr  &hxxxx0000   bitwise arthicmitic functions
masks and   AND or OR or MODULO

i dont have much time right now , but i do have a list of projects to
complete so when i return
i shall bring the answer.

charlie  about the checksum



----- Original Message -----
Show quoted textHide quoted text
From: "Daniel Forró" <dan.for@tiscali.cz>
To: <CZsynth@yahoogroups.com>
Sent: Wednesday, February 05, 2014 10:26 PM
Subject: Re: [CZsynth] VZ SysEx Format


> Nibble is half of byte. When some manufacturers want to sent 8-bit
> data bytes in MIDI communication, they divide them to half and send
> them in two bytes, for example
>
> abcdefgh
>
> sent as:
>
> 0000abcd
> 0000efgh
>
> The main reason for this is that data bytes in MIDI communication must
> start with 0.
>
> Other manufacturers did differently, for example they sent it this way:
>
> 0abcdefg
> 000000h
>
> Why do you ask, you are software programmer, I'd suppose you know such
> basic things... If not, Google is your friend:
>
> http://en.wikipedia.org/wiki/Nibble
>
> http://www.techterms.com/definition/nybble
>
> Daniel Forro
>
> On 31 Jan, 2014, at 5:43 AM, charlie midi gfa wrote:
>
>> nybbles are bytes
>> ?
>>
>> charlie
>>
>>
>> ----- Original Message -----
>> From: "Lee Borrell" <templarser@...>
>> To: <CZsynth@...m>
>> Sent: Thursday, January 30, 2014 1:59 PM
>> Subject: Re: [CZsynth] VZ SysEx Format
>>
>>
>> That's interesting thanks - I have worked on Yamaha checksums which
>> calculate on the nybbles - not the bytes - I will bear what you have
>> said in
>> mind when I come to CZ.
>
>
>
> ------------------------------------
>
> Yahoo Groups Links
>
>
>
>

Re: [CZsynth] Re: VZ SysEx Format

2014-02-15 by Lee

I think most are familiar with nibbles being 4 bits and bytes being 8. However, as charlie has seemingly indicated the 4 bits may exist within a byte and in midi transmission the 4 bits do indeed exist within a byte which is why they are so referred to in the manual. 
The byte MUST have first bit 0 in order to not be a header and in yamaha's case the next 3 are as well, meaning that the lower and upper 4 bits (nybbles) of a byte (proper) are carried as 2 bytes (nybbles) with the upper 4 bits all 0.
This is not how ART and other manufacturers code their bytes and reference to nybbles/bytes is apt to cause confusion as indeed it seems to be doing!


Sent from my iPhone
Show quoted textHide quoted text
On 6 Feb 2014, at 13:09, gtrmacs <gtrmacs@...> wrote:

> > nybbles are bytes
> 
> A nybble is half a byte??
> 
> <http://en.wikipedia.org/wiki/Nibble>
> 
> --
> 
> Take care . . .
> 
> Brian
> 
>

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.