After doing some digging, I've found what I believe is the Casio patent describing the GT913 sample format:JPH08101690A - Waveform reading device
Two compact floating-point DPCM formats are described in the patent; I believe the relevant one here is the second one, where a 16-bit word contains a 2-bit exponent delta and two 7-bit sample deltas (see figure 13), and the least significant bit of a sample address apparently addresses one of the individual sample deltas.
Figure 15 shows an additional 12-byte structure located at each sample's end address, containing five 16-bit sample values and five 3-bit exponent values. When a sample loops, the current output sample and exponent value are reloaded from one of the five respective values. This structure also exists at the end of each sample in the CTK-551 ROM (i.e. between the end of each sample and the start of the following sample).
I believe the lower 3 bits of the 0x200a command's parameter (see the debug logs in the last post) are also supposed to be the initial exponent value.
(Part of the description of both formats in this patent is also dedicated to describing a linear interpolation method for the decoded samples, but I'm not really concerned about that right now)
Possibly related: JPH07199996A - Device and method fo...ng and decoding device for waveform data
, which appears to describe the process for actually encoding the same 16-bit packed format. (Google doesn't have the diagrams for this one for some reason, Espacenet and Global Dossier both do.)
Parsing the CTK-551 samples in this format seems to produce reasonable-looking delta values, but I'm having trouble trying to turn them back into uncompressed samples, and trying to grasp the correct behavior through Google's dodgy automatic translation is a bit of a pain in the ass.
Hopefully I'm on the right track here, though. I'd love to make some more progress on emulating this, but clearly I'm still missing something.