Zvukové čipy v osmibitech

3. část

Zvukový čip Texas Instruments SN76489 (DCSG)

Třetím PSG, s nímž se v tomto článku seznámíme, je zvukový čip Texas Instruments SN76489, který je spíše známý pod zkratkou DCSG. Tento čip byl původně navržen pro osmibitový domácí mikropočítač TI-99/A, ovšem nakonec byl použit v mnohem známějších mikropočítačích počítačích BBC Micro či Sharp MZ-800, ale i v herních konzolích společnosti Sega, konkrétně v modelech SG-1000, Sega Master System, Sega Game Gear i v Sega Genesis (aka Sega Mega Drive).

I přesto, že zkratka DCSG znamená "Digital Complex Sound Generator", je čip SN76489 poměrně jednoduchý a v porovnání s POKEY nabízel hudebníkům menší možnosti konfigurace. Ostatně si sami můžete porovnat možnosti obou čipů porovnat po přečtení následujících odstavců.

Zvukový čip SN76489 byl dodávaný v pouzdru DIL o šestnácti vývodech a umožňuje generování (obdélníkových) zvukových signálů s volitelnou frekvencí a amplitudou. SN76489 obsahuje tři tónové generátory vytvářející periodický obdélníkový signál a jeden generátor šumu s pevně danou periodou 32767 (existuje ovšem i dále zmíněná varianta SN76489A, u níž je perioda zvětšena na 65535, takže šum na tomto čipu zní odlišně od originálu).

Frekvence každého tónového generátoru je určena desetibitovou konstantou uloženou do řídicího registru čipu SN76489. Tato konstanta je použita ve frekvenční děličce (běžném čítači), přičemž reálná frekvence vytvářeného obdélníkového signálu se vypočítá z frekvence hodinového signálu poděleného konstantou 32. Typická frekvence hodinového signálu přitom u herní konzole SG-100 byla nastavena na hodnotu 3,579545 MHz pro konzole určené pro normu NTSC a 3,546893 MHz pro konzole pro normu PAL. U dalších počítačů a konzolí může být frekvence odlišná, takže se hudba a zvuky musely při přenosu na jinou platformu přeprogramovat.

U každého tónového generátoru je taktéž možné určit amplitudu pomocí čtyřbitové hodnoty. Na výstupu se všechny zvukové signály sčítají, takže se rychlou změnou amplitudy a vhodným nastavením frekvencí jednotlivých zvukových kanálů dají generovat i poměrně složité melodie nebo zvuky ve hrách (v tom se od sebe TIA, POKEY ani DSCG příliš neodlišují).

Jak jsme se již řekli v předchozích odstavci, obsahuje tento čip navíc jeden generátor šumu, který je implementován pomocí posuvného registru o šířce patnácti bitů se zpětnou vazbou (bit, který se vrací na vstup posuvného registru, je získán logickou operací nonekvivalence (XOR) vybraných bitů posuvného registru). Pro generátor šumu je možné zvolit pouze tři frekvence: Fosc/64, Fosc/128 a Fosc/256. Poněkud nešikovné je to, že obsah generátoru šumu není možné přečíst mikroprocesorem, protože by se tato funkce mohla hodit ve hrách, které mnohdy vyžadují generátor (pseudo)náhodných čísel.

Generátor šumu zvukového čipu SN76489 může pracovat ve dvou režimech. V obou případech se používá již zmíněný 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í 32767 resp. 65535 stavů (poslední stav je představován samými nulami a nepoužívá se). 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 či TIA (i když délka periody se liší).

Čip SN76489 obsahuje celkem osm interních řídicích registrů. Tři registry, každý o šířce deseti bitů, slouží pro uložení konstanty pro děličky frekvence tónových generátorů (určují tedy výšky tónů odvozených od vstupního hodinového signálu). Další tři registry, tentokrát o šířce čtyři bity, jsou určeny pro zápis amplitudy tónových generátorů. Sedmý registr má taktéž šířku čtyři bity a určuje amplitudu generátoru šumu. A konečně poslední registr je pouze tříbitový a je určen pro řízení generátoru šumu (volba ze tří frekvencí odvozených od Fosc + režim generátoru).

Vzhledem k tomu, že se do čipu SN76489 data přenáší po jednotlivých bajtech a není možné adresovat jednotlivé registry, neboť čip neobsahuje žádné piny pro zápis adresy!, 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 čtyř bitů děliče frekvence, nastavení vyšších šesti bitů děliče frekvence (dohromady tedy deset bitů), nastavení generátoru šumu a změna hlasitosti jednotlivých kanálů.

Jak je z tohoto popisu patrné, byly možnosti zvukového čipu SN76489 skutečně poněkud menší než možnosti konkurenčních čipů AY-3–8910 či POKEY, na druhou stranu ovšem lepší, než tomu bylo u čipu TIA použitého v námi oblíbené herní konzoli Atari 2600.

Zvukový čip Texas Instruments SN76496

Výše popsaný čip SN76489 byl vyráběn v několika různých verzích. Původní verze byla označována pouze SN76489, popř. SN76489N v případě úzkého pouzdra DIP. Pozdější varianty, které byly označovány SN76489A a SN76489AN, se od původních verzí lišily především inverzními výstupními signály, což se projevilo na odlišném zapojení zesilovače (ale na výslednou podobu zvuku prakticky neměly žádný vliv). Maximální hodinová frekvence všech těchto čtyř čipů byla stanovena na 4 MHz, takže tyto čipy byly dobře využitelné ve všech mikropočítačích a konzolích, v nichž byly frekvence hodinového signálu odvozeny od televizních norem NTSC a PAL.

Kromě toho se ještě setkáme s variantami označovanými SN76494 popř. TMS9919, u nichž byla maximální hodinová frekvence snížena na 500 kHz (z označení TMS navíc můžeme vidět, že tyto čipy byly vyráběny i dalšími výrobci). Ve skutečnosti se jedná o prakticky shodné čipy s původním SN764789, ovšem chybí u nich vstupní dělička frekvence 1/8. Tyto varianty se používaly například i v herních automatech.

Mnohem zajímavější je čip nesoucí označení SN76496, který je sice postaven na původní variantě SN76489, ovšem navíc využívá pin číslo 9, který nebyl u původní řady SN76489 zapojen. U SN76496 slouží pro vstup audio signálu (AUDIO IN), což umožňovalo kombinaci většího množství zdrojů zvuků (připomeňme si, že na výstup těchto čipů byl vyveden analogový signál vzniklý součtem všech zvukových kanálů, na rozdíl od některých pozdějších čipů s FM syntézou, které vetšinou vyžadovaly speciální D/A převodník).

Pavel Tišnovský
2018