:10,0 SIDPLAYER MUSIC FILE CONTENTS BY DICK THORNTON :10,60 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: :10,0 (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. :10,60 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. :10,0 - PAGE 1 - MUSICAL NOTE DATA PAIRS :10,60 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 THE PARENTHETIC NUMBER FOLLOWING A BIT NUMBER IS THE HEX VALUE OF THAT BIT: :10,0 BYTE 1 - TIE AND DURATION BIT 7 (80) ALWAYS 0 BIT 6 (40) 1=TIE TO NEXT NOTE. 0=NOT TIED BIT 5 (20) 1=DOTTED NOTE DURATION. 0=NOT DOTTED BIT 4 (10) BITS 4 3 2 NOTE DURATION BIT 3 (08) . 1 1 1 32ND NOTE BIT 2 (04) . 1 1 0 16TH NOTE . 1 0 1 8TH NOTE . 1 0 0 QUARTER NOTE . 0 1 1 HALF NOTE . 0 1 0 WHOLE NOTE . 0 0 1 UTILITY DURATION . 0 0 0 ABSOLUTE PITCH BIT 1 (02) ALWAYS 0 FOR NOTE PAIRS BIT 0 (01) ALWAYS 0 FOR NOTE PAIRS BYTE 2 - FREQUENCY (PITCH) AND RESTS BIT 7 (80) BITS 7 6 PITCH MODIFICATION BIT 6 (40) . 1 1 FLATTED NOTE . 1 0 NATURAL NOTE . 0 1 SHARPED NOTE BIT 5 (20) BITS 5 4 3 OCTAVE NUMBER BIT 4 (10) . 1 1 1 OCTAVE 0 BIT 3 (08) . 1 1 0 OCTAVE 1 . 1 0 1 OCTAVE 2 . 1 0 0 OCTAVE 3 . 0 1 1 OCTAVE 4 . 0 1 0 OCTAVE 5 . 0 0 1 OCTAVE 6 . 0 0 0 OCTAVE 7 BIT 2 (04) BITS 2 1 0 NOTE LETTER IDENTIFIER BIT 1 (02) . 1 1 1 B NOTE BIT 0 (01) . 1 1 0 A NOTE . 1 0 1 G NOTE . 1 0 0 F NOTE . 0 1 1 E NOTE . 0 1 0 D NOTE . 0 0 1 C NOTE . 0 0 0 REST - PAGE 2 - COMMAND DATA PAIRS :10,60 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: :10,0 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 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 0101 0011 53 3-0 NO 0NNN N100 ATK BITS 6543 CONTAIN A VALUE, 0-F 1NNN N100 SUS BITS 6543 CONTAIN A VALUE, 0-F 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 PULS+TRIANG+SAWTOO NNN1 0111 N7 F-M BITS 7 6 5 FILTER MODE 0 0 0 OFF 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 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-0 YES 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 - PAGE 3 - COMMANDS WHOSE FIRST BYTE IS NOT HEX 01 :10,60 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 AND POR), AND WHERE NEGATIVE VALUES MUST BE AVAILABLE (AUT, P-S, TPS, AND DTN). :10,0 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-4,095. 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 -127 (HEX 81) TO +127 (HEX 7F) 66 SNNN NNNN F-S SECOND BYTE CONTAINS THE VALUE AS A SIGNED NUMBER WITH RANGE -127 (HEX 81) TO +127 (HEX 7F) 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 -127 (HEX 81) TO +127 (HEX 7F) - PAGE 4 - A6 HHHH OOOS TPS THE SECOND BYTE CONTAINS THE NUMBER OF HALF-STEPS TO TRANS- POSE, 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. 0E NNNN NNNN F-C SECOND BYTE IS THE VALUE. NE NNNN NNNN MEA 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-1,024. BIT 5 AND 4 ARE ALWAYS 01 FOR THIS COMMAND, SO THE FIRST BYTE MAY BE 1E, 5E, 9E, OR DE. 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-2,048. IF BYTE 1, BIT 4 IS 1, THE NUMBER IS NEGATIVE, AND IS REDUCED BY 2,048 FOR AN EFFECTIVE RANGE OF -2,048 TO +2,048. NN NNNN NNNN POR THE 14-BIT NUMBER COMPOSED OF BYTE 1, BITS 7-3 AND ALL 8 BITS OF THE SECOND BYTE. VALUE RANGE IS 0 TO 16,383. BITS 1 AND 0 OF BYTE 1 ARE ALWAYS 11 FOR THIS COMMAND, ALL OTHER BITS MAY BE ANY VALUE. :0,60 - PAGE 5 -