Zvukové čipy osmibitové éry: dokončení

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

Sdílet

V dnešní části seriálu o architekturách počítačů si popíšeme přehrávače hudby určené pro zvukový čip AY-3-8910 (YM2149) a dále se budeme zabývat popisem dalšího zvukového čipu používaného v osmibitových domácích počítačích i herních konzolách. Bude se jednat o zvukový čip SN76489 využitý například v počítačích firmy Sharp.

Obsah

1. Přehrávače hudby určené pro zvukový čip AY-3–8910 na Linuxu
2. Přehrávače hudby určené pro zvukový čip AY-3–8910 na MS Windows
3. Vortex Tracker II
4. Zvukový čip SN76489
5. Programování čipu SN76489
6. Generátor šumu
7. Přehrávání samplovaných zvuků na čipu SN76489
8. Odkazy na Internetu
9. Obsah dalšího pokračování seriálu

1. Přehrávače hudby určené pro zvukový čip AY-3–8910 na Linuxu

V předchozí části tohoto seriálu jsme si řekli, že zvukový čip AY-3–8910 byl 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ě, například 68010). Pro operační systém Linux existuje několik různých přehrávačů, pomocí nichž lze přehrát hudbu uloženou v několika formátech, včetně „univerzálního“ AY formátu, který neobsahuje instrukce mikroprocesorů, ale jen hodnoty registrů čipu AY. Jednou ze známějších aplikací je aylet určený pro textovou konzoli (používá se buď textové uživatelské rozhraní či ovládání z příkazového řádku – to je výhodné například při hromadné konverzi hudby do formátu WAV a její následnou komprimaci do MP3 apod.) a její „grafická“ verze xaylet. Hudbu určenou pro AYčko však lze přehrávat i v některých universálních hudebních přehrávačích. Mezi tyto přehrávače patří Audacious (v podstatě se jedná o fork XMMS) s modulem (pluginem) nazvaným VTX (Vortex Player). Autorem implementace tohoto modulu pro přehrávač Audacious je Pavel Vymetálek (viz čtvrtý screenshot).

pc5801

Obrázek 1: Screenshot programu aylet běžícího v textové konzoli.

pc5802

Obrázek 2: Screenshot programu xaylet, o dekoraci oken se stará Fluxbox.

pc5803

Obrázek 3: Hlavní okno a okno playlistu přehrávače Audacious

pc5804

Obrázek 4: Nastavení modulu VTX v přehrávači Audacious

2. Přehrávače hudby určené pro zvukový čip AY-3–8910 na MS Windows

Výběr přehrávačů hudby určené pro AYčko, které běží pod operačním systémem Microsoft Windows, je taktéž zajímavý a poměrně obsáhlý. Známý je přehrávač ZX Spectrum Sound Chip Emulator, dříve nazývaný jednoduše ZX Spectrum plAYer (obrázek 5 a 6). Jak již název této aplikace napovídá, jedná se o přehrávač hudby určené pro osmibitový domácí počítač ZX Spectrum 128+, který AYčko obsahoval. Podobným přehrávačem, dokonce s dobovým uživatelským rozhraním, je MicroSpeccy (obrázek 7 a 8). Tento přehrávač emuluje jak zvukový čip AY, tak i původní „jednobitový“ reproduktor ZX Spectra (známý beeper, který však při správném naprogramování dokáže divy), který je v některých skladbách použit společně s AYčkem. Hudbu určenou pro počítače Atari ST lze přehrát pomocí programu JAM (Just Another Musicplayer), který byl původně vyvíjen přímo pro Atari ST a teprve později došlo k jeho přepsání pro operační systém Microsoft Windows. Právě tento program byl použitý při tvorbě ukázkové hudby v předchozí části tohoto seriálu. Podobně jako další přehrávače, i zde je možné nastavit (obrázek 11), která verze zvukového čipu se má emulovat a taktéž zvolit způsob zapojení tří zvukových kanálů AYčka (existuje totiž několik možností, jak zapojit stereo výstup).

pc5805

Obrázek 5: Hlavní okno přehrávače ZX Spectrum Sound Chip Emulator.

pc5806

Obrázek 6: Dialog s informacemi o přehrávači ZX Spectrum Sound Chip Emulator.

pc5807

Obrázek 7: Hlavní okno přehrávače MicroSpeccy.

pc5808

Obrázek 8: Konfigurace přehrávače MicroSpeccy.

pc5809

Obrázek 9: Hlavní okno přehrávače JAM.

pc5810

Obrázek 10: Playlist přehrávače JAM.

pc5811

Obrázek 11: Nastavení přehrávače JAM.

pc5812

