Hlavní navigace

Práce se zvukovým čipem AY-3-8910 (YM2149)

16. 4. 2009
Doba čtení: 11 minut

Sdílet

V dnešní části seriálu o architekturách počítačů dokončíme popis zvukového čipu AY-3-8910 známého též pod označením YM2149 (inovovaná verze vyráběná firmou Yamaha). Řekneme si, jakým způsobem je s pomocí tohoto čipu generovaný zvuk a nakonec si také uvedeme některé ukázky hudby vytvořené "ayčkem".

Obsah

1. Princip generování zvuku čipem AY-3–8910
2. Generátor obdélníkového signálu a generátor šumu
3. Mixér a změna hlasitosti jednotlivých hudebních kanálů
4. Generátor obálky
5. D/A převodníky na výstupech hudebních kanálů
6. Ukázka hudby vytvořené pomocí AY-3–8910
7. Odkazy na Internetu
8. Obsah další části seriálu

1. Princip generování zvuku čipem AY-3–8910

Zvukový čip AY-3–8910 obsahuje tři hudební kanály označované symboly A, B a C, přičemž výstupy hudebních kanálů jsou vyvedeny na samostatné piny (čip tedy obsahuje celkem tři analogové výstupy). Zdrojem základních tónů každého hudebního kanálu je generátor obdélníkového signálu a/nebo generátor šumu (nastavením řídicího registru se pro každý kanál určuje, zda bude použit obdélníkový signál, šumový signál či oba signály současně). Rozsah frekvencí obdélníkového signálu je 8 oktáv, přičemž frekvence signálu je nastavována pomocí dvanáctibitové konstanty představující hodnotu vstupující do frekvenčního děliče (základní frekvence je odvozena od hodinového signálu přiváděného na pin CLOCK). Frekvence generátoru šumu, jenž se používá například pro napodobení zvuku perkusních nástrojů, je nastavována pomocí pětibitové konstanty. Všechny tři hudební kanály používají generátor šumu o shodné frekvenci. Obdélníkový či šumový signál lze upravit pomocí obálky, která má tvar digitalizovaného periodického nebo neperiodického pilového či trojúhelníkového signálu. Obálku lze taktéž ovládat programově, což vlastně znamená, že se pomocí zápisu do jednoho z řídicích registrů mění amplituda generovaného obdélníkového signálu (právě programovou změnou obálky lze přehrávat samply, tj. digitalizované zvukové vzorky). Po úpravě signálů pomocí obálky jsou čtyřbitové vzorky převedeny v D/A převodníku na analogový signál.

pc5701

Obrázek 1: Zvukový čip AY-3–8910 na základní desce počítače.

Zvukový čip AY-3–8910 je ovládán pomocí šestnácti osmibitových řídicích registrů, které jsou pojmenovány R0RF, jejichž stručný popis je uveden v tabulce pod odstavcem (povšimněte si, že zatímco AY-3–8910 je řízeno šestnácti registry, u čipu POKEY se vytvářený zvuk ovlivňoval registry devíti a čip SID měl pro stejný účel vyhrazeno dokonce 29 registrů). Řídicí registry je možné podle jejich funkce rozdělit do několika skupin. Prvních šest registrů R0R5 slouží pro nastavení frekvence obdélníkového signálu generovaného v každém hudebním kanálu (pro jeden hudební kanál jsou použity vždy dva sousední registry, do nichž se ukládá hodnota pro frekvenční dělič). Následuje registr R6, kterým se nastavuje frekvence šumu, registr R7 pro řízení mixéru a vstupně-výstupních portů, trojice registrů R8, R9, RA pro nastavení hlasitosti jednotlivých hudebních kanálů, dvojice registrů RB a RC pro nastavení frekvence obálky, registr RD určující tvar obálky a konečně dvojice registrů RE a RF, které jsou použity při práci se vstupně-výstupními porty. Těmito dvěma registry se nebudeme dále zabývat, neboť nemají vliv na vytvářený zvuk, ostatní registry budou naopak popsány podrobněji.

