From: woan@cactus.org (Ronald S. Woan) Subject: Adlib Gold vs Soundblaster Pro comparison Date: 1 Sep 91 19:19:05 GMT I picked up the following file/table from Compuserve last night and though people might be interested. I am not sure of it's source, but I suspect it's from Adlib. By the way, I called Adlib last week and they said they should be shipping within two months. Something that's not mentioned in this table is that the Soundblaster Pro has a proprietary Matsushita CDROM interface that works only with Panasonic drives and the driver won't ship until mid September. Ron --- Cut Here --- For those interested, here are the specs on the Adlib Gold vs the Sound Blaster Pro (per Adlib). AdLib Sound Blaster Gold Pro ---------------------------------------------------------------------- FM Synthesizer Chip 1 Stereo YM262 2 Mono YM3812 # FM voices used in Stereo 20 11 # FM voices used in Mono 20 22 Two Operator FM Synthesis Yes Yes Four Operator FM Synthesis Yes No # FM Waveforms 8 4 Negligible Wait Between Chip Writes Yes (0.28fs) No (23.0fs) ---------------------------------------------------------------------- Sampling Resolution 12 bits 8 bits Sampling Dynamic Range 72 dB 48 dB Accepts 16 bit PCM Data Yes No Sampling Input & Playback Channels 2 2 Maximum Stereo Sampling Rate 44.1 KHz 22.05 KHz Digitized Sound Data Format 5.5125 KHz 2 KHz Hardware Comp/Decompression 3 to 1 4 to 1 Simultaneous use of 2 DMA Channels Yes No Sampling FIFO Buffer 2 x 128 Bytes unspecified Programmable Interrupts Yes Jumpers only Interrupt Conditions(s) 8 Choices On Completion Variable Anti-aliasing Filter Yes No Double Oversampling Digital Filters Yes No Double Undersampling Digital Filters Yes No ---------------------------------------------------------------------- On-board Analog Stereo Mixer Yes Yes Accepts CD-Audio (RedBook) Input Yes Yes Volume Control on Each Source 128 levels 8 levels Stereo Output Power Amplifier 1.2 W in 8j 0.75 W in 8j ---------------------------------------------------------------------- MIDI Interface (IN, OUT, THRU) Yes Yes Simultaneous MIDI IN & OUT Yes No MIDI FIFO Buffer Yes Yes Joystick Port Yes Yes SCSI CD-ROM Interface 153 kB/sec 153 kB/sec ---------------------------------------------------------------------- Programmable Output Volume Control Yes Yes Programmable Output Tone Control Yes No Programmable Gain for Mic & Aux Input Yes Automatic Programmable Card Localization Yes No Programmable DMA Channel Selection Yes Jumpers only Programmable Interrupt Selection Yes Jumpers only Programmable On-Board Chip Select Yes No ---------------------------------------------------------------------- ID Code Available Yes No Directly Accessible Control Registers Yes No Readable Control Registers Yes No Registers Stored in Non-Volitile Memory Yes No ---------------------------------------------------------------------- Price With On-Board SCSI Interface $399.95 $299.95 Price Without SCSI Interface $299.95 n/a . "The major difference between the Ad Lib Gold and its competitors is the quality of the sound, both digitized and synthesized." . "* Ad Lib Gold features a twelve-bit rather than an eight-bit ADC/DAC, which increases the dynamic range from 48dB to 72 dB and provides crystal-clear digital sound output." . "* Ad Lib Gold utilizes a powerful, new stereo FM synthesizer chip from Yamaha called YM262, rather than two monophonic YM3812 chips. This gives Ad Lib Gold eight FM waveforms instead of four, and permits operators to be combined in groups of 4 instead of only 2, for richer, more resonant sounds." . "* Ad Lib Gold's true stereo synthesizer chip allows voices to be direct left, right, or center. In contrast, YM3812-equipped boards must use two voices (one on each side) to direct sound to the center, which red the number of stereo voices to eleven. Only Ad Lib Gold provides real stereo on each and every one of its 20 synthesized voices." . -- +-----All Views Expressed Are My Own And Are Not Necessarily Shared By------+ +------------------------------My Employer----------------------------------+ + Ronald S. Woan woan@cactus.org or woan@austin.vnet.ibm.com + + othernet Prodigy: XTCR74A Compuserve: 73530,2537 + From: miguel@TXIKI.RADIOLOGY.ARIZONA.EDU Subject: Re: PC Sound card recommendations Date: 6 Jan 92 17:12:06 GMT The AdLib Gold card is a better card, because it supports true stereo sound (meaning it uses a single stereo chip instead of two mono chips). I got the Sound Blaster Pro but that's because I didn't know about the AdLib Gold. Even if there is a difference of $100 dollars betwen them you can get the AdLib Gold for the same price of the Sound Blaster Pro if you sacrifice the scci port. There is a little plus with the Sound Blaster Pro, and that is that it comes with a sequencer program by voyetra (Sequencer Plus junior) and I believe that the AdLib Gold comes with nothing. Another big plus of the AdLib card is that Ad Lib came out with a piggyback card that supports SURROUND SOUND. I include the announcement taken from Byte Magazine (Jan 92) at the end. If you want to make programs for either card you have to purchase a toolkit from the manufacturer (I wish it wasn't that way) because there is little explanation about the hardware (At least on the Sound Blaster manual, I don't know about the Ad Lib one). There is a full spec report on one of the sound letters But I don't seem to remeber the ftp site where I took them from (I recently deleted them from my machine). There is a little plus with the Sound Blaster Pro, and that is that it comes with a sequencer program by voyetra (Sequencer Plus junior) and I believe that the AdLib Gold comes with nothing. PIGGYBACK CARD SURROUNDS YOU WITH SOUND The Surround Sound Module from Ad Lib is a piggyback card that snaps onto the Ad Lib Gold card to give you sound enhacements ranging from stereo depth simulation to artificial reverb and echo. The module is compatible with all applications written with Ad Lib sound support, automatically enhancing the application you're using when you choose an effect from Ad Lib's selection. Price: $89.95 Contact: Ad Lib, Inc., 220 Grande-Allee East, Suite 850 Quebec, Canada G1R 2J1 (800) 463-2686 or (418) 529-9676 fax: (418) 529-1159 - Miguel - miguel@txiki.radiology.arizona.edu From: jlee@smylex.UUCP (Jeff Lee) Subject: Programming the AdLib/Sound Blaster Date: 25 Feb 92 15:02:02 GMT Programming the AdLib/Sound Blaster FM Music Chips Version 2.0 (24 Feb 1992) Copyright (c) 1991, 1992 by Jeffrey S. Lee jlee@smylex.uucp Warranty and Copyright Policy This document is provided on an "as-is" basis, and its author makes no warranty or representation, express or implied, with respect to its quality performance or fitness for a particular purpose. In no event will the author of this document be liable for direct, indirect, special, incidental, or consequential damages arising out of the use or inability to use the information contained within. Use of this document is at your own risk. This file may be used and copied freely so long as the applicable copyright notices are retained, and no modifications are made to the text of the document. No money shall be charged for its distribution beyond reasonable shipping, handling and duplication costs, nor shall proprietary changes be made to this document so that it cannot be distributed freely. This document may not be included in published material or commercial packages without the written consent of its author. Overview Two of the most popular sound cards for the IBM-PC, the AdLib and the Sound Blaster, suffer from a real dearth of clear documentation for programmers. AdLib Inc. and Creative Labs, Inc. both sell developers' kits for their sound cards, but these are expensive, and (in the case of the Sound Blaster developers' kit) can be extremely cryptic. This document is intended to provide programmers with a FREE source of information about the programming of these sound cards. The information contained in this document is a combination of information found in the Sound Blaster Software Developer's Kit, and that learned by painful experience. Some of the information may not be valid for AdLib cards; if this is so, I apologize in advance. Please note that numbers will be given in hexadecimal, unless otherwise indicated. If a number is written out longhand (sixteen instead of 16) it is in decimal. | Changes from Version 1 of the file will be indicated by the use of change | bars in the left-hand margin. Chapter One - Sound Card I/O The sound card is programmed by sending data to its internal registers via its two I/O ports: 0388 (hex) - Address/Status port (R/W) 0389 (hex) - Data port (W/O) | The Sound Blaster Pro is capable of stereo FM music, which is accessed | in exactly the same manner. Ports 0220 and 0221 (hex) are the address/ | data ports for the left speaker, and ports 0222 and 0223 (hex) are the | ports for the right speaker. Ports 0388 and 0389 (hex) will cause both | speakers to output sound. The sound card possesses an array of two hundred forty-four registers; to write to a particular register, send the register number (01-F5) to the address port, and the desired value to the data port. After writing to the register port, you must wait twelve cycles before sending the data; after writing the data, eighty-four cycles must elapse before any other sound card operation may be performed. | The AdLib manual gives the wait times in microseconds: three point three | (3.3) microseconds for the address, and twenty-three (23) microseconds | for the data. | | The most accurate method of producing the delay is to read the register | port six times after writing to the register port, and read the register | port thirty-five times after writing to the data port. The sound card registers are write-only. The address port also functions as a sound card status byte. To retrieve the sound card's status, simply read port 388. The status byte has the following structure: 7 6 5 4 3 2 1 0 +------+------+------+------+------+------+------+------+ | both | tmr | tmr | unused | | tmrs | 1 | 2 | | +------+------+------+------+------+------+------+------+ Bit 7 - set if either timer has expired. 6 - set if timer 1 has expired. 5 - set if timer 2 has expired. Chapter Two - The Registers The following table shows the function of each register in the sound card. Registers will be explained in detail after the table. Registers not listed are unused. Address Function ------- ---------------------------------------------------- 01 Test LSI / Enable waveform control 02 Timer 1 data 03 Timer 2 data 04 Timer control flags 08 Speech synthesis mode / Keyboard split note select 20..35 Amp Mod / Vibrato / EG type / Key Scaling / Multiple 40..55 Key scaling level / Operator output level 60..75 Attack Rate / Decay Rate 80..95 Sustain Level / Release Rate A0..A8 Frequency (low 8 bits) B0..B8 Key On / Octave / Frequency (high 2 bits) BD AM depth / Vibrato depth / Rhythm control C0..C8 Feedback strength / Connection type E0..F5 Wave Select The groupings of twenty-two registers (20-35, 40-55, etc.) have an odd order due to the use of two operators for each FM voice. The following table shows the offsets within each group of registers for each operator. Channel 1 2 3 4 5 6 7 8 9 Operator 1 00 01 02 08 09 0A 10 11 12 Operator 2 03 04 05 0B 0C 0D 13 14 15 Thus, the addresses of the attack/decay bytes for channel 3 are 62 for the first operator, and 65 for the second. (The address of the second operator is always the address of the first operator plus three). To further illustrate the relationship, the addresses needed to control channel 5 are: 29 - Operator 1 AM/VIB/EG/KSR/Multiplier 2C - Operator 2 AM/VIB/EG/KSR/Multiplier 49 - Operator 1 KSL/Output Level 4C - Operator 2 KSL/Output Level 69 - Operator 1 Attack/Decay 6C - Operator 2 Attack/Decay 89 - Operator 1 Sustain/Release 8C - Operator 2 Sustain/Release A4 - Frequency (low 8 bits) B4 - Key On/Octave/Frequency (high 2 bits) C4 - Feedback/Connection Type E9 - Operator 1 Waveform EC - Operator 2 Waveform Explanations of Registers Byte 01 - This byte is normally used to test the LSI device. All bits should normally be zero. Bit 5, if enabled, allows the FM chips to control the waveform of each operator. 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | unused | WS | unused | +-----+-----+-----+-----+-----+-----+-----+-----+ Byte 02 - Timer 1 Data. If Timer 1 is enabled, the value in this register will be incremented until it overflows. Upon overflow, the sound card will signal a TIMER interrupt (INT 08) and set bits 7 and 6 in its status byte. The value for this timer is incremented every eighty (80) microseconds. Byte 03 - Timer 2 Data. If Timer 2 is enabled, the value in this register will be incremented until it overflows. Upon overflow, the sound card will signal a TIMER interrupt (INT 08) and set bits 7 and 5 in its status byte. The value for this timer is incremented every three hundred twenty (320) microseconds. Byte 04 - Timer Control Byte 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | IRQ | T1 | T2 | unused | T2 | T1 | | RST | MSK | MSK | | CTL | CTL | +-----+-----+-----+-----+-----+-----+-----+-----+ bit 7 - Resets the flags for timers 1 & 2. If set, all other bits are ignored. bit 6 - Masks Timer 1. If set, bit 0 is ignored. bit 5 - Masks Timer 2. If set, bit 1 is ignored. bit 1 - When clear, Timer 2 does not operate. When set, the value from byte 03 is loaded into Timer 2, and incrementation begins. bit 0 - When clear, Timer 1 does not operate. When set, the value from byte 02 is loaded into Timer 1, and incrementation begins. Byte 08 - CSM Mode / Keyboard Split. 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | CSM | Key | unused | | sel | Spl | | +-----+-----+-----+-----+-----+-----+-----+-----+ bit 7 - When set, selects composite sine-wave speech synthesis mode (all KEY-ON bits must be clear). When clear, selects FM music mode. bit 6 - Selects the keyboard split point (in conjunction with the F-Number data). The documentation in the Sound Blaster manual is utterly incomprehensible on this; I can't reproduce it without violating their copyright. Bytes 20-35 - Amplitude Modulation / Vibrato / Envelope Generator Type / Keyboard Scaling Rate / Modulator Frequency Multiple 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Amp | Vib | EG | KSR | Modulator Frequency | | Mod | | Typ | | Multiple | +-----+-----+-----+-----+-----+-----+-----+-----+ bit 7 - Apply amplitude modulation when set; AM depth is controlled by the AM-Depth flag in address BD. bit 6 - Apply vibrato when set; vibrato depth is controlled by the Vib-Depth flag in address BD. bit 5 - When set, the sustain level of the voice is maintained until released; when clear, the sound begins to decay immediately after hitting the SUSTAIN phase. bit 4 - Keyboard scaling rate. This is another incomprehensible bit in the Sound Blaster manual. From experience, if this bit is set, the sound's envelope is foreshortened as it rises in pitch. bits 3-0 - These bits indicate which harmonic the operator will produce sound (or modulation) in relation to the voice's specified frequency: 0 - one octave below 1 - at the voice's specified frequency 2 - one octave above 3 - an octave and a fifth above 4 - two octaves above 5 - two octaves and a major third above 6 - two octaves and a fifth above 7 - two octaves and a minor seventh above 8 - three octaves above 9 - three octaves and a major second above A - three octaves and a major third above B - " " " " " " " C - three octaves and a fifth above D - " " " " " " E - three octaves and a major seventh above F - " " " " " " " Bytes 40-55 - Level Key Scaling / Total Level 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Scaling | Total Level | | Level | 24 12 6 3 1.5 .75 | <-- dB +-----+-----+-----+-----+-----+-----+-----+-----+ bits 7-6 - causes output levels to decrease as the frequency rises: 00 - no change 10 - 1.5 dB/8ve 01 - 3 dB/8ve 11 - 6 dB/8ve bits 5-0 - controls the total output level of the operator. all bits CLEAR is loudest; all bits SET is the softest. Don't ask me why. Bytes 60-75 - Attack Rate / Decay Rate 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Attack | Decay | | Rate | Rate | +-----+-----+-----+-----+-----+-----+-----+-----+ bits 7-4 - Attack rate. 0 is the slowest, F is the fastest. bits 3-0 - Decay rate. 0 is the slowest, F is the fastest. Bytes 80-95 - Sustain Level / Release Rate 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Sustain Level | Release | | 24 12 6 3 | Rate | +-----+-----+-----+-----+-----+-----+-----+-----+ bits 7-4 - Sustain Level. 0 is the loudest, F is the softest. bits 3-0 - Release Rate. 0 is the slowest, F is the fastest. Bytes A0-B8 - Octave / F-Number / Key-On 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | F-Number (least significant byte) | (A0-A8) | | +-----+-----+-----+-----+-----+-----+-----+-----+ 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Unused | Key | Octave | F-Number | (B0-B8) | | On | | most sig. | +-----+-----+-----+-----+-----+-----+-----+-----+ bit 5 - Channel is voiced when set, silent when clear. bits 4-2 - Octave (0-7). 0 is lowest, 7 is highest. bits 1-0 - Most significant bits of F-number. In octave 4, the F-number values for the chromatic scale and their corresponding frequencies would be: F Number Frequency Note 16B 277.2 C# 181 293.7 D 198 311.1 D# 1B0 329.6 E 1CA 349.2 F 1E5 370.0 F# 202 392.0 G 220 415.3 G# 241 440.0 A 263 466.2 A# 287 493.9 B 2AE 523.3 C Bytes C0-C8 - Feedback / Algorithm 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | unused | Feedback | Alg | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+ bits 3-1 - Feedback strength. If all three bits are set to zero, no feedback is present. With values 1-7, operator 1 will send a portion of its output back into itself. 1 is the least amount of feedback, 7 is the most. bit 0 - If set to 0, operator 1 modulates operator 2. In this case, operator 2 is the only one producing sound. If set to 1, both operators produce sound directly. Complex sounds are more easily created if the algorithm is set to 0. Byte BD - Amplitude Modulation Depth / Vibrato Depth / Rhythm 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | AM | Vib | Rhy | BD | SD | TOM | Top | HH | | Dep | Dep | Ena | | | | Cym | | +-----+-----+-----+-----+-----+-----+-----+-----+ bit 7 - Set: AM depth is 4.8dB Clear: AM depth is 1 dB bit 6 - Set: Vibrato depth is 14 cent Clear: Vibrato depth is 7 cent bit 5 - Set: Rhythm enabled (6 melodic voices) Clear: Rhythm disabled (9 melodic voices) bit 4 - Bass drum on/off bit 3 - Snare drum on/off bit 2 - Tom tom on/off bit 1 - Cymbal on/off bit 0 - Hi Hat on/off Note: KEY-ON registers for channels 06, 07, and 08 must be OFF in order to use the rhythm section. Other parameters such as attack/decay/sustain/release must also be set appropriately. Bytes E0-F5 - Waveform Select 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | unused | Waveform | | | Select | +-----+-----+-----+-----+-----+-----+-----+-----+ bits 1-0 - When bit 5 of address 01 is set, the output waveform will be distorted according to the waveform indicated by these two bits. I'll try to diagram them here, but this medium is fairly restrictive. ___ ___ ___ ___ _ _ / \ / \ / \ / \ / | / | /_____\_______ /_____\_____ /_____\/_____\ /__|___/__|___ \ / \___/ 00 01 10 11 | Detecting a Sound Card | | According to the AdLib manual, the 'official' method of checking for a | sound card is as follows: | | 1) Reset both timers by writing 60h to register 4. | 2) Enable the interrupts by writing 80h to register 4. NOTE: this | must be a separate step from number 1. | 3) Read the status register (port 388h). Store the result. | 4) Write FFh to register 2 (Timer 1). | 5) Start timer 1 by writing 21h to register 4. | 6) Delay for at least 80 microseconds. | 7) Read the status register (port 388h). Store the result. | 8) Reset both timers and interrupts (see steps 1 and 2). | 9) Test the stored results of steps 3 and 7 by ANDing them | with E0h. The result of step 3 should be 00h, and the | result of step 7 should be C0h. If both are correct, an | AdLib-compatible board is installed in the computer. | | | Making a Sound | | Many people have asked me, upon reading this document, what the proper | register values should be to make a simple sound. Well, here they are. | | First, clear out all of the registers by setting all of them to zero. | This is the quick-and-dirty method of resetting the sound card, but it | works. Note that if you wish to use different waveforms, you must then | turn on bit 5 of register 1. (This reset need be done only once, at the | start of the program, and optionally when the program exits, just to | make sure that your program doesn't leave any notes on when it exits.) | | Now, set the following registers to the indicated value: | | REGISTER VALUE DESCRIPTION | 20 01 Set the modulator's multiple to 1 | 40 10 Set the modulator's level to about 40 dB | 60 F0 Modulator attack: quick; decay: long | 80 77 Modulator sustain: medium; release: medium | A0 98 Set voice frequency's LSB (it'll be a D#) | 23 01 Set the carrier's multiple to 1 | 43 00 Set the carrier to maximum volume (about 47 dB) | 63 F0 Carrier attack: quick; decay: long | 83 77 Carrier sustain: medium; release: medium | B0 31 Turn the voice on; set the octave and freq MSB | | To turn the voice off, set register B0h to 11h (or, in fact, any value | which leaves bit 5 clear). It's generally preferable, of course, to | induce a delay before doing so. | | Acknowledgements | | Thanks are due to the following people: | | Ezra M. Dreisbach (ed10+@andrew.cmu.edu), for providing the information | about the recommended port write delay from the AdLib manual, and the | 'official' method of detecting an AdLib-compatible sound card. | | Nathan Isaac Laredo (gt7080a@prism.gatech.edu), for providing the | port numbers for stereo sound on the Sound Blaster Pro.