Okay, so a few people have expressed interest in trying to figure out how the DM10 settings and soundrom SysEx files are laid out. I've done a fair bit of research and attempted some reverse-engineering on the files, and I think I've actually figured a few things out. Most of my work has been on the soundrom file, so that's what these notes will apply towards. The settings files are... interesting. A stock module's file is tiny, but ANY changes will inflate it to many times the original size. I have no idea what's going on with that.
Anyhow, here we go:
1: Both files are composed of the same "style" of SysEx message; they all start and end the same way:
F0 00 00 0E 2F <data>
F72: The first byte of the <data> section in Note 1 above seems to indicate the "type" of message. So far I've identified the following:
0x0A (in file "header")
0x0B (in file "header")
0x0C (in file "header")
0x03 ("data" message, see below)
3: The length and content of messages are very similar between the stock Alesis soundrom and the BlueJay one:
* Message 1:
0xF0 0x00 0x00 0x0E 0x2F 0x0A 0x40 0x01 0xF7 * Message 2:
0xF0 0x00 0x00 0x0E 0x2F 0x0C <data> 0xF7 (no ideas on what this contains)
* Message 3:
0xF0 0x00 0x00 0x0E 0x2F 0x0C 0x60 0x00 0x00 0x00 0x00 0x00 0x03 0x41 0xF7 (seems to match between Alesis and BJ soundsets)
* Message 4:
0xF0 0x00 0x00 0x0E 0x2F 0x0B 0xF7 (end of header?)
* Message 5:
0xF0 0x00 0x00 0x0E 0x2F 0x0A 0x68 0x04 0x49 0x3F 0xF7 (Alesis)
0xF0 0x00 0x00 0x0E 0x2F 0x0A 0x10 0x1C 0x38 0x1F 0xF7 (Bluejay)
* Message 6 - <numMessages - 1>: "data message" (see below)
* Last message:
0xF0 0x00 0x00 0x0E 0x2F 0x0B 0xF74: The "data messages" seem to hold the actual data that gets loaded into the module. Since MIDI requires that all "payload" bytes be between 0 - 127, the actual message is encoded to fit. This is pretty simple; check
http://ruinwesen.com/blog?id=71 for some technical discussion of this.
5: I wrote a quick program to take all the data messages, decode them, and dump the data to a file. I was going to attach them to this post, but they're WAY too large (43MB for BlueJay and 90MB for stock, both compressed. Uncompressed is about 40-50% larger). There's also the problem with distributing the BJ soundset, even if the file isn't in a usable state. Looking at the resulting file, there are some interesting things (these are from the stock soundset):
* The very start of the file seems to have a header with what look like the start and the size of different portions of the file. Here are the "section" names and data bytes for 1.03:
AUX PGMS: 0CA4 / 034C
COMP SYX: 0FDC / 049C
EQ SYX : 779C / 0EAE90
INST TBL: 0F2618 / 073120
PATT TBL: 143C / 4D40
HID PATT: 165710 / 04A45B
PGMS : 1AFB54 / 0AAC
REV SYX : 1B05EC / 07D73B60
SAMP TBL: ? / ? (this doesn't seem to match the structure for the other sections, so I don't know what's going on here)
SONG TBL: 7F24174 / 0020
VERSION : 6104 / 15F8
ICONKITS: 0001 / 0014
* Most of the text strings start at file offset 0x7EC1. It looks like they're in alphabetical order, and each has some data around it (probably pointing to the location for its samples). I can't seem to find the link between its location in the file and the actual sample data, however, so I think there's something else going on that will be nearly impossible to figure out without knowing how it's laid out in memory on the module itself.
If anyone wants to delve into this and see if we can make some more progress, PM me and I'll send you the program I used to dump the files. Maybe you'll see something I missed...