Obrázek 12: Informace o souboru s přehrávanou hudbou.

3. Vortex Tracker II

Zajímavým programem, který se dodnes používá pro tvorbu hudby určené pro zvukový čip AY, je Vortex Tracker II. Tato aplikace pracuje podobným způsobem jako většina trackerů – nejprve se vytvoří tóny jednotlivých nástrojů použitých ve skladbě (zde lze využít všech možností zvukového čipu, včetně přehrávání samplů) a posléze se editují stopy, do nichž jsou zaznamenány přesné časy, kdy má který tón zaznít, délka tónu, jeho výška, opakování zvuku atd. Někteří současní tvůrci hudby pro čip AY sice stále používají programy určené pro ZX Spectrum 128+ či Atari ST, mnozí však přešli právě na Vortex Tracker II, protože po zkomponování celé skladby je možné provést export do mnoha formátů, jež lze přehrát jak výše popsanými hudebními přehrávači, tak i „nativními“ přehrávači pro již zmíněné Spectrum a Atari. Vortex Tracker lze samozřejmě použít i ve funkci hudebního přehrávače, i když ovládání je v tomto případě zbytečně komplikované – jednodušší je použít některý z výše zmíněných jednoúčelových programů.

pc5813

Obrázek 13: Informace o aplikaci Vortex Tracker II.

pc5814

Obrázek 14: Hlavní obrazovka aplikace Vortex Tracker II.

4. Zvukový čip SN76489

Posledním zvukovým čipem pocházejícím z éry osmibitových domácích počítačů, který si v tomto seriálu popíšeme, je čip označený SN76489 popř. SN76489A. Tento čip je použitý například v osmibitovém domácím počítači Sharp MZ-800 (na tomto počítači byla mj. vyvinuta i barevná verze české hry Hlípa, oblíbená byla také akčně-logická hra Flappy) nebo několika herních konzolích: Sega Game 1000, Sega Master System, Sega Game Gear, Sega Mega Drive či ColecoVision. Existují dvě verze tohoto čipu – první je označena SN76489 a druhá SN76489A. Tyto verze se od sebe odlišují především rozdílnou délkou interního posuvného registru (15 vs. 16 bitů), což má poměrně velký – a hlavně slyšitelný – dopad na výšku tónu generovaného šumového signálu. Tón vygenerovaný verzí SN76489 má při přehrávání na SN76489A o 6,25% nižší frekvenci (výšku). Taktéž zvuk šumu je odlišný, protože délka posuvného registru ovlivňuje i periodu, po které se pseudonáhodný „šum“ opakuje (tato perioda je rovna buď 215-1 nebo 216-1, viz další kapitoly).

pc5815

Obrázek 15: Zapojení vývodů zvukového čipu SN76489. Pomocí symbolů „<“ a „>“ je naznačeno, zda se jedná o vstupní, výstupní či obousměrný pin.

5. Programování čipu SN76489

Zvukový čip SN76489 obsahuje tři generátory obdélníkového signálu a jeden generátor šumu (ten je založený na pseudonáhodném generátoru bitové sekvence vytvořeném pomocí posuvného registru se zpětnou vazbou, podobně jako u čipu POKEY). Pro každý generátor je možné nastavit jeho hlasitost (tj. amplitudu) na jednu ze šestnácti úrovní – v tomto ohledu má tedy tento zvukový čip vlastnosti prakticky stejné jako POKEY či AY-3–8910 (týká se to zejména možnosti přehrávání samplovaných zvuků, podobně jako u AY je však závislost na nastavené hlasitosti nelineární). Frekvenci obdélníkového signálu a tím i výšku vytvářeného tónu lze nastavit pomocí desetibitového čísla, které se použije při dělení hodinového signálu. Vzorec pro výpočet frekvence obdélníkového signálu je velmi jednoduchý: fout=fclk/32×N (Hz), kde N je již zmiňovaná desetibitová hodnota. Frekvenci šumu lze vybrat ze tří pevně nastavených hodnot děliče frekvence: 16 (na Sharpu odpovídá frekvenci 6928 Hz), 32 (3464 Hz) a 64 (1732 Hz). Je taktéž možné, aby byla frekvence šumu odvozena od frekvence třetího generátoru obdélníkového signálu (jeho index je 2). V tomto případě je možné frekvenci nastavovat stejně jako u generátorů obdélníkového signálu, tj. desetibitovou konstantou, ovšem s tím omezením, že je pro tento účel obsazen třetí kanál.

pc5816

Obrázek 16: Osmibitový domácí počítač Sharpu MZ-800, který obsahovat čip SN76489.