pc5702

Obrázek 2: Blokové schéma zvukového čipu AY-3–8910.

Registr Význam
R0 dolních osm bitů děliče frekvence hudebního kanálu A
R1 horní čtyři bity děliče frekvence hudebního kanálu A
R2 dolních osm bitů děliče frekvence hudebního kanálu B
R3 horní čtyři bity děliče frekvence hudebního kanálu B
R4 dolních osm bitů děliče frekvence hudebního kanálu C
R5 horní čtyři bity děliče frekvence hudebního kanálu C
R6 pět bitů děliče frekvence generátoru šumu
R7 nastavení zvukového mixéru i směru obou I/O portů
R8 nastavení úrovně hlasitosti hudebního kanálu A
R9 nastavení úrovně hlasitosti hudebního kanálu B
RA nastavení úrovně hlasitosti hudebního kanálu C
RB dolních osm bitů děliče frekvence generátoru obálky
RC horních osm bitů děliče frekvence generátoru obálky
RD nastavení tvaru obálky
RE data I/O portu A (vstup či výstup)
RF data I/O portu B (vstup či výstup)
pc5703

Obrázek 3: Pole šestnácti osmibitových řídicích registrů zvukového čipu AY-3–8910 zvýrazněné na blokovém schématu.

2. Generátor obdélníkového signálu a generátor šumu

Základ tónu je pro každý hudební kanál tvořen v generátoru obdélníkového signálu (square wave generator). Princip práce tohoto generátoru je velmi jednoduchý (ostatně právě proto ho můžeme nalézt jak v AY-3–8910, tak i v čipu POKEY) – frekvence pravidelného hodinového signálu přiváděného na vstup CLOCK, jenž se nachází na pinu číslo 22, je u YM2149 nejprve pomocí klopného obvodu typu T vydělena na polovinu. To, zda k vydělení skutečně dojde, závisí na stavu pinu SEL; naproti tomu u původního AY-3–8910 se toto vydělení frekvence na polovinu neprovádí nikdy. Výsledkem je signál nazvaný master clock.

Poté je hodinový signál přiveden do binárních čítačů, které pracují jako frekvenční děliče (pravděpodobně jsou v AY-3–8910 skutečně použity děliče založené na binárních čítačích, které s každým hodinovým taktem sníží svoji hodnotu o jedničku, přičemž po dosažení nuly je jejich výstup invertován a do čítače se dosadí původní hodnota). Frekvence obdélníkového signálu je pro každý hudební kanál ovládána zvlášť pomocí dvojice osmibitových řídicích registrů (R0+R1 pro kanál A, R2+R3 pro kanál B a R4+R5 pro kanál C), v nichž je uloženo dvanáctibitové číslo představující hodnotu, kterou se dělí hodinový signál (z celkem šestnácti bitů je možné nastavit pouze bitů dvanáct, což je však pro požadovaný frekvenční rozsah osmi oktáv dostatečné). Frekvence každé obdélníkové vlny se vypočte pomocí vztahu:
fsquare=fmaster/16TP,
kde TP je hodnota uložená ve dvojici řídicích registrů a fmaster je frekvence hodinového signálu.

pc5704

Obrázek 4: Schéma zapojení počítače ZX Spectrum+ 128k, který obsahoval i zvukový čip AY-3–8910 (ten na schématu naleznete v jeho dolní části).

