Casio RZ-1 MIDI SysEx

The traditional method of loading samples into the Casio RZ-1 is by sampling directly into the sample input. There is also the well known and documented feature of the MT jack which was designed exclusively for backing-up and restoring sample/rhythm data, but can also be exploited to sideload samples directly to the RZ-1, allowing bypass of the sampler input entirely.

However, historically, almost no RZ-1 users have been aware of the capability of the RZ-1 to backup/restore both sample and rhythm data by means of Sysem Exclusive messages. The MIDI SysEx capabilities of the RZ-1 are so poorly known that it is often erroneously stated as fact that the RZ-1 has no SysEx support. This is entirely untrue–in actuality, samples can even be sideloaded to the RZ-1 over SysEx much in the same way as the MT jack exploit.

The remainder of this article describes the technique of using SysEx with the RZ-1. SysEx sideloading utilities have been made available for download toward the end.

Note: While this information has been tested to work, the following implementation reference is the result of reverse engineering and is not based upon documentation published by Casio, so there may be inaccuracies or omissions.

Casio RZ-1 System Exclusive (SysEx) MIDI Implementation/Specifications

Note: All values are in hex — for example $F0 or F0h, depending on the notation preferred.

F0 44 01 00 7n zz 00

where n is MIDI channel (0 = channel 1, 1 = ch2, .. E = ch15, F = ch16)

where zz is for RZ-1 to do the following:

10 = MIDI SEND, sample RAM (from RZ-1 to sequencer)
14 = MIDI SEND, rhythm RAM (from RZ-1 to sequencer)
20 = MIDI RECEIVE, sample data (from sequencer to RZ-1)
24 = MIDI RECEIVE, rhythm data (from sequencer to RZ-1)

THE SEQUENCER MUST INITIATE COMMUNICATION!

RZ-1 responds F0 44 01 00 70 30 to any of those four requests — which is one major mistake by Casio, IMHO.

MIDI SEND HANDSHAKING (RZ-1 to sequencer, commands 10 and 14)

– Sequencer sends handshake to RZ-1 of intended download: 7n 31 (7n is handshake channel check, 31 is handshake request-to-send command)

– RZ-1 sends reply of nibblized data: h1 l1, h2 l2, .. ..

– If RZ-1 has more data to send then it sends a handshake of: 7n 32 (7n is handshake channel check, 32 is handshake more-to-send reply)

– As needed, sequencer sends another handshake: 7n 31 (7n is handshake channel check, 31 is handshake request-to-send command)

– RZ-1 again sends nibblized data: h1 l1, h2 l2, .. .. for length of RAM dump (or has more data which requires more handshaking)

– Handshakes must proceed until Tx/Rx is done — only 256 bytes can be sent at a time (not counting SysEx codes or handshaking bytes), but those are nibbles which really only amounts to 128 proper bytes of data! Manually handshaking by sending one 70 31 reply per second seems to work well, but is quite tedious — an automated script which only replies when the RZ-1 sends its 70 32 handshake would be far superior. The CZ-style trick of flooding the RZ-1 MIDI buffer with handshake acknowledgements tends to stop the RZ-1 prematurely.

– RZ-1 terminates transmission with F7. Sequencer can send either another handshake or F7 to bring RZ-1 out of MIDI SEND mode.

It’s recommended to immediately edit the received header accordingly before saving it for later use, so that dumps can easily and properly be played when it comes time to reload them (see section below).

MIDI RECEIVE HANDSHAKING (sequencer to RZ-1, commands 20 and 24)

– Sequencer SysEx to be sent to the RZ-1 must have the automatically generated header of F0 44 01 00 70 30 removed and replaced with the proper receive request — either sample or rhythm. Generally F0 44 01 00 70 20 00 for samples and F0 44 01 00 70 24 00 for rhythm, but please reference the formatting guide at the beginning of this document.

Note: The resulting size of a properly edited SysEx sample dump is 33,030 bytes, 15,486 bytes for rhythm.

– Sequencer sends data but the return handshakes have been encoded by the RZ-1 previously during the transmission to the sequencer, so none need to be added as they are automatically played back at the proper points.

– Sequencer and RZ-1 both terminate transmission with F7

ENCODING INFORMATION

Last byte in sample RAM (before turning into high/low nibble bytes) — these would be the final two bytes directly before F7 when in SysEx form:

bit 0~4 = unused; all must be 0 or sample RAM will reinitialize on boot — if bit 0, 1, 2, 3, or 4 are set then configuration is corrupt
bit 5 = SAMPLE 1~4 linked (must be exclusively set); hexcode of $20
bit 6 = SAMPLE 3+4 linked (can be mutually set w/ bit 7); hexcode of $40
bit 7 = SAMPLE 1+2 linked (can be mutually set w/ bit 6); hexcode of $80

SAMPLE 1+2 paired and SAMPLE 3+4 paired = hexcode of $C0
SAMPLE 1, 2, 3 and 4 are not linked (each pad independent) = hexcode of $00

Odd technical minutiae regarding the RZ-1 sampling feature:

Sample pads 1, 2, and 3 all hold the same amount of sample data. Sample pad 4 actually holds slightly less than any of the other pads, so it ends up being imperceptibly shorter than the rest — about 1 sample fewer. The last couple bytes of sample RAM are used to hold general data instead of sample points.

UTILITIES

Casio RZ-1 SysEx Bulk Dump Utility v0.50

— use this to capture rhythm and/or sample data from the Casio RZ-1 via SysEx

WAV to SysEx and SysEx to WAV Encoding/Decoding Utility v0.30 (plus bonus SysEx kits)

— sample dumps captured by the bulk dump utility above can be converted to WAVE for editing, etc.
— WAVE files in the proper format can be converted to SysEx files compatible for loading directly to the RZ-1
— rhythm dumps can be converted into binaries (one directional and mostly pointless anyway)

Contrary to any other inaccurate information encountered on the Internet, the sample format for the RZ-1 is: signed 8-bit, mono, 20kHz (20,833 Hz to be precise).

The RZ-1 uses only 8-bit samples for both RAM & ROM, although capable of utilizing 10-bits of dynamic range–not 12-bit or 24kHz as sometimes described.

Bome SendSX 1.40 with the following settings (which may or may not matter) is known to work:

Speed: 989 bytes/s
Sending MIDI = Split & Throttling
Loading Files = Split

Just load and send. That’s it. Although it should be noted that the RZ-1 can’t be playing back, so it needs to be powered on, hooked to both MIDI in / MIDI out, on Channel 1, and also in its normal “standby” mode with nothing special happening.

It should go without saying that these will erase anything already sampled, so don’t be surprised when the sample pads sound different. That’s the point.

TROUBLESHOOTING

As always, please consider that USB MIDI interfaces often have trouble handling SysEx messages, especially long incoming SysEx such as RZ-1 rhythm and sample data. Therefore, using an ISA/PCI/PCIe style dedicated MIDI interface is highly advisable, especially when sending a dump request to the RZ-1 as many USB MIDI interfaces (especially–but not limited to–discount brands) will have insufficient buffering when flooded by the RZ-1 MIDI output.

There can also be cases where a USB MIDI interface will send SysEx to the RZ-1 properly, but will only be able to receive partial dumps from the RZ-1. In other words, just because the interface works while transmitting, does not mean it is qualified for receiving.

Bookmark the permalink.