home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / it206.zip / ITTECH.DOC < prev    next >
Text File  |  1996-09-23  |  45KB  |  871 lines

  1.  
  2.                              Impulse Header Layout
  3.  
  4.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  5.       ┌───┬───┬───┬───┬───────────────────────────────────────────────┐
  6. 0000: │'I'│'M'│'P'│'M'│ Song Name, max 26 characters, includes NULL   │
  7.       ├───┴───┴───┴───┴───────────────────────────────────────┬───┬───┤
  8. 0010: │.......................................................│ x │ x │
  9.       ├───────┬───────┬───────┬───────┬───────┬───────┬───────┼───┴───┤
  10. 0020: │OrdNum │InsNum │SmpNum │PatNum │ Cwt/v │ Cmwt  │ Flags │Special│
  11.       ├───┬───┼───┬───┼───┬───┼───────┼───────┴───────┼───┬───┼───┬───┤
  12. 0030: │GV │MV │IS │IT │Sep│(0)│MsgLgth│Message Offset │ x │ x │ x │ x │
  13.       ├───┴───┴───┴───┴───┴───┴───────┴───────────────┴───┴───┴───┴───┤
  14. 0040: │ Chnl Pan (64 bytes)...........................................│
  15.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  16.  
  17.       ├───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┤
  18. 0080: │ Chnl Vol (64 bytes)...........................................│
  19.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  20.  
  21.       ├───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┤
  22. 00C0: │ Orders, Length = OrdNum                                       │
  23.       ├───────────────────────────────────────────────────────────────┤
  24. xxxx: │ 'Long' Offset of instruments, Length = InsNum*4 (1)           │
  25.       ├───────────────────────────────────────────────────────────────┤
  26. xxxx: │ 'Long' Offset of samples headers, Length = SmpNum*4 (2)       │
  27.       ├───────────────────────────────────────────────────────────────┤
  28. xxxx: │ 'Long' Offset of patterns, Length = PatNum*4 (3)              │
  29.       └───────────────────────────────────────────────────────────────┘
  30.  
  31.       (1) Offset = 00C0h+OrdNum
  32.       (2) Offset = 00C0h+OrdNum+InsNum*4
  33.       (3) Offset = 00C0h+OrdNum+InsNum*4+SmpNum*4
  34.  
  35.         Note that if the (long) offset to a pattern = 0, then the
  36.         pattern is assumed to be a 64 row empty pattern.
  37.  
  38.       Cwt:      Created with tracker.
  39.                  Impulse Tracker y.xx = 0yxxh
  40.       Cmwt:     Compatible with tracker with version greater than value.
  41.                  (ie. format version)
  42.       OrdNum:   Number of orders in song.
  43.       InsNum:   Number of instruments in song
  44.       SmpNum:   Number of samples in song
  45.       PatNum:   Number of patterns in song
  46.       Flags:    Bit 0: On = Stereo, Off = Mono
  47.                 Bit 1: Vol0MixOptimizations - If on, no mixing occurs if
  48.                        the volume at mixing time is 0 (redundant v1.04+)
  49.                 Bit 2: On = Use instruments, Off = Use samples.
  50.                 Bit 3: On = Linear slides, Off = Amiga slides.
  51.                 Bit 4: On = Old Effects, Off = IT Effects
  52.                         Differences:
  53.                        - Vibrato is updated EVERY frame in IT mode, whereas
  54.                           it is updated every non-row frame in other formats.
  55.                           Also, it is two times deeper with Old Effects ON
  56.                        - Command Oxx will set the sample offset to the END
  57.                          of a sample instead of ignoring the command under
  58.                          old effects mode.
  59.                        - (More to come, probably)
  60.  
  61.       Special:  Bit 0: On = song message attached.
  62.                        Song message:
  63.                         Stored at offset given by "Message Offset" field.
  64.                         Length = MsgLgth.
  65.                         NewLine = 0Dh (13 dec)
  66.                         EndOfMsg = 0
  67.  
  68.                        Note: v1.04+ of IT may have song messages of up to
  69.                              8000 bytes included.
  70.  
  71.                 Bits 1-15: Undefined.
  72.  
  73.       GV:       Global volume. (0->128) All volumes are adjusted by this
  74.       MV:       Mix volume (0->128) During mixing, this value controls
  75.                 the magnitude of the wave being mixed.
  76.       IS:       Initial Speed of song.
  77.       IT:       Initial Tempo of song
  78.       Sep:      Panning separation between channels (0->128, 128 is max sep.)
  79.       Chnl Vol: Volume for each channel. Ranges from 0->64
  80.       Chnl Pan: Each byte contains a panning value for a channel. Ranges from
  81.                  0 (absolute left) to 64 (absolute right). 32 = central pan,
  82.                  100 = Surround sound.
  83.                  +128 = disabled channel (notes will not be played, but note
  84.                                           that effects in muted channels are
  85.                                           still processed)
  86.       Orders:   This is the order in which the patterns are played.
  87.                  Valid values are from 0->199.
  88.                  255 = "---", End of song marker
  89.                  254 = "+++", Skip to next order
  90.  
  91.  
  92.                   Old Impulse Instrument Format (cmwt < 200h)
  93.  
  94.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  95.       ┌───┬───┬───┬───┬───────────────────────────────────────────────┐
  96. 0000: │'I'│'M'│'P'│'I'│ DOS FileName (12345678.123)                   │
  97.       ├───┼───┼───┼───┼───┬───┬───┬───┬───────┬───┬───┬───────┬───┬───┤
  98. 0010: │00h│Flg│VLS│VLE│SLS│SLE│ x │ x │FadeOut│NNA│DNC│TrkVers│NoS│ x │
  99.       ├───┴───┴───┴───┴───┴───┴───┴───┴───────┴───┴───┴───────┴───┴───┤
  100. 0020: │ Instrument Name, max 26 bytes, includes NUL...................│
  101.       ├───────────────────────────────────────┬───┬───┬───┬───┬───┬───┤
  102. 0030: │.......................................│ x │ x │ x │ x │ x │ x │
  103.       ├───────────────────────────────────────┴───┴───┴───┴───┴───┴───┤
  104. 0040: │ Note-Sample/Keyboard Table, Length = 240 bytes................│
  105.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  106.  
  107.       ├───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┤
  108. 0130: │ Volume envelope (200 bytes)...................................│
  109.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  110.  
  111.                                       ├───┴───┴───┴───┴───┴───┴───┴───┤
  112. 01F8:                                 │ Node points (25x2 bytes)......│
  113.                                       └───────────────────────────────┘
  114.  
  115.         Total length of old instrument header is 554 bytes.
  116.  
  117.       Flg:      Bit 0. On = Use volume envelope
  118.                 Bit 1. On = Use volume loop
  119.                 Bit 2. On = Use sustain volume loop
  120.       VLS:      Volume loop start (node number)
  121.       VLE:      Volume loop end (node number)
  122.       SLS:      Sustain loop start (node number)
  123.       SLE:      Sustain loop end (node number)
  124.       FadeOut:  Ranges between 0 and 64, but the fadeout "Count" is 512.
  125.                 Fade applied when:
  126.                 1) Note fade NNA is selected and triggered (by another note)
  127.                 2) Note off NNA is selected with no volume envelope
  128.                    or volume envelope loop
  129.                 3) Volume envelope end is reached
  130.  
  131.       DNC:      Duplicate note check (0 = Off, 1 = On)
  132.       NNA:      New note action:
  133.                         0 = Note cut
  134.                         1 = Note continue
  135.                         2 = Note off
  136.                         3 = Note fade
  137.  
  138.       TrkVers:  Tracker version used to save the instrument. This is only
  139.                 used in the instrument files.
  140.       NoS:      Number of samples associated with instrument. This is only
  141.                 used in the instrument files.
  142.  
  143.       Note-Sample/Keyboard Table.
  144.        Each note of the instrument is first converted to a sample number
  145.        and a note (C-0 -> B-9). These are stored as note/sample pairs
  146.        (note first, range 0->119 for C-0 to B-9, sample ranges from
  147.        1-99, 0=no sample)
  148.  
  149.        Volume envelope: Values from 0->64, 0FFh indicating end of envelope.
  150.        (after which note fade applies)
  151.  
  152.       Node data: Tick THEN magnitude
  153.  
  154.  
  155.  
  156.                            Impulse Instrument Format
  157.  
  158.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  159.       ┌───┬───┬───┬───┬───────────────────────────────────────────────┐
  160. 0000: │'I'│'M'│'P'│'I'│ DOS FileName (12345678.123)                   │
  161.       ├───┼───┼───┼───┼───────┬───┬───┬───┬───┬───┬───┬───────┬───┬───┤
  162. 0010: │00h│NNA│DCT│DCA│FadeOut│PPS│PPC│GbV│DfP│RV │RP │TrkVers│NoS│ x │
  163.       ├───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┴───┴───────┴───┴───┤
  164. 0020: │ Instrument Name, max 26 bytes, includes NUL...................│
  165.       ├───────────────────────────────────────┬───┬───┬───┬───┬───┬───┤
  166. 0030: │.......................................│ x │ x │ x │ x │ x │ x │
  167.       ├───────────────────────────────────────┴───┴───┴───┴───┴───┴───┤
  168. 0040: │ Note-Sample/Keyboard Table, Length = 240 bytes................│
  169.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  170.  
  171.       ├───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┤
  172. 0130: │ Envelopes.....................................................│
  173.       ├───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┤
  174.  
  175.         NNA = New Note Action
  176.                 0 = Cut                 1 = Continue
  177.                 2 = Note off            3 = Note fade
  178.  
  179.         DCT = Duplicate Check Type
  180.                 0 = Off                 1 = Note
  181.                 2 = Sample              3 = Instrument
  182.  
  183.         DNA: Duplicate Check Action
  184.                 0 = Cut
  185.                 1 = Note Off
  186.                 2 = Note fade
  187.  
  188.       FadeOut:  Ranges between 0 and 128, but the fadeout "Count" is 1024
  189.                 See the Last section on how this works.
  190.                 Fade applied when:
  191.                 1) Note fade NNA is selected and triggered (by another note)
  192.                 2) Note off NNA is selected with no volume envelope
  193.                    or volume envelope loop
  194.                 3) Volume envelope end is reached
  195.  
  196.         PPS: Pitch-Pan separation, range -32 -> +32
  197.         PPC: Pitch-Pan center: C-0 to B-9 represented as 0->119 inclusive
  198.  
  199.         GbV: Global Volume, 0->128
  200.         DfP: Default Pan, 0->64, &128 => Don't use
  201.         RV: Random volume variation (percentage)
  202.         RP: Random panning variation (panning change - not implemented yet)
  203.  
  204.       TrkVers:  Tracker version used to save the instrument. This is only
  205.                 used in the instrument files.
  206.       NoS:      Number of samples associated with instrument. This is only
  207.                 used in the instrument files.
  208.  
  209.       Note-Sample/Keyboard Table.
  210.        Each note of the instrument is first converted to a sample number
  211.        and a note (C-0 -> B-9). These are stored as note/sample byte pairs
  212.        (note first, range 0->119 for C-0 to B-9, sample ranges from
  213.        1-99, 0=no sample)
  214.  
  215.                                 Envelope layout
  216.  
  217.         Envelopes: 3 structures, first for volume (130h), second for
  218.                    panning (182h), third for pitch (1D4h).
  219.  
  220.                    Each is structured as such:
  221.  
  222.         0   1   2   3   4   5   6.......
  223.       ┌───┬───┬───┬───┬───┬───┬───────────────────────────────────┬───┐
  224. xxxx: │Flg│Num│LpB│LpE│SLB│SLE│ Node points, 25 sets, 75 bytes....│ x │
  225.       ├───┼───┼───┼───┼───┼───┼───┬───┬───┬───┬───┬───┬───┬───┬───┼───┤
  226.  
  227.         Flg: Bit 0: Envelope on/off, 1 = on, 0 = off
  228.              Bit 1: Loop on/off, 1 = on, 0 = off
  229.              Bit 2: SusLoop on/off, 1 = on, 0 = off
  230.  
  231.         Num = Number of node points
  232.  
  233.         LpB = Loop beginning            SLB = Sustain loop beginning
  234.         LpE = Loop end                  SLE = Sustain loop end
  235.  
  236.         Node point = 1 byte for y-value
  237.                         (0->64 for vol, -32->+32 for panning or pitch)
  238.                      1 word (2 bytes) for tick number (0->999)
  239.  
  240.         Total length of an instrument is 547 bytes, but 554 bytes are
  241.         written, just to simplify the loading of the old format. (Hence
  242.         there are 7 'wasted' bytes per instrument)
  243.  
  244.  
  245.  
  246.                              Impulse Sample Format
  247.  
  248.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  249.       ┌───┬───┬───┬───┬───────────────────────────────────────────────┐
  250. 0000: │'I'│'M'│'P'│'S'│ DOS Filename (12345678.123)                   │
  251.       ├───┼───┼───┼───┼───────────────────────────────────────────────┤
  252. 0010: │00h│GvL│Flg│Vol│ Sample Name, max 26 bytes, includes NUL.......│
  253.       ├───┴───┴───┴───┴───────────────────────────────────────┬───────┤
  254. 0020: │.......................................................│Convert│
  255.       ├───────────────┬───────────────┬───────────────┬───────┴───────┤
  256. 0030: │ Length        │ Loop Begin    │ Loop End      │ C5Speed       │
  257.       ├───────────────┼───────────────┼───────────────┼───┬───┬───┬───┤
  258. 0040: │ SusLoop Begin │ SusLoop End   │ SamplePointer │ViS│ViD│ViR│ViT│
  259.       └───────────────┴───────────────┴───────────────┴───┴───┴───┴───┘
  260.  
  261. The cache file has the following pieces of information added on:
  262.  
  263.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  264.       ┌───────────────┬───────┬───────┬───┬───────────────────────────┐
  265. 0050: │ File Size     │ Date  │ Time  │Fmt│...........................│
  266.       └───────────────┴───────┴───────┴───┴───────────────────────────┘
  267.  
  268.         Fmt. 0 = unchecked. 1 = directory, 2 = it sample, 3 = st sample
  269.  
  270.  
  271.       GvL:      Global volume for instrument, ranges from 0->64
  272.       Flg:      Bit 0. On = sample associated with header.
  273.                 Bit 1. On = 16 bit, Off = 8 bit.
  274.                 Bit 2. On = stereo, Off = mono. Stereo samples not supported yet
  275.                 Bit 3. Reserved
  276.                 Bit 4. On = Use loop
  277.                 Bit 5. On = Use sustain loop
  278.                 Bit 6. On = Ping Pong loop, Off = Forwards loop
  279.                 Bit 7. On = Ping Pong Sustain loop, Off = Forwards Sustain loop
  280.       Vol:      Default volume for instrument
  281.  
  282.       Length:   Length of sample in no. of samples NOT no. of bytes
  283.       LoopBeg:  Start of loop (no of samples in, not bytes)
  284.       Loop End: Sample no. AFTER end of loop
  285.       C5Speed:  Number of bytes a second for C-5 (ranges from 0->9999999)
  286.       SusLBeg:  Start of sustain loop
  287.       SusLEnd:  Sample no. AFTER end of sustain loop
  288.  
  289.       SmpPoint: 'Long' Offset of sample in file.
  290.  
  291.       ViS:      Vibrato Speed, ranges from 0->64
  292.       ViD:      Vibrato Depth, ranges from 0->64
  293.       ViT:      Vibrato waveform type.
  294.                         0=Sine wave
  295.                         1=Ramp down
  296.                         2=Square wave
  297.                         3=Random (speed is irrelevant)
  298.       ViR:      Vibrato Rate, rate at which vibrato is applied (0->64)
  299.  
  300.         The depth of the vibrato at any point is worked out in the following
  301.         way:
  302.           Every processing cycle, the following occurs:
  303.                 1) Mov AX, [SomeVariableNameRelatingToVibrato]
  304.                 2) Add AL, Rate
  305.                 3) AdC AH, 0
  306.                 4) AH contains the depth of the vibrato as a fine-linear slide.
  307.                 5) Mov [SomeVariableNameRelatingToVibrato], AX  ; For the next
  308.                                                                 ; cycle.
  309.  
  310.         For those that don't understand assembly, then the depth is
  311.         basically the running-sum of the rate divided by 256.
  312.  
  313.         Sample vibrato uses a table 256-bytes long
  314.  
  315.    Convert - bits other than bit 0 are used internally for the loading
  316.              of alternative formats.
  317.         Bit 0:
  318.          Off: Samples are unsigned   } IT 2.02 and above use signed samples
  319.           On: Samples are signed     } IT 2.01 and below use unsigned samples
  320.         Bit 1:
  321.          Off: Intel lo-hi byte order for 16-bit samples    } Safe to ignore
  322.          On: Motorola hi-lo byte order for 16-bit samples  } these values
  323.         Bit 2:                                             } for now...
  324.          Off: Samples are stored as PCM values             }
  325.           On: Samples are stored as Delta values           }
  326.         Bit 3:                                             }
  327.           On: Samples are stored as byte delta values      }
  328.               (for PTM loader)                             }
  329.         Bit 4:                                             }
  330.           On: Samples are stored as TX-Wave 12-bit values  }
  331.  
  332.  
  333.  
  334.                              Impulse Pattern Format
  335.  
  336.         0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
  337.       ┌───────┬───────┬───┬───┬───┬───┬───────────────────────────────┐
  338. 0000: │Length │ Rows  │ x │ x │ x │ x │ Packed data................   │
  339.       ├───┬───┼───┬───┼───┼───┼───┼───┼───┬───┬───┬───┬───┬───┬───┬───┤
  340.  
  341.       Length:   Length of packed pattern, not including the 8 byte header
  342.                 Note that the pattern + the 8 byte header will ALWAYS
  343.                 be less than 64k
  344.       Rows:     Number of rows in this pattern (Ranges from 32->200)
  345.  
  346.       Patterns are unpacked by the following pseudocode... (this may look
  347.       horrible, but in practise, it's just as conveninent as the S3M
  348.       pattern format for playback (but not for display))
  349.  
  350.       GetNextChannelMarker:
  351.         Read byte into channelvariable.
  352.         if(channelvariable = 0) then end of row
  353.         Channel = (channelvariable-1) & 63              ; Channel is 0 based.
  354.         if(channelvariable & 128) then read byte into maskvariable
  355.           else maskvariable = previousmaskvariable for current channel
  356.  
  357.         if(maskvariable & 1), then read note. (byte value)
  358.                 // Note ranges from 0->119 (C-0 -> B-9)
  359.                 // 255 = note off, 254 = notecut
  360.                 // Others = note fade
  361.  
  362.         if(maskvariable & 2), then read instrument (byte value)
  363.                 // Instrument ranges from 1->99
  364.  
  365.         if(maskvariable & 4), then read volume/panning (byte value)
  366.                 // Volume ranges from 0->64
  367.                 // Panning ranges from 0->64, mapped onto 128->192
  368.                 // Prepare for the following also:      }
  369.                 //  65->74 = Fine volume down           } Not implemented
  370.                 //  75->84 = Fine volume up             } at the moment!
  371.                 //  85->94 = Volume slide down          }
  372.                 //  95->104 = Volume slide up           }
  373.                 //  105->114 = Pan slide left           }
  374.                 //  115->124 = Pan slide right          }
  375.  
  376.                 //  193->255 WILL probably be assigned meanings too..
  377.  
  378.         Effects 65 is equivalent to DF0, 66 is equivalent to DF1 -> 74 = DF9
  379.         Similarly for 75-84 (DxF), 85-94 (D0x), 95->104 (Dx0),
  380.         Pan slide left (Px0), Pan slide right (P0x).
  381.  
  382.         These effects will ALL share the same memory, so that in this sequence:
  383.           (DF1)   = 66    -> Volume slide down by 1
  384.           (DF0)   = 65    -> Volume slide down by one again
  385.           (D0F)   = 75    -> volume slide up by 1
  386.           (P00)   = 105   -> Pan slide left by 1
  387.           (P00)   = 115   -> Pan slide right by 1
  388.  
  389.           (DF2)   = 66    -> Volume slide down by 2
  390.           (DF0)   = 65    -> Volume slide down by 2 again
  391.           (D0F)   = 75    -> volume slide up by 2
  392.           (P00)   = 105   -> Pan slide left by 2
  393.           (P00)   = 115   -> Pan slide right by 2
  394.  
  395.         if(maskvariable & 8), then read command (byte value) and commandvalue
  396.                 // Valid ranges from 0->31 (0=no effect, 1=A, 2=B, 3=C, etc.)
  397.  
  398.         if(maskvariable & 16), then note = lastnote for channel
  399.         if(maskvariable & 32), then instrument = lastinstrument for channel
  400.         if(maskvariable & 64), then volume/pan = lastvolume/pan for channel
  401.         if(maskvariable & 128), then {
  402.                 command = lastcommand for channel and
  403.                 commandvalue = lastcommandvalue for channel
  404.         }
  405.         Goto GetNextChannelMarker
  406.  
  407.  
  408.  
  409.                                   Mathematics
  410.  
  411. Abbreviations:
  412.  FV = Final Volume (Ranges from 0 to 128). In versions 1.04+, mixed output
  413.       devices are reduced further to a range from 0 to 64 due to lack of
  414.       memory.
  415.  Vol = Volume at which note is to be played. (Ranges from 0 to 64)
  416.  SV = Sample Volume (Ranges from 0 to 64)
  417.  IV = Instrument Volume (Ranges from 0 to 128)
  418.  CV = Channel Volume (Ranges from 0 to 64)
  419.  GV = Global Volume (Ranges from 0 to 128)
  420.  VEV = Volume Envelope Value (Ranges from 0 to 64)
  421.  
  422. In Sample mode, the following calculation is done:
  423.  FV = Vol * SV * CV * GV / 262144               ; Note that 262144 = 2^18
  424.                                                 ; So bit shifting can be done.
  425.  
  426. In Instrument mode the following procedure is used:
  427.  
  428.  1) Update volume envelope value. Check for loops / end of envelope.
  429.  2) If end of volume envelope (ie. position >= 200 or VEV = 0FFh), then turn
  430.         on note fade.
  431.  3) If notefade is on, then NoteFadeComponent (NFC) = NFC - FadeOut
  432.         ; NFC should be initialised to 1024 when a note is played.
  433.  4) FV = Vol * SV * IV * CV * GV * VEV * NFC / 2^40
  434.                                                 ; Note that 8589934592 = 2^33
  435.  
  436. Linear slides work like this:
  437.  Final frequency = Original frequency * 2^(SlideValue/768)
  438.  
  439. (I used a lookup table for the multipliers here)
  440.  
  441. For command Exx, SlideValue = -4*EffectValue
  442. For command EEx, SlideValue = -EffectValue
  443. For command Fxx, SlideValue = 4*EffectValue
  444. For command FEx, SlideValue = EffectValue
  445.  
  446. Note that sample vibrato always uses Linear slides.
  447.  
  448. Notes about effects (as compared to other module formats)
  449.  
  450. C               This is now in *HEX*. (Used to be in decimal in ST3)
  451. E/F/G/H/U       You need to check whether the song uses Amiga/Linear slides.
  452. H/U             Vibrato in Impulse Tracker is two times finer than in
  453.                 any other tracker and is updated EVERY tick.
  454.                 If "Old Effects" is *ON*, then the vibrato is played in the
  455.                 normal manner (every non-row tick and normal depth)
  456. E/F/G           These commands ALL share the same memory.
  457. Oxx             Offsets to samples are to the 'xx00th' SAMPLE. (ie. for
  458.                 16 bit samples, the offset is xx00h*2)
  459.                 Oxx past the sample end will be ignored, unless "Old Effects"
  460.                 is ON, in which case the Oxx will play from the end of the
  461.                 sample.
  462. Yxy             This uses a table 4 times larger (hence 4 times slower) than
  463.                 vibrato or tremelo. If the waveform is set to random, then
  464.                 the 'speed' part of the command is interpreted as a delay.
  465.  
  466. If you read through this document and there are ANY points which you have
  467. troubles with (and have to try out), then let me know - because someone
  468. else will have the same questions - and I'd like to make this DOC as easy
  469. to understand as possible.
  470.  
  471. For Panning....
  472.  Here's the rough procedure used:
  473.  
  474.   NotePan = ChannelPan
  475.   if InstrumentPan=On then NotePan = InstrumentPan
  476.   NotePan = NotePan+(InstrumentNote-PPCenter)*PPSeparation/8
  477.  
  478. Pitch Envelopes
  479.  Each value on the envelope equates to half a semitone. This is interpolated
  480.  64 times for smooth pitch sliding. Positive values indicate a pitch variation
  481.  UP of x semitones, negative values indicate a pitch variation down.
  482.  
  483.                                   General Info
  484.  
  485. The player in Impulse Tracker 'allocates' channels to notes whenever they
  486. are *PLAYED*. In sample mode, the allocation is simple:
  487.                         Virtual Channel = 'Host' channel
  488.  
  489. In instrument mode, the following procedure is used:
  490.  
  491.     Check if channel is already playing ---Yes--> set 'background' flag on.
  492.                 |                                 'Trigger' NNA. If NNA=cut,
  493.                 No                                then use this virtual
  494.                 |                                 channel.
  495.                 |                                          |
  496.                 |<------------------ else -----------------/
  497.                 |
  498.                 v
  499.     Search and find the first non-active virtual channel.
  500.                 |
  501.     Non-active channel found? ----Yes----> Use this for playback.
  502.                 |
  503.                 No
  504.                 |
  505.                 v
  506.    Search through and find the channel of lowest volume that is in the
  507.    'background' (ie. no longer controlled directly)
  508.                 |
  509.    Background channel found? ----Yes----> Use this for playback.
  510.                 |
  511.                 No
  512.                 |
  513.                 v
  514.    Return error - the note is *NOT* allocated a channel, and hence is not
  515.    played.
  516.  
  517.    Actually, this is quite a simple process... just that it's another of
  518.    those 'hassles' to have to write...
  519.  
  520.  
  521.  
  522.                                 Internal Tables
  523.  
  524. FineSineData       Label   Byte
  525.         DB       0,  2,  3,  5,  6,  8,  9, 11, 12, 14, 16, 17, 19, 20, 22, 23
  526.         DB      24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44
  527.         DB      45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59
  528.         DB      59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64
  529.         DB      64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60
  530.         DB      59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46
  531.         DB      45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26
  532.         DB      24, 23, 22, 20, 19, 17, 16, 14, 12, 11,  9,  8,  6,  5,  3,  2
  533.         DB       0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23
  534.         DB     -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44
  535.         DB     -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59
  536.         DB     -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64
  537.         DB     -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60
  538.         DB     -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46
  539.         DB     -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26
  540.         DB     -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2
  541.  
  542. FineRampDownData   Label   Byte
  543.         DB      64, 63, 63, 62, 62, 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 56
  544.         DB      56, 55, 55, 54, 54, 53, 53, 52, 52, 51, 51, 50, 50, 49, 49, 48
  545.         DB      48, 47, 47, 46, 46, 45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40
  546.         DB      40, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 34, 34, 33, 33, 32
  547.         DB      32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24
  548.         DB      24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16
  549.         DB      16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8
  550.         DB       8,  7,  7,  6,  6,  5,  5,  4,  4,  3,  3,  2,  2,  1,  1,  0
  551.         DB       0, -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6, -7, -7, -8
  552.         DB      -8, -9, -9,-10,-10,-11,-11,-12,-12,-13,-13,-14,-14,-15,-15,-16
  553.         DB     -16,-17,-17,-18,-18,-19,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24
  554.         DB     -24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32
  555.         DB     -32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40
  556.         DB     -40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48
  557.         DB     -48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-55,-55,-56
  558.         DB     -56,-57,-57,-58,-58,-59,-59,-60,-60,-61,-61,-62,-62,-63,-63,-64
  559.  
  560. FineSquareWave     Label   Byte
  561.         DB      128 Dup (64), 128 Dup (0)
  562.  
  563. EmptyPattern            Label
  564.         DW      64, 64, 0, 0
  565.         DB      64 Dup (0)
  566.  
  567. ;───────────────────────────────────────────────────────────────────────────────
  568.  
  569. PitchTable              Label   DWord   ; Values are 16.16 bit
  570.    DW      2048, 0,   2170, 0,   2299, 0,   2435, 0,   2580, 0,   2734, 0 ; C-0
  571.    DW      2896, 0,   3069, 0,   3251, 0,   3444, 0,   3649, 0,   3866, 0 ;>B-0
  572.  
  573.    DW      4096, 0,   4340, 0,   4598, 0,   4871, 0,   5161, 0,   5468, 0 ; C-1
  574.    DW      5793, 0,   6137, 0,   6502, 0,   6889, 0,   7298, 0,   7732, 0 ;>B-1
  575.  
  576.    DW      8192, 0,   8679, 0,   9195, 0,   9742, 0,   10321, 0,  10935, 0
  577.    DW      11585, 0,  12274, 0,  13004, 0,  13777, 0,  14596, 0,  15464, 0
  578.  
  579.    DW      16384, 0,  17358, 0,  18390, 0,  19484, 0,  20643, 0,  21870, 0
  580.    DW      23170, 0,  24548, 0,  26008, 0,  27554, 0,  29193, 0,  30929, 0
  581.  
  582.    DW      32768, 0,  34716, 0,  36781, 0,  38968, 0,  41285, 0,  43740, 0
  583.    DW      46341, 0,  49097, 0,  52016, 0,  55109, 0,  58386, 0,  61858, 0
  584.  
  585.    DW      0, 1,      3897, 1,   8026, 1,   12400, 1,  17034, 1,  21944, 1
  586.    DW      27146, 1,  32657, 1,  38496, 1,  44682, 1,  51236, 1,  58179, 1
  587.  
  588.    DW      0, 2,      7794, 2,   16051, 2,  24800, 2,  34068, 2,  43888, 2
  589.    DW      54292, 2,  65314, 2,  11456, 3,  23828, 3,  36936, 3,  50823, 3
  590.  
  591.    DW      0, 4,      15588, 4,  32103, 4,  49600, 4,  2601, 5,   22240, 5
  592.    DW      43048, 5,  65092, 5,  22912, 6,  47656, 6,  8336, 7,   36110, 7
  593.  
  594.    DW      0, 8,      31176, 8,  64205, 8,  33663, 9,  5201, 10,  44481, 10
  595.    DW      20559, 11, 64648, 11, 45823, 12, 29776, 13, 16671, 14, 6684, 15
  596.  
  597.    DW      0, 16,     62352, 16, 62875, 17, 1790,  19, 10403, 20, 23425, 21
  598.    DW      41118, 22, 63761, 23, 26111, 25, 59552, 26, 33342, 28, 13368, 30
  599.  
  600. FineLinearSlideUpTable  Label ; Values are 16.16 bit
  601.         DW      0, 1,     59, 1,    118, 1,   178, 1,   237, 1    ; 0->4
  602.         DW      296, 1,   356, 1,   415, 1,   475, 1,   535, 1    ; 5->9
  603.         DW      594, 1,   654, 1,   714, 1,   773, 1,   833, 1    ; 10->14
  604.         DW      893, 1                                            ; 15
  605.  
  606. LinearSlideUpTable      Label ; Value = 2^(Val/192), Values are 16.16 bit
  607.         DW      0,     1, 237,   1, 475,   1, 714,   1, 953,  1  ; 0->4
  608.         DW      1194,  1, 1435,  1, 1677,  1, 1920,  1, 2164, 1  ; 5->9
  609.         DW      2409,  1, 2655,  1, 2902,  1, 3149,  1, 3397, 1  ; 10->14
  610.         DW      3647,  1, 3897,  1, 4148,  1, 4400,  1, 4653, 1  ; 15->19
  611.         DW      4907,  1, 5157,  1, 5417,  1, 5674,  1, 5932, 1  ; 20->24
  612.         DW      6190,  1, 6449,  1, 6710,  1, 6971,  1, 7233, 1  ; 25->29
  613.         DW      7496,  1, 7761,  1, 8026,  1, 8292,  1, 8559, 1  ; 30->34
  614.         DW      8027,  1, 9096,  1, 9366,  1, 9636,  1, 9908, 1  ; 35->39
  615.         DW      10181, 1, 10455, 1, 10730, 1, 11006, 1, 11283,1  ; 40->44
  616.         DW      11560, 1, 11839, 1, 12119, 1, 12400, 1, 12682,1  ; 45->49
  617.         DW      12965, 1, 13249, 1, 13533, 1, 13819, 1, 14106,1  ; 50->54
  618.         DW      14394, 1, 14684, 1, 14974, 1, 15265, 1, 15557,1  ; 55->59
  619.         DW      15850, 1, 16145, 1, 16440, 1, 16737, 1, 17034,1  ; 60->64
  620.         DW      17333, 1, 17633, 1, 17933, 1, 18235, 1, 18538,1  ; 65->69
  621.         DW      18842, 1, 19147, 1, 19454, 1, 19761, 1, 20070,1  ; 70->74
  622.         DW      20379, 1, 20690, 1, 21002, 1, 21315, 1, 21629,1  ; 75->79
  623.         DW      21944, 1, 22260, 1, 22578, 1, 22897, 1, 23216,1  ; 80->84
  624.         DW      23537, 1, 23860, 1, 24183, 1, 24507, 1, 24833,1  ; 85->89
  625.         DW      25160, 1, 25488, 1, 25817, 1, 26148, 1, 26479,1  ; 90->94
  626.         DW      26812, 1, 27146, 1, 27481, 1, 27818, 1, 28155,1  ; 95->99
  627.         DW      28494, 1, 28834, 1, 29175, 1, 29518, 1, 29862,1  ; 100->104
  628.         DW      30207, 1, 30553, 1, 30900, 1, 31248, 1, 31599,1  ; 105->109
  629.         DW      31951, 1, 32303, 1, 32657, 1, 33012, 1, 33369,1  ; 110->114
  630.         DW      33726, 1, 34085, 1, 34446, 1, 34807, 1, 35170,1  ; 115->119
  631.         DW      35534, 1, 35900, 1, 36267, 1, 36635, 1, 37004,1  ; 120->124
  632.         DW      37375, 1, 37747, 1, 38121, 1, 38496, 1, 38872,1  ; 125->129
  633.         DW      39250, 1, 39629, 1, 40009, 1, 40391, 1, 40774,1  ; 130->134
  634.         DW      41158, 1, 41544, 1, 41932, 1, 42320, 1, 42710,1  ; 135->139
  635.         DW      43102, 1, 43495, 1, 43889, 1, 44285, 1, 44682,1  ; 140->144
  636.         DW      45081, 1, 45481, 1, 45882, 1, 46285, 1, 46690,1  ; 145->149
  637.         DW      47095, 1, 47503, 1, 47917, 1, 48322, 1, 48734,1  ; 150->154
  638.         DW      49147, 1, 49562, 1, 49978, 1, 50396, 1, 50815,1  ; 155->159
  639.         DW      51236, 1, 51658, 1, 52082, 1, 52507, 1, 52934,1  ; 160->164
  640.         DW      53363, 1, 53793, 1, 54224, 1, 54658, 1, 55092,1  ; 165->169
  641.         DW      55529, 1, 55966, 1, 56406, 1, 56847, 1, 57289,1  ; 170->174
  642.         DW      57734, 1, 58179, 1, 58627, 1, 59076, 1, 59527,1  ; 175->179
  643.         DW      59979, 1, 60433, 1, 60889, 1, 61346, 1, 61805,1  ; 180->184
  644.         DW      62265, 1, 62727, 1, 63191, 1, 63657, 1, 64124,1  ; 185->189
  645.         DW      64593, 1, 65064, 1, 0,     2, 474,   2, 950,  2  ; 190->194
  646.         DW      1427,  2, 1906,  2, 2387,  2, 2870,  2, 3355, 2  ; 195->199
  647.         DW      3841,  2, 4327,  2, 4818,  2, 5310,  2, 5803, 2  ; 200->204
  648.         DW      6298,  2, 6795,  2, 7294,  2, 7794,  2, 8296, 2  ; 205->209
  649.         DW      8800,  2, 9306,  2, 9814,  2, 10323, 2, 10835,2  ; 210->214
  650.         DW      11348, 2, 11863, 2, 12380, 2, 12899, 2, 13419,2  ; 215->219
  651.         DW      13942, 2, 14467, 2, 14993, 2, 15521, 2, 16051,2  ; 220->224
  652.         DW      16583, 2, 17117, 2, 17653, 2, 18191, 2, 18731,2  ; 225->229
  653.         DW      19273, 2, 19817, 2, 20362, 2, 20910, 2, 21460,2  ; 230->234
  654.         DW      22011, 2, 22565, 2, 23121, 2, 23678, 2, 24238,2  ; 235->239
  655.         DW      24800, 2, 25363, 2, 25929, 2, 25497, 2, 27067,2  ; 240->244
  656.         DW      27639, 2, 28213, 2, 28789, 2, 29367, 2, 29947,2  ; 245->249
  657.         DW      30530, 2, 31114, 2, 31701, 2, 32289, 2, 32880, 2 ; 250->254
  658.         DW      33473, 2, 34068, 2                               ; 255->256
  659.  
  660. FineLinearSlideDownTable Label ; Values are 0.16 bit
  661.         DW      65535, 65477, 65418, 65359, 65300, 65241, 65182, 65359 ; 0->7
  662.         DW      65065, 65006, 64947, 64888, 64830, 64772, 64713, 64645 ; 8->15
  663.  
  664. LinearSlideDownTable    Label ; Values are 0.16 bit
  665.         DW      65535, 65300, 65065, 64830, 64596, 64364, 64132, 63901 ; 0->7
  666.         DW      63670, 63441, 63212, 62984, 62757, 62531, 62306, 62081 ; 8->15
  667.         DW      61858, 61635, 61413, 61191, 60971, 60751, 60532, 60314 ; 16->23
  668.         DW      60097, 59880, 59664, 59449, 59235, 59022, 58809, 58597 ; 24->31
  669.         DW      58386, 58176, 57966, 57757, 57549, 57341, 57135, 56929 ; 32->39
  670.         DW      56724, 56519, 56316, 56113, 55911, 55709, 55508, 55308 ; 40->47
  671.         DW      55109, 54910, 54713, 54515, 54319, 54123, 53928, 53734 ; 48->55
  672.         DW      53540, 53347, 53155, 52963, 52773, 52582, 52393, 52204 ; 56->63
  673.         DW      52016, 51829, 51642, 51456, 51270, 51085, 50901, 50718 ; 64->71
  674.         DW      50535, 50353, 50172, 49991, 49811, 49631, 49452, 49274 ; 72->79
  675.         DW      49097, 48920, 48743, 48568, 48393, 48128, 48044, 47871 ; 80->87
  676.         DW      47699, 47527, 47356, 47185, 47015, 46846, 46677, 46509 ; 88->95
  677.         DW      46341, 46174, 46008, 45842, 45677, 45512, 45348, 45185 ; 96->103
  678.         DW      45022, 44859, 44698, 44537, 44376, 44216, 44057, 43898 ;104->111
  679.         DW      43740, 43582, 43425, 43269, 43113, 42958, 42803, 42649 ;112->119
  680.         DW      42495, 42342, 42189, 42037, 41886, 41735, 41584, 41434 ;120->127
  681.         DW      41285, 41136, 40988, 10840, 40639, 40566, 40400, 40253 ;128->135
  682.         DW      40110, 39965, 39821, 39678, 39535, 39392, 39250, 39109 ;136->143
  683.         DW      38968, 38828, 38688, 38548, 38409, 38271, 38133, 37996 ;144->151
  684.         DW      37859, 37722, 37586, 37451, 37316, 37181, 37047, 36914 ;152->159
  685.         DW      36781, 36648, 36516, 36385, 36254, 36123, 35993, 35863 ;160->167
  686.         DW      35734, 35605, 35477, 35349, 35221, 35095, 34968, 34842 ;168->175
  687.         DW      34716, 34591, 34467, 34343, 34219, 34095, 33973, 33850 ;176->183
  688.         DW      33728, 33607, 33486, 33365, 33245, 33125, 33005, 32887 ;184->191
  689.         DW      32768, 32650, 32532, 32415, 32298, 32182, 32066, 31950 ;192->199
  690.         DW      31835, 31720, 31606, 31492, 31379, 31266, 31153, 31041 ;200->207
  691.         DW      30929, 30817, 30706, 30596, 30485, 30376, 30226, 30157 ;208->215
  692.         DW      30048, 29940, 29832, 29725, 29618, 29511, 29405, 29299 ;216->223
  693.         DW      29193, 29088, 28983, 28879, 28774, 28671, 28567, 28464 ;224->231
  694.         DW      28362, 28260, 28158, 28056, 27955, 27855, 27754, 27654 ;232->239
  695.         DW      27554, 27455, 27356, 27258, 27159, 27062, 26964, 26867 ;240->247
  696.         DW      26770, 26674, 26577, 26482, 26386, 26291, 26196, 26102 ;248->255
  697.         DW      26008                                                  ; 256
  698.  
  699. ;───────────────────────────────────────────────────────────────────────────────
  700.  
  701.                                   Effect Info
  702.  
  703. Here's about all the info I can think of for effects. "Process" variables are
  704. variables used internally by effects to control the direction of playback..
  705. This section has not been completed yet.
  706.  
  707. First, here is the rough flow chart for processing information, it's not fully
  708. detailed, but all of the important steps are detailed.
  709.  
  710.        ┌─────────────────────────────────────────────────────────┐
  711.        │ Set note volume to volume set for each channel          │
  712.        │ Set note frequency to frequency set for each channel    │
  713.        └────────────┬────────────────────────────────────────────┘
  714.                     │
  715.        ┌────────────┴────────────┐
  716.        │ Decrease tick counter   │        Yes
  717.        │  Is tick counter 0 ?    ├─────────────────────────┐
  718.        └────────────┬────────────┘                         │
  719.                     │                                      │
  720.                 No  │                ┌─────────────────────┴──────────────────┐
  721.        ┌────────────┴────────────┐   │ Tick counter = Tick counter set        │
  722.        │ Update effects for each │   │                  (the current 'speed') │
  723.        │  channel as required.   │   │      Decrease Row counter.             │
  724.        │                         │   │        Is row counter 0?               │
  725.        └───┬─────────────────────┘   └────────────┬──────────┬────────────────┘
  726.            │                                  No  │          │
  727.            │                ┌─────────────────────┘          │ Yes
  728.            │                │                                │
  729.            │  ┌─────────────┴──────────────┐ ┌───────────────┴────────────────┐
  730.            │  │ Call init-effects for each │ │  Row counter = 1               │
  731.            │  │ channel.                   │ │                                │
  732.            │  └──────────────┬─────────────┘ │ Increase ProcessRow            │
  733.            │                 │               │ Is ProcessRow > NumberOfRows?  │
  734.            ├─────────────────┘               └────────┬──────────────────┬────┘
  735.            │                                      Yes │                  │ No
  736.            │         ┌────────────────────────────────┴──────────────┐   │
  737.            │         │  ProcessRow = BreakRow                        │   │
  738.            │         │  BreakRow = 0                                 │   │
  739.            │         │  Increase ProcessOrder                        │   │
  740.            │         │  while Order[ProcessOrder] = 0xFEh,           │   │
  741.            │         │                         increase ProcessOrder │   │
  742.            │         │  if Order[ProcessOrder] = 0xFFh,              │   │
  743.            │         │                         ProcessOrder = 0      │   │
  744.            │         │  CurrentPattern = Order[ProcessOrder]         │   │
  745.            │         └─────────────────────┬─────────────────────────┘   │
  746.            │                               │                             │
  747.            │                               ├─────────────────────────────┘
  748.            │                               │
  749.            │         ┌─────────────────────┴──────────────────────────┐
  750.            │         │ CurrentRow = ProcessRow                        │
  751.            │         │ Update PatternData (includes jumping to the    │
  752.            │         │  appropriate row if required, and getting the  │
  753.            │         │  NumberOfRows for the pattern)                 │
  754.            │         └─────────────────────┬──────────────────────────┘
  755.            │                               │
  756.            ├───────────────────────────────┘
  757.            │
  758.        ┌───┴───────────────┐       Yes        ┌───────────────────────────────┐
  759.        │ Instrument mode?  ├──────────────────┤ Update Envelopes as required  │
  760.        └───┬───────────────┘                  │ Update fadeout as required    │
  761.            │                                  │ Calculate final volume if req │
  762.            │ No (Sample mode)                 │ Calculate final pan if req    │
  763.            │                                  │ Process sample vibrato if req │
  764.        ┌───┴─────────────────────────────────┐└───────────────┬───────────────┘
  765.        │ Calculate final volume if required  │                │
  766.        │ Calculate final pan if requried     │                │
  767.        │ Process sample vibrato if required  │                │
  768.        └───┬─────────────────────────────────┘                │
  769.            │                                                  │
  770.            │                                                  │
  771.            └─────────────────────────┬────────────────────────┘
  772.                                      │
  773.                     ┌────────────────┴──────────────────┐
  774.                     │ Output sound!!!                   │
  775.                     └───────────────────────────────────┘
  776.  
  777. Axx     Set Tempo
  778.  
  779.         if (xx != 0) {
  780.                 Maxtick = xx;
  781.                 Currenttick = xx;
  782.         }
  783.  
  784. Bxx     Jump to Order
  785.  
  786.         ProcessOrder = xx - 1;
  787.         ProcessRow = 0xFFFE; // indicates new pattern internally for IT...
  788.  
  789. Cxx     Break to Row
  790.  
  791.         BreakRow = xx;
  792.         ProcessRow = 0xFFFE;
  793.  
  794. Dxx     Volume slide down
  795.  
  796.         if (xx == 0) then xx = last xx for (Dxx/Kxx/Lxx) for this channel.
  797.  
  798.         Order of testing: Dx0, D0x, DxF, DFx
  799.  
  800. Dx0     Set effect update for channel enabled if channel is ON.
  801.         If x = F, then slide up volume by 15 straight away also (for S3M compat)
  802.         Every update, add x to the volume, check and clip values > 64 to 64
  803. D0x     Set effect update for channel enabled if channel is ON.
  804.         If x = F, then slide down volume by 15 straight away also (for S3M)
  805.         Every update, subtract x from the volume, check and clip values < 0 to 0
  806. DxF     Add x to volume straight away. Check and clip values > 64 to 64
  807. DFx     Subtract x from volume straight away. Check and clip values < 0 to 0
  808.  
  809. Hxy     Vibrato
  810.  
  811.         if (x != 0) {
  812.                 speed = 4*x;
  813.         }
  814.         if (y != 0) {
  815.                 depth = y * 4;
  816.                 if(OldEffects) depth <<= 1;
  817.         }
  818.         Set effect update for channel enabled if channel is ON.
  819.         Goto InitVibrato (explained later)
  820.  
  821. Ixy     Tremor, ontime x, offtime y
  822.  
  823.         if (x != 0) {
  824.                 ontime = x;
  825.                 if (oldeffects) ontime++;
  826.         }
  827.         if (y != 0) {
  828.                 offtime = y;
  829.                 if (oldeffects) offtime++;
  830.         }
  831.  
  832. Nxx     Channel volume slide down
  833.  
  834.         if (xx == 0) then xx = last Nxx for this channel.
  835.  
  836.         Order of testing: Nx0, N0x, NxF, NFx
  837.  
  838. Nx0     Set effect update for channel enabled.
  839.         Every update, add x to the volume, check and clip values > 64 to 64
  840. N0x     Set effect update for channel enabled.
  841.         Every update, subtract x from the volume, check and clip values < 0 to 0
  842. NxF     Add x to volume straight away. Check and clip values > 64 to 64
  843. NFx     Subtract x from volume straight away. Check and clip values < 0 to 0
  844.  
  845. Uxy     Fine Vibrato
  846.  
  847.         if (x != 0) {
  848.                 speed = 4*x;
  849.         }
  850.         if (y != 0) {
  851.                 depth = y;
  852.                 if(OldEffects) depth <<= 1;
  853.         }
  854.         Set effect update for channel enabled if channel is ON.
  855.         Goto InitVibrato (explained later)
  856.  
  857. Wxx     Global volume slide down
  858.  
  859.         if (xx == 0) then xx = last Wxx for this channel.
  860.  
  861.         Order of testing: Wx0, W0x, WxF, WFx
  862.  
  863. Wx0     Set effect update for channel enabled.
  864.         Every update, add x to the volume, check and clip values > 128 to 128
  865. W0x     Set effect update for channel enabled.
  866.         Every update, subtract x from the volume, check and clip values < 0 to 0
  867. WxF     Add x to volume straight away. Check and clip values > 128 to 128
  868. WFx     Subtract x from volume straight away. Check and clip values < 0 to 0
  869.  
  870.  
  871.