Dalším primárním zdrojem signálu pro tvorbu zvuku je generátor šumu (noise generator). Výstup z tohoto generátoru (opět se jedná o binární signál, v tomto případě o náhodné pulsy) může být přiveden do libovolného hudebního kanálu (v případě potřeby i do všech kanálů), ovšem šumový generátor je pouze jeden a i jeho frekvence je pro všechny tři hudební kanály vždy stejná. Pro nastavení frekvence šumového generátoru je určeno pět bitů řídicího registru R6. Frekvence je vypočtena podle vztahu prakticky totožného se vztahem uvedeným v předchozím odstavci:
fnoise=fmaster/16NP,
kde NP je hodnota uložená v řídicím registru R6. Vzhledem k menší maximální hodnotě, kterou lze uložit do pěti bitů (25-1=31 vs. 212-1=4095) je i frekvence vytvářeného šumu většinou mnohem vyšší než frekvence obdélníkového signálu (v případě šumu není zcela přesné hovořit o frekvenci, spíše se jedná o maximální mez frekvence).

pc5705

Obrázek 5: Počítač Amstrad CPC 464 taktéž obsahoval zvukový čip kompatibilní s AY-3–8910

3. Mixér a změna hlasitosti jednotlivých hudebních kanálů

Důležitou součástí zvukového čipu AY-3–8910 je takzvaný mixér. V něm se pro každý hudební kanál zvlášť nastavuje zdroj signálu, který má být dále zpracováván. Pro každý hudební kanál lze povolit vstup obdélníkového signálu o zvolené frekvenci (viz předchozí kapitola) a vstup z generátoru šumu. V případě, že jsou pro jeden hudební kanál povoleny oba zdroje zvuku, jsou korektně smíchány (tato operace je implementačně velmi jednoduchá, neboť obdélníkový i šumový signál je binární, tudíž lze mixér realizovat pomocí logických hradel). Nastavení mixéru se provádí pomocí řídicího registru R7. Pro každý kanál jsou v tomto registru vyhrazeny dva bity – zápis nuly do příslušného bitu povoluje vstup obdélníkového signálu či šumu. Pokud jsou oba bity nastaveny na logickou jedničku, je výstup pro zvolený zvukový kanál zakázán. Nejvyšší dva bity řídicího registru R7 slouží k určení směru vstupně-výstupních portů – každý port může být nastaven buď do výstupního režimu (zápis dat) nebo do režimu vstupního (čtení dat).

pc5706

Obrázek 6: Počítač Amstrad CPC 664 je na rozdíl od svého bratříčka z pátého obrázku vybaven disketovou mechanikou

Hlasitost hudebních kanálů lze nastavit buď programově na jednu ze šestnácti úrovní nebo je možné hlasitost měnit pomocí generátoru obálky popsaného v následující kapitole. Pro řízení hlasitosti každého hudebního kanálu je určený jeden řídicí registr – R8RA. Amplituda je nastavena čtyřmi bity (rychlou programovou změnou amplitudy je možné přehrávat samplované zvuky), pátým bitem řídicího registru je určeno, zda má být amplituda skutečně řízena programově nebo zda se má použít generátor obálky. Nejvyšší tři bity tohoto řídicího registru zůstávají nevyužity.

pc5707

Obrázek 7: Další počítač obsahující čip AY-3–8910 – poměrně málo rozšířený Spectravideo určený především pro hry

4. Generátor obálky

Dalším funkčním blokem, který se podílí na tvarování výsledného zvuku, je takzvaný generátor obálky (envelope generator). Obálkou je možné (s využitím amplitudové modulace) ovlivnit maximální hodnoty původního obdélníkového a/nebo šumového signálu. Zatímco u minule popsaného čipu SID byly použity obálky typu ADSR (attack, decay, sustain, release), má u AY-3–8910 obálka tvar periodického či neperiodického trojúhelníkového nebo pilového signálu. Ve skutečnosti se však nejedná o analogový signál, ale o signál digitální se šestnácti úrovněmi, tj. na osciloskopu by místo čistých průběhů bylo na každé náběžné nebo sestupné patrných šestnáct „schodů“. Pro nastavení frekvence změny obálky (přesněji doby čítání stavů 0–15) slouží dvojice řídicích registrů RB a RC, do nichž lze zadat šestnáctibitovou konstantu, která je použita v následujícím vztahu:
fEP=fmaster/256EP,
kde EP je šestnáctibitová hodnota uložená do výše zmíněné dvojice řídicích registrů RB a RC. Vzhledem ke konstantě, která se v tomto vztahu vyskytuje, má signál představovaný obálkou delší periodu, než signál obdélníkový. To odpovídá významu obálky, protože v každém cyklu obálky (tEP=1/fEP) se vygeneruje trojúhelníková část vlny mající šestnáct kroků – vždy se projde všemi šestnácti úrovněmi.

