Ú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ň