AY-3-8912 a kompatibilní

AY-3-8912 důvěrně zvané áypsilonka, áýčko a podobně je zvukový obvod používaný v ZX Spectru 128 (všechny varianty) a upravených Spectrech 48kB. Do těchto 48kB Specter se pak AY přidávala jako zbastlené hnízdo někam na základní desku a nebo jako koupený interface (např. Melodik). Proto AY hrají zvuky a hudbu nejenom programy pro 128kB Spectra, ale i lecos pro 48, ovšem pokud bylo dost paměti.

V dalším textu se nebudu zabývat tvorbou hudebních rutin, ani programováním AY z Basicu. Předpokládám dobrou znalost programování v assembleru Z80 a tento text by měl sloužit jako referenční příručka při takovém programování.

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.

tabulka registrů AY

Ří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.

obálky
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ý port. Tento je využit v ZX Spectru 128 pro řízení RS232 a MIDI. Není, ale využit v žádném přídavném modulu (jako je třeba Melodik, nebo Best). Verze AY-3-8912 má tento port jeden, existuje ovšem i verze se dvěma porty (AY-3-8910) a bez IO portů (AY-3-8913). AY-3-8911 je úplně jiný nesouvisející obvod.

Schéma zapojení

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

Použitá literatura: manuál a schéma k interface Melodik, schéma ZX Spectra 128kB

Opravené chyby

  • 10.4.2000 - opravil jsem přehozené pořadí bitů v první tabulce tabulce
  • 15.2.2004 - 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

[ Zpět na hlavní stránku ]

Cygnusova stránka o ZX Spectru a kompatibilních počítačích byla napsána (přepsána) výhradně pomocí svobodného Open Source softwaru. V případě že naleznete chybu, nebo byste rádi cokoliv co se ZX Spectrem souvisí, neváhejte mi napsat na některý z mých emailů, nebo pracovně do zaměstnání. Stručně o mém webu se můžete dočíst zde.