pc5708

Obrázek 8: Obálky typu ADSR vytvářené čipem SID

Tvar obálky je určen nejnižšími čtyřmi bity řídicího registru RD, pomocí nichž je možné vybrat jeden z osmi tvarů obálky (ze šestnácti možných kombinací je tedy pouze osm kombinací unikátních). Tyto čtyři bity jsou pojmenovány CONT, ATT, ALT a HOLD. Bitem CONT (continue) se určuje, zda se bude obálka periodicky opakovat, bit ATT (attenuation) vybírá tvar náběžné části vlny (vzestupná či sestupná), nastavením bitu ALT (alternation) lze vynutit zrcadlové či naopak periodické opakování náběžné části vlny (tj. buď se vytváří pilový nebo trojúhelníkový signál) a konečně bitem HOLD lze zajistit „podržení“ výstupu po první periodě na konstantní hodnotě. Generátor obálky se používá mnoha způsoby, například při samplingu (zde lze využít automatické vytváření vzestupných a sestupných hran), syntéze řeči atd. Je také možné vytvářet tón pouze pomocí periodicky se opakující obálky a napodobovat tak generátor pilového nebo trojúhelníkového signálu.

pc5709

Obrázek 9: Obálky vytvářené čipem AY-3–8910

5. D/A převodníky na výstupech hudebních kanálů

Na výstupu celého řetězce, ze kterého jsou složeny hudební kanály, se nachází nelineární digitálně/analogový převodník, který slouží k převodu čtyřbitové hodnoty 0–15 získané modifikací obdélníkového signálu obálkou na napěťovou úroveň v rozsahu do 1,35 Voltů (jedná se o maximální napětí při zatížení analogového výstupu obvodem s odporem 1 kΩ). Díky nelineárnímu D/A převodníku se signál s původně lichoběžníkovým průběhem (výsledek změny amplitudy obdélníkového signálu pomocí obálky) mění na signál se „špičkami“, které dodávají hudbě vytvářené na čipu AY-3–8910 typické zabarvení. Nelinearita D/A převodníku způsobuje problémy při přehrávání samplované hudby, neboť ta je většinou uložena ve formě osmibitových či šestnáctibitových vzorků s lineární závislostí mezi uloženou hodnotou a zaznamenanou úrovní. Z tohoto důvodu se při přehrávání samplované hudby na AY-3–8910 musejí používat převodní tabulky (existuje jich větší množství, liší se jak způsobem uložení, tak i konkrétními hodnotami pro převod; nesmíme také zapomínat na to, že zesilovače zapojené za AY-3–8910 nemusí mít lineární průběh a tudíž se převodní tabulky mohou mezi jednotlivými typy počítačů odlišovat).

pc5710

Obrázek 10: Detail zapojení počítače ZX Spectrum+ 128k, na kterém je patrné, jakým způsobem je výstup ze zvukových kanálů „sečten“ na rezistoru R143 a následně zesílen v zesilovači tvořeném tranzistorem TR15 a rezistory R142 a R114. Zvukový výstup z tohoto počítače je tedy monofonní, jednoduchou úpravou (v podstatě zdvojením zesilovače nebo i použitím dvou zvukových čipů) však lze docílit stereofonního výstupu.

6. Ukázka hudby vytvořené pomocí AY-3–8910

