SCI patch.001 Resource Format                                     Revision 0.1
Rickard Lind                                                        1999-12-16

The patch.001 file for Roland MT-32, MT-100, LAPC-1, CM-32L and CM-64.

This specification will sometimes look very incomprehensible without some
knowledge concerning the MT-32 MIDI implementation.
Have a look at http://members.xoom.com/_XMCM/TomLewandowski/docs.html


1. The header (494 bytes) which is always present.

Offset Size Type Description
----------------------------------------------------------------------------
 0x000   2       89 00 First Two Bytes
 0x002  20       ASCII String for MT-32 Display ("*It's Only A Model* ")
 0x016  20       ASCII String for MT-32 Display (" CAMELOT, CAMELOT!  ")
 0x02a  20       ASCII String for MT-32 Display ("Ham & Jam & SpamAlot")
 0x03e   2  word MT-32 Master Volume
 0x040   1       Index in Predefined reverb settings at 0x04c (0-10)
 0x041  11       MT-32 SysEx block setting reverb
                 (last 3 bytes are dummies)
 0x04c   3       Predefined reverb setting #1 (Mode, Time, Level)
   :     :       :
 0x06a   3       Predefined reverb setting #11
 0x06d   8       MT-32 Patch Memory #1 (see Patch Memory description below)
   :     :       :
 0x1e5   8       MT-32 Patch Memory #48
 0x1ed   1       n = Number of Timbre Memory (0-64 userdefined instruments)
----------------------------------------------------------------------------


  Patch Memory description

  Offset Description
  --------------------------------------------------------------------
   0x00  Timbre Group (0 = Bank A, 1 = Bank B, 2 = Memory, 3 = Rhythm)
   0x01  Timbre Number (0 - 63)
   0x02  Key Shift (0-48) [-24 - +24]
   0x03  Fine Tune (0-100) [-50 - +50]
   0x04  Bender Range (0-24)
   0x05  Assign Mode (0 = Poly 1, 1 = Poly 2, 2 = Poly 3, 3 = Poly 4)
   0x06  Reverb Switch (0 = OFF, 1 = ON)
   0x07  Dummy
  --------------------------------------------------------------------

   Mapping MT-32 to GM instruments is done with Timbre Group and
   Timbre Number.

   Instrument 0-63:   Bank A, 0-63
   Instrument 64-127: Bank B, 0-63


2. The Timbre Memory block (if n > 0), offset relative to 0x1ee

Offset Size Type Description
------------------------------------------------------------------------------
 0x000  246      MT-32 Timbre Memory #1 (see Timbre Memory description below)
   :     :       :
 0x???  246      MT-32 Timbre Memory #n
------------------------------------------------------------------------------


  Timbre Memory description

  Offset Size Description
  -----------------------------------------------------------------------
   0x00   10  Timbre Name (ASCII String)
   0x0a       See http://members.xoom.com/_XMCM/TomLewandowski/lapc1.txt
  -----------------------------------------------------------------------


3. Second MT-32 Patch Memory Block, offset realtive to 0x1ee + n * 246

Offset Size Description
---------------------------------------------------
 0x000   2  0xab 0xcd (if this this is not present
                       there is no second block)
 0x002   8  MT-32 Patch Memory #49
   :     :  :
 0x17a   8  MT-32 Patch Memory #96
---------------------------------------------------


4. Block for setting up Patch Temporary Area (rhythm part) and
   System Area - Partial Reserve, offset relative to 0x370 + n * 246

Offset Size Description
---------------------------------------------------
 0x000   2  0xdc 0xba (if this this is not present
                       this block is non existent)
 0x002   4  Rhythm Setup for Key #24 (see below)
   :     :  :
 0x0fe   4  Rhythm Setup for Key #87
 0x102   9  System Area - Partial Reserve
---------------------------------------------------

  Rhythm Setup description
  See http://members.xoom.com/_XMCM/TomLewandowski/lapc1.txt


TODO:

  * Clearly describe which parts are interesting for a quick and dirty
    GeneralMidi/patch.001/FreeSCI implementation

  * Describe how the Sierra MT-32 driver uses patch.001

  * Make this readable to someone who has not been reading reference
    manuals since early childhood

  * SGML


Revision history

   Revision 0.1 - 1999-12-16
      - First pre-release of the specification