Vzhledem k tomu, že do čipu SN76489 se data přenáší po jednotlivých bajtech (nelze adresovat jednotlivé registry, neboť čip neobsahuje piny pro zápis adresy – viz obrázek číslo 15), je formát jednotlivých bajtů (zpráv) zvolen tak, aby bylo zcela přesně určeno, kterou hodnotu (či) hodnoty daný bajt představuje. Existují čtyři typy přenášených zpráv (nastavení spodních 4 bitů děliče frekvence, nastavení vyšších 6 bitů děliče frekvence, nastavení generátoru šumu a změna hlasitosti jednotlivých kanálů), které jsou přehledně popsány na adrese http://www.scav­.ic.cz/sharp_mz-800/sharp_mz-800_6_PSG-SN76489AN.htm a http://www.scav­.ic.cz/sharp_mz-800/vse_o_MZ-800/vse_o_MZ-800–6_Zvukovy_gene­rator.htm. Interně je veškeré nastavení uloženo do osmi registrů s různou bitovou délkou. Ve čtveřici čtyřbitových registrů jsou uloženy hlasitosti jednotlivých kanálů (3 kanály s obdélníkovým signálem a 1 kanál se šumem), další tři desetibitové registry obsahují konstanty pro děliče frekvence kanálů s obdélníkovým signálem, a konečně jeden tříbitový registr obsahuje nastavení generátoru šumu (frekvence a typ šumu).

pc5817

Obrázek 17: Detail klávesnice a magnetofonu zabudovaného v počítači Sharp MZ-800.

6. Generátor šumu

Generátor šumu zvukového čipu SN76489 může pracovat ve dvou režimech. V obou případech se používá posuvný registr o délce 15 či 16 bitů (podle verze čipu), jehož obsah je s každým taktem posunut doprava o jeden bit. Poslední bit posuvného registru představuje výstup z generátoru šumu. V prvním režimu je poslední bit posuvného registru spojen s bitem prvním, tj. sekvence bitů se neustále cyklicky opakuje (původní sekvence obsahuje pouze jeden jedničkový bit, tj. výstupem je pravidelný obdélníkový signál se střídou 1:15 resp. 1:14). V režimu druhém je zpětná vazba poněkud složitější – přes logické hradlo XOR jsou na vstup prvního bitu přiváděny výstupy z bitu posledního a třináctého (popř. dvanáctého), takže výsledkem je sekvence pseudonáhodných hodnot, jejichž opakování nastane až po proběhnutí 215-1 resp. 216-1 stavů (poslední stav je představován samými nulami) – jedná se o totožné chování, jakého je možné docílit s využitím již popsaného zvukového čipu POKEY, který obsahoval dokonce několik podobně sestrojených poly čítačů (polycounter). Princip činnosti generátoru šumu pracujícího v prvním režimu (cyklický posuvný registr) je zobrazen na schématu pod odstavcem:

       +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 +---> | 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| -> Output
 |     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-++
 |                                                    |
 +----------------------------------------------------+ 