V předchozích částech tohoto seriálu byly uvedeny vzorky hudby vytvořené pomocí zvukových čipů POKEY a SID. Podobně jako pro osmibitové domácí počítače Atari a hudební archiv ASMA i osmibitové počítače Commodore s archivem HSVC neboli High Voltage SID Collection, existují i archivy hudby, které lze přehrát na počítači s čipem AY-3–8910 či na emulátoru takového počítače. Jediný rozdíl spočívá v tom, že zatímco POKEY byl používán téměř výhradně na jedné platformě počítačů a herních konzolích a SID zpočátku prakticky jen na osmibitových počítačích Commodore (i když počet prodaných kusů je úctyhodný), byl zvukový čip AY-3–8910 zabudován v mnoha různých systémech – od herních konzolí přes osmibitové domácí počítače až po na svou dobu velmi výkonné osobní počítače Atari ST. Z toho také vyplývá, že existuje několik různých formátů hudby, jenž jsou zhruba rozděleny do dvou kategorií – osmibitové počítače s mikroprocesory Z80 a počítače Atari ST založené na mikroprocesoru Motorola 68000 (popř. některé jeho výkonnější variantě).

Název Popis
2nd_reality Hudba z dema Second Reality přepsaná pro AY-3–8910 (původní délka souboru s hudbou je pouhých 13 kilobajtů, nejsou totiž použity samply)
great_giana_sis­ters Slavná melodie přepsaná ze SIDu pro AY-3–8910
international_ka­rate Hubbardova hudba na AY-3–8910 (konverze od Mad Maxe)
warhawk Hudba ze hry Warhawk, opět ve verzi pro AY-3–8910
ancient_art_of_chip­tune Původní tvorba pro AY-3–8910
pc5711

Obrázek 11: AY Emulator – jeden z přehrávačů hudby vytvořené pro zvukový čip AY-3–8910

7. Odkazy na Internetu

  1. General Instrument AY-3–8910,
    http://en.wiki­pedia.org/wiki/Ge­neral_Instrumen­t_AY-3–8910
  2. AY programy, hudba, etc.,
    http://bulba.un­tergrund.net/ma­in_e.htm
  3. Project AY,
    http://www.wor­ldofspectrum.or­g/projectay/
  4. AY Players,
    http://www.wor­ldofspectrum.or­g/projectay/a­yplayers.htm
  5. Chiptune,
    http://en.wiki­pedia.org/wiki/Chip­tune
  6. SNDH – Atari ST YM2149 Archive,
    http://sndh.a­tari.org/
  7. 8bitcollective,
    http://www.8bit­collective.com/
  8. Chiptune,
    http://www.chip­tune.com/
  9. STsndplay,
    http://www.no­crew.org/softwa­re-stsndplay.html
  10. Jam for Windows (Just Another Musicplayer),
    http://creamhq­.de/
  11. SND Player,
    http://sndpla­yer.atari.org/
  12. AY Hudba,
    http://www.dmoz­.org/Computer­s/Multimedia/Mu­sic_and_Audio/Au­dio_Formats/A­Y/
  13. www.ayland.x.pl – Internetové rádio vysílající hudbu ze ZX Spectra,
    http://www.ay­land.x.pl/nowos­ci.php
pc5712

Obrázek 12: TurboSound – úprava pro stereo výstup s využitím dvou AY-3–8910

CS24_early

8. Obsah další části seriálu

V následující části seriálu o architekturách počítačů si popíšeme některé přehrávače hudby určené pro AY-3–8910 (YM2149) a dále se budeme zabývat popisem dalších zvukových čipů používaných v osmibitových domácích počítačích i herních konzolách. Bude se jednat především o čipy použité v počítačích firmy Sharp a herních konzolích NES a SNES. Zejména způsob zvukové syntézy na herní konzoli NES a SNES je poměrně zajímavý, protože zde byla použita kombinace syntézy hudby pomocí periodických signálů s různými průběhy, jenž mohou být ovlivněny obálkou, a zvuků tvořených s využitím čtyřbitového samplingu (změna amplitudy) i jednobitového samplingu (změna střídy).

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.