AY-3-8912 a kompatibilní
AY-3-8912 důvěrně zvané áypsilonka, áýčko... je zvukový obvod používaný nejenom v ZX Spectrum 128k, +2, +2A, +2B, +3, ale i v mnoha rozšířeních pro ZX Spectrum 48kB. V minulosti se do ZX Spectrum 48kB často v nějaké podobě AY přidávala ať už jako amatérsky zbastlené hnízdo někam na základní desku mezi ostatní čipy, nebo jako hotový koupený interface, např. Melodik od Didaktiku, Simple AY od Jiiiry a další. Za tu dobu, co se těmito počítači zabývám jsem rozšiřujících interface viděl spoustu.
Právě proto, že AY je standardní zvukový čip ZX Spectra 128k i mnoha klonů a proto, že si ji mnozí pořizovali i k 48kB počítačům hrají na ní i mnohé hry a dema určená pouze pro 48k Spectrum, nebo v některých případech ze 128kB konvertované hry pro Didaktik Gama 80k, kde se pro uložení hudební rutiny používá rozšířená paměť v případě, že by se už do 48kB nevešla.
AY existují tři původní varianty. AY-3-8212 s jedním IO portem, AY-3-8910 se dvěma IO porty a AY-3-8913 bez IO portů. Všechny tři hrají stejně a stejně se i ovládají. Kromě originálních AY existují i kompatibilní čipy jiných výrobců. Vyzkoušel jsem KC89C72, hraje úplně stejně jako originál, jen o trochu hlasitěji. Rozdíl neznatelný dokud nepustíte oba čipy vedle sebe současně.
Kompatibilní měly být i čipy Winbond WF19054 (dle fotky ZX Spectrum Nucleon 512k s tímto čipem) a OKI M5255, nebo Yamaha YM2149F (dle Wikipedie), ale ani jeden z nich vyzkoušený nemám. Seznam kompatibilních čipů je i na tomto webu.
Popis ovládání AY-38912 a kompatibilních
Registry AY
AY má dva porty, jeden slouží k výběru jednoho z 15 registrů a druhý port slouží k zápisu (event. čtení) dat na tento registr. K volbě registru slouží port 65533 a k nastavení obsahu registru slouží port 49149. Volbu registru je pochopitelně nejlepší provést před každým nastavením registru. Význam registrů je doufám jasně patrný z následující tabulky. Protože AY má šířku datové sběrnice jen 8 bitů, bylo nutné některé registry rozdělit.
Řízení frekvence tónu (R0-R5)
Řízení frekvence tónu je 12 bitové a je prováděno celkem v 6 registrech. AY vlastně funguje jako dělička hodinového signálu a ten má frekvenci 1,7897725MHz (polovina hodinové frekvence procesoru Z80 ve Spectru 128kB). Chcete-li nastavit na výstupu určitou (v rámci možností) frekvenci pak ji můžete spočítat takto Frekvence_Tónu=(1789772,5/(16*PT)), kde PT je 12 bitová hodnota frekvence tónu pro AY. Tuto stačí vydělit celočíselně a modulo 256, čímž získáte 2 byty pro 2 registry. AY tak dokáže generovat frekvence od 27,3 Hz (PT=1) až do 111,8 kHz (PT=4095).
Řízení frekvence šumu (R6)
I frekvenci šumu lze nastavit a to prakticky stejně jako u tónu, ale pouze 5 bity. Protože dělení probíhá stejně (dělí se hodnotou na portu *16), lze nastavit frekvenci šumu od 3608Hz do 111,8kHz.
Řízení mixeru (R7)
Tento registr umožňuje vypnout a zapnout šum i tón pro jednotlivé kanály. Log. 1 znamená vypnutí příslušné činnosti na příslušném kanále a log. 0 zapnutí. Kromě toho lze bitem 6 volit jestli bude 8 bitová brána pracovat jako vstupní (log. 0), nebo jako výstupní (log. 1).
Řízení hlasitosti (R8, R9, R10)
Hlasitost lze řídit 4 bity, bit pátý zapíná (1), nebo vypíná (0) automatickou změnu hlastosti podle frekvence a typu obálky. Je-li zapnuta změna hlasitosti podle obálky pak vůbec nezáleží na nastavení dolních 4 bitů příslušného registru.
Hlasitost se nemění lineárně, ale logaritmicky což způsobuje trochu problémy při přehrávání samplů, ale odpovídá fyziologii lidského ucha.
Řízení frekvence obálky (R11 a R12)
AY umí u přehrávaného tónu měnit hlasitost a to i periodicky. Nastavení rychlosti takové změny resp. frekvence periodicky se opakujících změn je 16 bitové, tedy frekvenci obálky je možné nastavit od 0,106Hz až do 6991Hz. Tuto frekvenci je možné vypočítat takto Frekvence_obálky=(1789772,5/(256*Hodnota_registrů)), kde hodnota registrů je číslo v intervalu <1,65535>.
Řízení tvaru obálky (R13)
Tvar obálky je ve skutečnosti nastavení hlasitosti výstupu v závislosti na čase. Tato změna hlasitosti je prováděna čítačem a projeví se jen na tom kanálu, který má v registru hlasitosti nastaven bit 4=1. Změna hlasitosti může být jednorázová, nebo periodická. Asi nejlépe to je vidět z tabulky.
Význam bitů portu R13 | ||
---|---|---|
B0 | (pokračuj) | je-li v log. 1 bude vzor cyklu takový jaký byl definovaný bitem 0 (podrž) |
B1 | (směr) | je-li v log. 1 bude čítač čítat od 0 k 15, je-li v log. 0 bude čítat od 15 k 0 |
B2 | (střídej) | je-li v log. 1 čítač změní směr čítání (od 0 k 15 a od 15 k 0) po každém cyklu |
B3 | (podrž) | je-li v log. 1 bude proveden jen 1 cyklus a po skončení podrží poslední stav obálky |
je-li v log. 0 bude po 1 cyklu čítač resetován a zůstane ve stavu 0 |
8 bitová brána (R14)
AY obsahuje kromě generátoru zvuku i 8 bitový IO port. Ten je využit v ZX Spectru 128 pro řízení RS232 a MIDI. Nebývá využit v přídavných modulech, jako je třeba Melodik, nebo interface Best, Jiiirův Simple AY... Verze čipu AY-3-8912 má tento port jeden, verze AY-3-8910 má dva IO porty a bez IO portů je AY-3-8913. AY-3-8911 je úplně jiný nesouvisející obvod.
Použití IO portu nemá vliv na zvuk. Ale při nastavování registru 7 je pravděpodobně rozumnější nastavovat IO porty jako vstupy, pro každý případ.
Schéma zapojení
Toto schéma neobsahuje chybu (chybějící kondenzátor 100nF mezi invertory), kvůli níž hrály Melodiky někdy o oktávu výš, protože oscilátor občas (tak v polovině případů) začal po zapnutí kmitat na vyšší harmonické než měl. Nutno ovšem uznat, že servis Didaktiku Skalica tuto závadu odstranil co možná nejrycheji, tedy alespoň podle mé osobní zkušenosti.
Pro pokusy s nastavováním AY na ZX Spectru a pro pochopení jak vlastně vše funguje doporučuji program AY-Driver od Lubomíra Bláhy (Tritolsoft), který umožňuje velice přehledně nastavovat jednotlivé bity (nejenom). Nastavování je přitom hodně podobné tabulce registrů.
Download
- AY-Driver - verze pro Betadisk - ZIP 18kB
- scan datasheetu AY-3-8912 od General Instrument - PDF 370kB
Použitá literatura: manuál a schéma k interface Melodik, schéma ZX Spectra 128kB
Historie změn článku
- 2000-04-10 - opravil jsem přehozené pořadí bitů v první tabulce tabulce
- 2004-02-15 - zkontroloval jsem celou stránku podle katlogového listu a našel daší chyby, v textové tabulce pod průběhy obálek měly bity opačné pořadí a byly špatně uvedené obvody s IO porty
- 2019-10-30 - jen drobné korekce související s IO portem a RS232