V případě, že je generátor šumu přepnut do druhého režimu, schéma zapojení posuvného registru (přesněji řečeno jeho zpětné vazby) se změní následovně:

       +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 +---> | 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| -> Output
 |     +--+--+--+--+--+--+--+--+--+--+--+--+-++--+--+-++
 |                                 ______  0 |        |
 |                             0  /     //---+        |
 +-------------------------------( XOR ((  0          |
                                  \_____\\------------+ 
pc5818

Obrázek 18: Princip práce čtyřbitového poly čítače generujícího binární pseudonáhodný šum.

7. Přehrávání samplovaných zvuků na čipu SN76489

S využitím zvukového čipu SN76489 lze přehrávat i samplované zvuky, čehož se poměrně často využívalo především v různých hrách. Nejjednodušší způsob přehrávání samplovaných zvuků představuje metoda PCM (Pulse Code Modulation). Její princip je velmi jednoduchý – frekvence všech tří zvukových kanálů je vynulována (signál má konstantní hodnotu) a jejich hlasitost se v pravidelných intervalech (odpovídajících vzorkovací frekvenci) mění. Mezi nevýhody PCM patří omezení na čtyřbitové vzorky (popř. při vhodné kombinaci všech tří kanálů se jedná o cca 5 bitů) a taktéž to, že závislost skutečné hlasitosti na nastavené hodnotě není lineární, což vede k nutnosti vytvoření převodní tabulky. PCM lze však jednoduše naprogramovat, přičemž rychlost změny hlasitosti je přímo určena vzorkovací frekvencí (u dále popisované pulsní šířkové modulace je nutné data do SN76489 zapisovat mnohem rychleji, což může být v některých případech problematické, zejména tehdy, pokud nemá počítač dostatečně přesný časovač).

Druhou možností přehrávání samplovaných zvuků je využití pulsní šířkové modulace – PWM (Pulse Width Modulation). V tomto případě je frekvence všech tří zvukových kanálů opět nastavena na nulovou hodnotu, generátor šumu může být nastavený libovolně, ale jeho hlasitost musí být nulová, aby nebyl jeho výstup slyšitelný. Následně se programově mění hlasitost všech tří kanálů buď na minimum (0×0f) či naopak na maximum (0×00) na základě bitového vzorku odpovídajícího hlasitosti přehrávaného vzorku (jeden vzorek je přehrán například sekvencí 16 binárních hodnot; frekvence jejich přehrávání odpovídá šestnáctinásobku vzorkovací frekvence původních samplů). Předností je větší dynamika zvuku, ovšem zvětšují se nároky na přesné a dostatečně rychlé časování – frekvence zápisu dat do čipu SN76489 je přímo úměrná jak původní vzorkovací frekvenci, tak i požadovanému dynamickému rozsahu. Většinou se volí rozumný kompromis, například vzorkovací frekvence je nastavena na 10 kHz a dynamický rozsah odpovídající zhruba kazetovému magnetofonu (cca 45 dB). Princip pulsní šířkové modulace je ukázán na devatenáctém obrázku (předpokládá se přitom, že dochází ke zkreslení výsledného analogového signálu vlivem „paralelních“ kapacit v zesilovači a „sériové“ indukčnosti reproduktoru).

pc5819

Obrázek 19: Princip pulsní šířkové modulace (PWM) v případě, že je na výstupu signál integrován (například za pomoci kondenzátoru – sklon modré čáry odpovídá časové konstantě τ RC článku).

8. 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. SNDH – Atari ST YM2149 Archive,
    http://sndh.a­tari.org/
  6. 8bitcollective,
    http://www.8bit­collective.com/
  7. Chiptune,
    http://www.chip­tune.com/
  8. Chiptune na Wikipedii,
    http://en.wiki­pedia.org/wiki/Chip­tune
  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
  14. SN76489 sound chip details
    http://web.in­ter.nl.net/user­s/J.Kortink/ho­me/articles/sn76489/
  15. SN76489 notes
    http://www.smspo­wer.org/maxim/doc­s/SN76489.txt
  16. MZ-800 course Chapter 6
    http://www.shar­pmz.org/mz-800/800course020­.htm
  17. PSG – SN 76489AN
    http://www.scav­.ic.cz/sharp_mz-800/sharp_mz-800_6_PSG-SN76489AN.htm
  18. Programovatelný zvukový generátor (PSG)
    http://www.scav­.ic.cz/sharp_mz-800/vse_o_MZ-800/vse_o_MZ-800–6_Zvukovy_gene­rator.htm
  19. Music for Sharp MZ-800
    http://www.scav­.ic.cz/downlo­ad/MZ-800/MZ-800_Software/COM/MZF/P­ROGS/800/Music/
  20. Texas Instruments SN76489
    http://en.wiki­pedia.org/wiki/Te­xas_Instrumen­ts_SN76489
pc5820

Obrázek 20: Hard plAYer – obdoba HardSIDu, ovšem s využitím zvukového čipu AY-3–8910.

ict ve školství 24

9. Obsah dalšího pokračování seriálu

V následující části seriálu o architekturách počítačů se budeme zabývat především zvukovým čipem Paula použitým ve slavných počítačích Amiga. Právě tento čip odstartoval éru samplované počítačové hudby přehrávané jen s minimální asistencí mikroprocesoru (mikroprocesor tedy nemusel provádět ani přenos dat ani vzájemné mixování jednotlivých zvukových vzorků). Na počítačích PC byla Paula překonána až zvukovou kartou Gravis Ultrasound, předchozí zvukové karty určené pro přehrávání samplované hudby byly tvořeny buď pouhými D/A převodníky, nebo D/A převodníky s doplněným DMA kanálem – viz další části tohoto seriálu. Příště si taktéž popíšeme princip takzvaných (hudebních) modulů – jedná se o ve své době velmi populární soubory se zkratkami .mod, .xm či .s3m, ve kterých jsou uloženy jak navzorkované zvuky jednotlivých hudebních nástrojů, tak i stopy obsahující informace o tom, ve které chvíli a s jakou rychlostí mají být jednotlivé samply (navzorkované zvuky) přehrávány.

pc5821

Obrázek 21: Legendární počítač Amiga 500 vybavený zvukovým čipem Paula.

Autor článku

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