Extension: .d00 Version: 4.00 (Player Version) Created by: Jens-Christian Huus (JCH/Vibrants) Tracker: Edlib Tracker Players: Edlib, ... Description by: JCH/Vibrants Taken from: Edlib v1.05a rev 055 Note: Adlib (OPL2) music format 읕컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴� � � � PLAYER HEADER VARIABLES � � 컴컴컴컴컴컴컴컴컴컴컴� � � � � From offset 0000h in the player I have put certain constants and � � variables at places that will stay the same in every player that � � may be developed for EdLib. These may come in handy if creating � � some sort of ".D00" shell which loads the player. � � � � � � Offset Description � � 컴컴컴 컴컴컴컴컴� � � � � 0000h-0002h JMP to all functions which ends with RETF � � � � 0003h-0008h Detection bytes ('JCH',26h,02h,66h) � � � � 0009h-000ah Current card player version (0400h) � � � � 000bh Indicates normal OPL2 player (00h) � � � � 000ch Number of voices supported (09h) � � � � 000dh-002ch 32 bytes card name ('AdLib ') � � � � 002dh-002eh Pointer to "Inst" variables � � � � 002fh Indicates that "Inst" is WORD-based (01h) � � � � 0030h-0031h Pointer to "Dur" variables � � � � 0032h Indicates that "Dur" is WORD-based (01h) � � � � 0033h-0034h Pointer to "SeqPoi" variables � � � � 0035h Indicates that "SeqPoi" is WORD-based (01h) � � � � 0036h-0037h Pointer to "TrackPoi" variables � � � � 0038h Indicates that "TrackPoi" is WORD-based (01h) � � � � 0039h-003ah Pointer to "Freq" variables � � � � 003bh Indicates that "Freq" is WORD-based (01h) � � � � 003ch-003dh Pointer to "Spedr" variables � � � � 003eh Indicates that "Spedr" is BYTE-based (00h) � � � � 003fh-0040h Pointer to "Gate" variables � � � � 0041h Indicates that "Gate" is BYTE-based (00h) � � � � 0042h-0043h Pointer to "Nog" variables � � � � 0044h Indicates that "Nog" is BYTE-based (00h) � � � � 0045h-0046h Pointer to "Note" variables � � � � 0047h Indicates that "Note" is BYTE-based (00h) � � � � 0048h-0067h 32 bytes reserved for future expansion � � � � 0068h-0070h ON/OFF flags for all 9 voices (00h=Off) � � � � 0071h-????h Copyright string, and rest of player � � � � � � Some notes about the information above may be necessary. � � � � The JMP at position 0000h makes it possible to turn the player � � into a BIN-file and just call the player from offset 0000h. � � � � You may wonder about the detection bytes. The 'JCH' is of course � � my initials. 26h,02h,66h is my birthdate; 26th of february 1966. � � � � Offset 000bh-002ch was made to identify this player from players � � written for other soundcards. I soon burried this idea. � � � � All the variables pointers each points to nine bytes or words in � � which you may find valuable information for shell programs. Here � � is a deeper explanation of these variables... � � � � � � "Inst" 9 WORDS Current instrument played � � � � "Dur" 9 WORDS Realtime note duration counters � � � � "SeqPoi" 9 WORDS Realtime sequence position � � � � "TrackPoi" 9 WORDS Realtime track position � � � � "Freq" 9 WORDS Actual raw frequency played � � � � "Spedr" 9 BYTES Current speed of the tune � � � � "Gate" 9 BYTES Key ON/OFF flags (+++/---) � � � � "Nog" 9 BYTES Tienote indicator flags � � � � "Note" 9 BYTES Current note including transp. � � � � � � Note that the variables offered in the header of the player will � � also be available though the "GlOBALS.INC" file when linking. It � � is recommended that you fetch the variables that way if you only � � plan on LINKING with the player. � � � � There are more variables in the "GLOBALS.INC" file, but since it � � is beyond the scope of this DOC to describe them I will leave it � � up to you if you want to figure them all out! ;) � � � � � � THE ".D00" FORMAT � � 컴컴컴컴컴컴컴컴� � � � � Here comes an extensive description of the ".D00" files. With it � � you can make support for ".D00" files in your commandline player � � if you're working on such a program. � � � � � � Offset Description � � 컴컴컴 컴컴컴컴컴� � � � � 0000h-0005h Detection bytes ('JCH',26h,02h,66h) � � � � 0006h Block type (00h for music data) � � � � 0007h Player version required (Usually 04h) � � � � 0008h Timer speed for the block (Usually 46h) � � � � 0009h Number of music and SFX (Usually 01h) � � � � 000ah Soundcard (Usually 00h for AdLib) � � � � 000bh-002ah 32 bytes name of the music � � � � 002bh-004ah 32 bytes name of composer � � � � 004bh-006ah 32 bytes reserved for future expansion � � � � 006bh-006ch Pointer to "Tpoin" tables � � � � 006dh-006eh Pointer to "SeqPointer" tables � � � � 006fh-0070h Pointer to "Instrument" tables � � � � 0071h-0072h Pointer to "DataInfo" text � � � � 0073h-0074h Pointer to "Special" tables (SpFX) � � � � 0075h Endmark (FFFFh) � � � � � � Again, some notes about the information above may be necessary. � � � � Offset 0006h is always 00h. It was made to tell music data apart � � from sample data. EdLib of course always sets this to 00h. � � � � Some years ago I spread some old ".D00" music files which I made � � in old AdLib players (v02.00 and below). Some of this music may � � not sound too good in player v04.00. Check if this byte contains � � 04h. If it doesn't, you better avoid playing it. � � � � When using the AdLib player you should always check offset 0008h � � to see how many times a second the player should be called. � � � � EdLib always sets offset 0009h to 01h. You cannot make more than � � one piece of music at a time in the editor. � � � � Offset 000ah is always set to 00h in EdLib. If you encounter any � � strange ".D00" files containing any other value you better avoid � � playing it. � � � � Even though the ".D00" format allows 32 bytes for both the music � � name and the composer name, EdLib only accepts 20 characters. � � � � The pointers to various tables is really not of any interest to � � you, except "DataInfo" which in old songs occasionally contained � � additional text about the song. Tables such as "Instrument" may � � be useful to know in case you want to edit the ".D00" file! ;) � � � 읕컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴�