home *** CD-ROM | disk | FTP | other *** search
- ****************************************************************************
- * SIDPLAYER MUSIC FILE CONTENTS *
- * Including Enhanced Editor Commands *
- * By Dick Thornton *
- *****************************************************************************
-
- SIDPLAYER music files are PRG type files which contain the musical notes and
- command directives for playing a song, as well as the several text lines
- intended for the song name and credit lines for the composer and SID
- arranger.
-
- On disk, the file consists of one or more sectors written in standard PRG
- format. Characteristics of this file type can be found in your disk manual, or
- other books on disk file management. From here on, we will consider the file
- data as it resides in memory after being LOAD'ed. The general format of the
- .MUS file in memory is:
-
- (1) Two-byte length of voice 1 in low-byte, high-byte form.
- (2) Two-byte length of voice 2 in low-byte, high-byte form.
- (3) Two-byte length of voice 3 in low-byte, high-byte form.
- (4) The data for voice 1 always ending with a HLT command.
- (5) The data for voice 2 always ending with a HLT command.
- (6) The data for voice 3 always ending with a HLT command.
- (7) The text lines for song name, etc. There are five lines, each
- containing 0-32 bytes and ending with a carriage return. The text data
- information is in upper-case Commodore Pet ASCII. A hex zero byte
- follows the last byte of the last line of text.
-
- The effect of this is that each .MUS file is actually four files packed end-
- to-end in a single PRG file with three little two-byte lengths in the front to
- help you find things. Voice 1 begins at the sixth byte of the data file as
- LOAD'ed into memory. Voice 2 starts at a point 6 + length of voice 1 from the
- beginning of the file in memory. Voice 3 is at 6 + length of voice 1 + length
- of voice 2 from the file start, and the text lines begin at 6 + length of
- voice 1 + length of voice 2 + length of voice 3. Each voice ends with a HLT
- command (hex 014F), and if there is no data for a voice that is all it will
- contain. The text area ends with a hex zero after the carriage return for the
- final line.
-
- Each voice contains data in two-byte pairs that contain the musical notes and
- commands needed to play the song. The first byte of each pair will have bits 1
- and 0 both set to zero if the byte-pair describes a musical note, otherwise
- the byte-pair describes a SID chip command or SIDPLAYER command.
-
- In the following, commands are identified by the three character abbreviation
- used by the SID EDITOR program described in the books "All About the Commodore
- 64" Volume 2, and "COMPUTE!'s Music System for the Commodore 128 and 64". Both
- books are published by COMPUTE! Books.
-
- *****************************************************************************
- * MUSICAL NOTE DATA PAIRS *
- *****************************************************************************
-
- Musical note data pairs will contain 00 in the lower-order two bits of the
- first byte of the pair. Each musical note byte-pair contains duration in its
- first byte, and frequency (pitch) in the second. This data is coded as
- follows, where decoding proceeds downward until a > terminator is found. A dot
- means the bit can be either 0 or 1:
-
- *****************************************************************************
- * BYTE 1 - TIE AND DURATION *
- *****************************************************************************
-
- BITS
- 7654 3210 DESCRIPTION ----------------------------
- 0000 0000 Absolute Pitch> ! EXAMPLE !
- .1.. ..00 Tie/Slur ! !
- 1.10 0000 Triplet 64th note> ! GIVEN byte 1 = hex F0 !
- ..10 0100 Utility Voice> ! (binary 1111 0000) !
- 1.0. ..00 Triplet ! tie .1.. ..00 !
- ..00 0100 Utility Duration> ! dotted ..1. .... !
- ...0 0000 64th note> ! dbl-dot 1.1. .... !
- 0.1. ..00 Single Dotted duration ! qtr note> ...1 0000 !
- 1.1. ..00 Double Dotted duration ! !
- ...0 1000 Whole note> ! This is a double-dotted !
- ...0 1100 Half Note> ! quarter note with tie. !
- ...1 0000 Quarter Note> ----------------------------
- ...1 0100 Eighth Note>
- ...1 1000 Sixteenth Note>
- ...1 1100 Thirty-Second Note>
-
- *****************************************************************************
- * BYTE 2 - FREQUENCY (PITCH) AND RESTS *
- *****************************************************************************
-
- 7654 3210 DESCRIPTION ----------------------------
- ! !
- Bits 7 6 Modifier ! EXAMPLE !
- 11.. .... Flatted ! !
- 10.. .... Natural ! GIVEN byte 2 is hex 94 !
- 01.. .... Sharped ! (binary 1001 0100) !
- 00.. .... Double sharp (GFDC) ! !
- or Double flat (ABE) ! !
- ! Natural 10.. .... !
- Bits 5 4 3 Octave ! Octave 5 ..01 0... !
- ..11 1... Octave 0 ! F Note> .... .100 !
- ..11 0... Octave 1 ----------------------------
- ..10 1... Octave 2
- ..10 0... Octave 3
- ..01 1... Octave 4
- ..01 0... Octave 5
- ..00 1... Octave 6
- ..00 0... Octave 7
-
- Bits 2 1 0 Note
- .... .111 B Note>
- .... .110 A Note>
- .... .101 G Note>
- .... .100 F Note>
- .... .011 E Note>
- .... .010 D Note>
- .... .001 C Note>
- .... .000 Rest>
-
- *****************************************************************************
- * COMMAND DATA PAIRS *
- *****************************************************************************
-
- Commands contain information other than musical note pitch and duration. For
- commands, the low-order two bits of the first byte are not 00. A whole set of
- commands are identified with a first byte value of hex 01. For these commands,
- the low-order four bits of the second byte can be used as a gross identifier,
- while the high order four bits often contain a numeric value. These commands
- are described by their second bytes below:
-
- *****************************************************************************
- * COMMANDS WITH FIRST BYTE = HEX 01 *
- *****************************************************************************
-
- * BYTE2 * HEX COMMAND VALUE
- 7654 3210 NAME
- nnnn 0000 n0 DCY Bits 7654 contain a value, 0-F
- nnnn n001 RUP Bits 76543 contain a value, 0-1F
- nnnn 0010 n2 CAL Bits 7654 contain a value, 0-F
- 0000 0011 03 BMP UP
- 0001 0011 13 FLT NO
- 0010 0011 23 RNG NO
- 0011 0011 33 SNC NO
- 0100 0011 43 F-X NO
- 1nnn 0011 n3 DEF Bits 7654 contain a value, 9-F, which is 8
- less than the true value.
- 0nnn n100 ATK Bits 6543 contain a value, 0-F
- 1nnn n100 SUS Bits 6543 contain a value, 0-F
- 0110 0011 63 LFO 0
- 0111 0011 73 P&V NO
- nnnn n101 RDN Bits 76543 contain a value, 0-1F
- nnnn 0110 n6 DEF Bits 7654 contain a value, 0-F
- nnn0 0111 n7 WAV Bits 7 6 5 WAVEFORM
- 0 0 0 Noise
- 0 0 1 Triangle
- 0 1 0 Sawtooth
- 0 1 1 Triangle + Sawtooth
- 1 0 0 Pulse
- 1 0 1 Pulse + Triangle
- 1 1 0 Pulse + Sawtooth
- 1 1 1 Pulse + Triangle + Sawtooth
- nnn1 0111 n7 F-M Bits 7 6 5 FILTER MODE
- 0 0 0 Off (N)
- 0 0 1 Low Pass
- 0 1 0 Band Pass
- 0 1 1 Low + Band
- 1 0 0 High Pass
- 1 0 1 High + Low
- 1 1 0 High + Band
- 1 1 1 High + Band + Low
- nnnn 1000 n8 RLS Bits 7654 contain a value, 0-F
- nnnn 1010 nA RES Bits 7654 contain a value, 0-F
- 0000 1011 0B BMP DN (Down)
- 0001 1011 1B FLT YES
- 0010 1011 2B RNG YES
- 0011 1011 3B SNC YES
- 0100 1011 4B F-X YES
- 0101 1011 5B 3-O YES
- 0110 1011 6B LFO 1
- 0111 1011 7B P&V YES
- 1nnn 1011 nB CAL Bits 7654 contain a value, 9-F, which is 8 less
- than the true value.
- nnnn 1110 nE VOL Bits 7654 contain a value, 0-F
- 0000 1111 0F TAL N/A
- 0010 1111 2F END N/A
- 0100 1111 4F HLT N/A
- 0nn1 1111 nF SRC Bits 65 contain a value, 0-2
- 1nnn 1111 nF DST Bits 654 contain a coded value:
- 000=0, 010=1, 101=2, 110=3
-
- *****************************************************************************
- * COMMANDS WHOSE FIRST BYTE IS NOT HEX 01 *
- *****************************************************************************
-
- This group of command pairs generally has a first byte that defines the
- command, and the second byte gives a numeric value from hex 00 to FF (decimal
- range 0 to 255). There are a few variations, however, where the value range
- exceeds 255 (DTN, P-W, MS#, JIF, POR), and where negative values must be
- available (AUT, P-S, TPS, F-S, SCA, RTP, JIF, and DTN).
-
- BYTE1 * BYTE2 * CMD
- HEX 7654 3210 NAME VALUE
-
- n2 nnnn nnnn P-W The 12-bit number composed of byte 1, bits
- 7-4, and all 8 bits of byte 2 give a range
- of 0-4095.
-
- 06 nnnn nnnn TEM If the second byte is zero, it is replaced
- by 256 (hex 100). The second byte value is
- then divided into 14,400. The whole number
- quotient is the number of quarter notes
- per minute.
-
- 16 nnnn nnnn UTL Second byte is the value.
-
- 26 nnnn nnnn PNT Second byte is the value.
-
- 36 nnnn nnnn HED Second byte is the value.
-
- 46 nnnn nnnn FLG Second byte is the value.
-
- 56 snnn nnnn P-S Second byte contains the value as a signed
- number with range -128 (hex 80) to +127
- (hex 7F).
-
- 66 snnn nnnn F-S Second byte contains the value as a signed
- number with range -128 (hex 80) to +127
- (hex 7F).
-
- 6E snnn nnnn SCA Second byte contains the value as a signed
- number with range -7 (hex F9) to 7 (hex 07).
-
- 76 0nnn nnnn VDP Byte 2 bits 6-0 contain the value, 0-127.
-
- 86 nnnn nnnn VRT Second byte is the value.
-
- 96 snnn nnnn AUT Second byte contains the value as a signed
- number with range -128 (hex 80) to +127
- (hex 7F).
-
- A6 hhhh ooos TPS The second byte contains the number of half-
- steps to transpose, from -95 to +95. Bit 0
- is the sign, 0=+, 1=-. Bits 3-1 give the
- number of whole octaves for negative values.
- For positive numbers, the number of octaves
- is 7 minus the number in bits 3-1. Bits 7-4
- give the additional half-steps less than an
- octave (0-11) for positive numbers. For
- negative numbers, the excess half-steps are
- 11 minus the number in bits 7-4.
-
- B6 nnnn nnnn AUX Second byte is the value.
-
- C6 nnnn nnnn PVD Second byte has value, 0-127.
-
- D6 nnnn nnnn PVR Second byte has value, 0-127.
-
- E6 nnnn nnnn MAX Second byte has value, 0-255.
-
- F6 nnnn nnnn UTV Second byte has value, 0-255.
-
- 0E nnnn nnnn F-C Second byte is the value.
-
- 2E nnnn nnnn RTP Second byte has the number of half-steps to
- adjust, -47 to +47 where 3 minus the number
- given by bits 210 give the number of whole
- octaves, and bits 76543 minus 11 is the
- number of additional half-steps less than
- an octave.
-
- 4E nnnn nnnn HLD Second byte has a value, 0-255.
-
- nE nnnn nnnn MS# The 10-bit number composed of bits 7-6 of
- the 1st byte and all 8 bits of the second
- byte give a value of 0-1023. Bits 5 and 4
- are always 01 for this command, so the first
- byte may be 1E, 5E, 9E, or DE.
-
- nE nnnn nnnn JIF Bits 76 of the first byte are appended to
- the 8 bits of the second byte to form a
- 10-bit value with a range of -200 to 757.
- Byte 1 bits 54 are always 11, so the first
- byte may be 3E, 7E, BE, or FE.
-
- nA nnnn nnnn DTN The 11-bit number composed of byte 1, bits
- 7-5 and all 8 bits of byte 2 produces a
- value of 0-2047. If byte 1, bit 4 is 1, the
- number is negative, and is reduced by 2048
- for an effective range of -2048 to 2047.
-
- nn nnnn nnnn POR The 14-bit number composed of byte 1, bits
- 7-2 and all 8 bits of the second byte. Value
- range is 16383. Bits 1 and 0 of byte 1 are
- always 11 for this command, all other bits
- may be any value.
-
-
-