Úvod "I hate GUS only demos and trackers" (Grinus) K napsání tohoto textu mne vedl vztek. Vztek z toho, že se všechno točí jenom kolem GUSe a na kvalitní wavetable EMU8000 se jaksi zapomíná. Doufám, že po přečtení tohoto článku se konečně najde někdo, kdo nebude váhat dát do svého dílka podporu EMU8000. EMU8000 Co to vlastně je EMU8000 ? Je to wavetable syntezátor který montují Creative na karty SB 32 a SB AWE32/64. Tento chip, jak je již z názvu patrné, vyrábí firma EMU, pobočka Creative, která se zabývá profesionální audiotechnikou. EMU8000 obsahuje: - 32 zvukových generátorů pracujích v CD kvalitě - SPDIF digitální výstup - integrovaný digitální efektový procesor - 4-bodovou interpolaci - 24-bitový pamětový interface umožňující adresovat 28MB DRAM a 1MB MGM ROM integrované na čipu. Podporovány jsou pouze 16-bitové samply. Každý ze 32 generátorů obsahuje: - 2 LFO (low frequency oscilator) - 2 generátory obálek (envelope) DAHDSR - Cutoff filter s nastavitelným koeficientem rezonance - nastavitelný Reverb efekt - nastavitelný Chorus efekt Princip vytváření zvuku je naznačen na obrázku (doufám, že se v něm vyznáte. Je totiž trochu chaotický). Červeně jsou označeny ovládací signály (jedná se o registry), zeleně je vyznačena cesta audio signálu, tence žlutě jsou vyznačeny ovládací signály, tence modře výstupy z generátorů a oscilátorů, tlustě žlutě a tlustě modře je vyznačena cesta výsledného stereofonního signálu. Trojúhelník znamená zesilovač a kružnice se znaménkem "+" je součtový člen. Všechny signály se samozřejmě zpracovávají v digitální podobě. I/O EMU8000 je obvykle umístěn na adrese DSP procesoru karty + 400h. Pokud ale máte PnP kartu, tak vám nic nebrání v tom, abyste si bázovou adresu EMU umístili někam jinam (třeba o 40h výš, protože ono to ani o víc nejde). I/O porty jsou následující (uvažujme bázovou adresu 220h + 400h = 620h): Port Šířka Název 620h 32 Data0 (BASE+000h) A20h 32/16 Data1 (BASE+400h) A22h 16 Data2 (BASE+402h) E20h 16 Data3 (BASE+800h) E22h 16 Pointer (BASE+802h) Pointer je rozdělen na 3 části. Nejvyšších 8 bitů není využito a jsou stále nastaveny na nulu. Bity 7-5 určují číslo registru (0-7) a bity 4-0 určují oscilátor, se kterým momentálně chceme pracovat (0-31). Registry Následuje seznam registů EMU8000. Názvy jsem použil shodné s názvy, které používají Creative. Ve sloupci Reg první číslo reprezentuje číslo registru, které se nastavuje na portu Pointer a druhá hodnota uvádí číslo datového portu, na který se má hodnota vyslat. Ve sloupci SZ/OS je šířka slova a druhý parametr znamená číslo oscilátoru, na kterém je registr přístupný. Není-li uvedeno žádné číslo, je registr přístupný ze všech oscilátorů. Jméno Reg SZ/OS Plný Název CPF 0/0 32 Current Pitch and Fractional Adress PTRX 1/0 32 Pitch Target, Reverb Send and Aux Byte CVCF 2/0 32 Current Volume and Filter Cutoff VTFT 3/0 32 Volume and Filter Cutoff Targets PSST 6/0 32 Pan Send and Loop Start Adress CSL 7/0 32 Chorus Send and Loop End Adress CCCA 0/1 32 Q Factor, Control Bits and Current Adress HWCF4 1/1 32/9 Configuration DoubleWord 4 HWCF5 1/1 32/10 Configuration DoubleWord 5 HWCF6 1/1 32/13 Configuration DoubleWord 6 HWCF7 1/1 32/14 Configuration DoubleWord 7 !! UNOFFICIAL !! SMALR 1/1 32/20 Sound Memory Adress - "Left" Read SMARR 1/1 32/21 Sound Memory Adress - "Right" Read SMALW 1/1 32/22 Sound Memory Adress - "Left" Write SMARW 1/1 32/23 Sound Memory Adress - "Rigth" Write SMLD 1/1 16/26 Sound Memory "Left" Data SMRD 1/2 16/26 Sound Memory "Right" Data WC 1/2 16/27 Sample Counter HFCF1 1/1 16/29 Configuration Word 1 HWCF2 1/1 16/30 Configuration Word 2 HWCF3 1/1 16/31 Configuration Word 3 INIT1 2/1 16 Initialization Array 1 INIT2 2/2 16 Initialization Array 2 INIT3 3/1 16 Initialization Array 3 INIT4 3/2 16 Initialization Array 4 ENVVOL 4/1 16 Volume Envelope Delay DCYSUSV 5/1 16 Volume Envelope Sustain and Decay ENVVAL 6/1 16 Modulation Envelope Delay DCYSUS 7/1 16 Modulation Envelope Sustain and Decay ATKHLD 4/2 16 Volume Envelope Attack and Hold LFO1VAL 5/2 16 LFO #1 Delay ATKHLD 6/2 16 Modulation Envelope Attack and Decay LFO2VAL 7/2 16 LFO #2 Delay IP 0/3 16 Initial Pitch IFATN 1/3 16 Initial Filter Cutoff and Attenuation PEFE 2/3 16 Pitch and Filter Envelope Heights FMMOD 3/3 16 Vibrato and Filter Modulation from LFO #1 TREMFRQ 4/3 16 LFO #1 Tremolo Amount and Frequency FM2FRQ2 5/3 16 LFO #2 Vibrato Amount and Frequency Teď jsem se tedy pokusil v krátkosti naznačit, jak to na EMU8000 funguje a teď už přistupme k samostatným kapitolám. Ještě bych chtěl vysvětlit přístup k registrům. Některým je už možná jasný, ale radši ho sem uvedu. 1) Zapíšete číslo registru a oscilátoru na Pointer port OUT(BASE+802h,(REG SHL 5)+OSC) 2) Zapíšte hodnotu registru na jeho datový port OUT(BASE+DtaP,Val) DtaP je přírustek daného datového portu k bázi. Pokud tedy chcete zapsat do registru VTFT oscilátoru 6 při bázové adrese 620h, tak provedete následující instrukce: OUT(0E22h,96+6) OUT(0620h,Value) Detekce Inicializace Paměťový interface Zapnutí a vypnutí přehrávání Modulace zvuku Efektový procesor Lepší kvalita zvuku - odstranění AWE Clix Detailní popis registrů Hardware Informace, které jsem v tomto dokumentu použil, nejsou jen z mojí hlavy. Čerpal jsem z následujících zdrojů: AWE32 Developer Information Pack Creative Labs Unofficial AWE32 Programming Guide Vince Vu a.k.a. Judge Dred AWE Control Pack Laďa Kopecký a.k.a. Grinus Pokud by byly nějaké dotazy, tak mi můžete poslat e-mail na adresu svozilj@spsuh.hiedu.cz výheň