JamCracker module format:


Offset       | Length & Type          | Description
-------------+------------------------+----------------------------------------
           0 | (4) char[4]            | Module marker 'BeEp'
           4 | (2) UWORD              | Number of instruments (NOI)
           6 | (NOI*sizeof            |
             | (struct InstInfo)      | Instrument info
+------------+------------------------+
| struct InstInfo
| {
|   char   it_name[31];       // Name of instrument
|   UBYTE  it_flags;          // Bit 0, 1 = Loop, 0 = No loop; Bit 1: 0 = Sample, 1 = AM
|   ULONG  it_size;           // Size of sample or AM data in bytes
|   UBYTE *it_address;        // Have to manual initialize this. Address to
|                             // the sample or AM data
| };
+------------+------------------------+----------------------------------------
 6+NOI*40    | (2) UWORD              | Number of patterns (NOP)
 8+NOI*40    | (NOP*sizeof            |
             | (struct PattInfo)      | Pattern info
+------------+------------------------+
| struct PattInfo
| {
|   UWORD            pt_size;    // Size of pattern in bytes
|   struct NoteInfo *pt_address; // Have to manual initialize this. Address to
|                                // the pattern data
| };
+------------+------------------------+----------------------------------------
  8+NOI*40   |                        |
   +NOP*6    | (2) UWORD              | Song length (SL)
 10+NOI*40   |                        |
   +NOP*6    | (2*SL)                 | Song table (Pattern numbers)
 10+NOI*40   |                        |
   +NOP*6    |                        |
   +SL*2     | (NOP*sizeof            | Patterns. Start to set pt_address from
             | (struct NoteInfo)*4    | this position and add pt_size *
             |                        | sizeof(struct NoteInfo)*4 NOP times
+------------+------------------------+
| struct NoteInfo
| {
|   UBYTE nt_period;
|   BYTE  nt_instr;
|   UBYTE nt_speed;
|   UBYTE nt_arpeggio;
|   UBYTE nt_vibrato;
|   UBYTE nt_phase;
|   UBYTE nt_volume;
|   UBYTE nt_porta;
| };
+------------+------------------------+----------------------------------------
      x      | Rest of file           | Samples or instrument data. Start to
             |                        | set it_address from this position and
             |                        | add it_size NOI times

Thomas Neumann / The APlayer-Team (tneumann@polycode.dk)
