669 and Extended 669 file format: offset |length&type |description ---------------+---------------+---------------------------------------------- 0 |2 bytes |marker, 'if' for 669, 'JN' for Extended 669 2 |108 bytes |song message 0x6e |1 byte |NOS = number of samples saved (0-64) 0x6f |1 byte |NOP = number of patterns saved (0-128) 0x70 |1 byte |loop order number 0x71 |0x80 bytes |order list 0xf1 |0x80 bytes |tempo list for patterns 0x171 |0x80 bytes |break location list for patterns 0x1f1 |NOS*size struct|sample data | samp | +--------------+---------------+ |struct samp { | 13 bytes ASCIIZ filename of instrument | 1 dword length of instrument | 1 dword offset of beginning of loop | 1 dword offset of end of loop |} smp[NOS] +--------------+---------------+---------------------------------------------- 0x1f1+ |NOP*0x600 |patterns (NOS*0x19) | | +--------------+---------------+ |this is repeated 8 times for every row and the array of 8 of these is | repeated 64 times for each pattern. | | bits: | BYTE[0]: BYTE[1]: BYTE[2]: | aaaaaaaa bbbbbbbb cccccccc | +----++-----------------++--+ +--++--+ | | | | | | | | | 4 bit volume | command value | | | | | | aabbbb = 6 bit instrument number command: | | 0 = a | note value = (12*oct)+note 1 = b | 2 = c | special values for byte 0: 3 = d | 0xfe = no note, only volume change 4 = e | 0xff = no note or volume change 5 = f | | special value for byte 2: | 0xff = no command | +--------------+---------------+---------------------------------------------- 0x1f1+ |rest of file |samples (NOS*0x19)+ | | (NOP*0x600) | | There are six special commands you can enter. To enter a special command hit Backspace in the pattern edit screen, enter a letter (a-f) then a number (1-F). The first 5 commands alter the way the note will be played, the sixth, 'f', changes the tempo in the pattern and has no effect on the note being played. All commands except 'c' can be specified as part of a note or alone. If they are specified alone, their effect starts where they were placed, not when the note was struck. If no instrument is playing on the channel where the command was encountered, there will be no effect (except for command 'f', it always changes the tempo). The commands continue to affect the way the instrument is played untill another note or command is encountered in the pattern (an 'f' command will cancel the effects of any previous command, but nothing cancels the effect of the 'f' command). The format of the commands is c#, where c is the command and # is the command value which is the user defined parameter for how much the command will affect the instrument. 669 Commands: ============= a - Portamento up - This command will cause the frequency of the note to increase over time, the command value indicates how fast the pitch will increase. (For those of you who know what this means, the port is linear, not logarithmic). b - Portamento down - Same as 'a' but in the other direction. c - Port to note - This is the only command that requires there to be a note on the same line. This commands sets the note to portamento at the speed defined by the command value towards the note on the line. The instrument value of the note is ignored, but the volume is set to the volume in the note on this line. When the note reaches the destination note, the portamento is stopped and it continues playing at the destination note frequency. d - Frequency adjust - This command adjusts the frequency of the note currently playing a little bit. This is useful for when you have 2 notes playing at the same pitch using the same instrument, use this command to adjust the frequency of one of the notes to make it sound a little more harmonic. e - Frequency vibrato - This command sets the frequency of the note that is playing to vibrate. The command value specifies how much to vibrato the note by. Note: A command value of 0 on any of the previous commands cancels the effect of any previous command and sets the note to play normally. f - Set tempo - Usually you will set the tempo for the patterns through their basic tempo. But there are times when you may want to change the tempo within a pattern. Use this command to do it. The tempo will remain at this tempo untill another set tempo command or untill another pattern is reached in the order list (even the same pattern that is playing now). Extended 669 Commands: ====================== f0 - Super Fast Tempo. In COMPOSD1, this tempo is unused, in UNIS 669 Extended mode, this is a super fast tempo. g - G of Commands Subcommand: 0 - Balance fine slide Left 8 - Unused 1 - Balance fine slide Right 9 - Unused 2 - Unused 10 - Unused 3 - Unused 11 - Unused 4 - Unused 12 - Unused 5 - Unused 13 - Unused 6 - Unused 14 - Unused 7 - Unused 15 - Unused h - Slot Retrig. This command rapidly fires 4 slots. The command parameter specifies the speed at which to do it. The speed difference across the values is exponential. Info from: - 669.DOC and COMPOSD.DOC by Tran - UNIS669.HLP by Jason Nunn Prime/Inertia <sdanes@marvels.hacktic.nl>