
Foto: Ikon

Zdroj: RomBor
MUSE - MUsic and Sound Enhancer
MUSE je zvukový interfejs založený na integrovanom obvode SAA1099P. Zároveň však poskytuje aj možnosť pripojenia bežného Atari Joysticku. Zvukový generátor SAA1099P poskytuje tieto možnosti:
- 6 frekvenčných generátorov - 8 oktáv na každý generátor
- 2 šumové generátory
- oddelené riadenie hlasitosti pre ľavý a pravý kanál, pre každý generátor - 16 úrovní
- 2 generátory hlasitostnej obálky
- mixér šumu a tónov
Popis zapojenia
Základné zapojenie obvodu SAA1099P (IC1) je katalógové, ale v podstate bolo prevzaté zo zapojenia tohto obvodu v počítači SAM Coupé. Hodinový vstup SAA1099P je budený oscilátorom, ktorý je tvorený obvyklým zapojením pomocou troch hradiel 74LS04 (IC2), kryštálom 8 MHz (Q1) a R7, R8, C7 a C8.
Referencia pre analógové výstupy je vytvorená LC filtrom z napájacieho napätia (C14, L1, C15). Analógové výstupy ľavého a pravého kanála sú cez jednoduchý filter (R1 až R4, C1 až C6) vyvedené na 3,5 mm stereo jack (X3) a pinovú lištu (JP1).
Napájanie IC1 (VSAA) je riešené "vypínateľne" prostredníctvom T1 a dvoch hradiel IC2, ktorých vstup je pripojený na pin /CO1
paralelného portu (signál -PWR
). Toto riešenie bolo zvolené preto, že SAA1009P nemá vstup Reset a dané zapojenie umožňuje po resete počítača odpojiť napájanie SAA1099P a tým ho "umlčať". Zároveň je na doske tlačidlo S1, ktorým je možné SAA1099P umlčať aj bez resetu počítača. Napájacie napätie je filtrované pomocou C11 a C13. Kondenzátor C13 má pomerne vysokú hodnotu z toho dôvodu, aby pri prepínaní portu/budiča na vstup<->výstup medzi SAA1099P a Joystickom vydržal "napájať" SAA1099P, kým sa port/budič opäť prepne zo vstupu na výstup. Viď ďalej.
Interface MUSE sa pripája k PP 01 prostredníctvom paralelného interfejsu na konektor K3 (FRB-F48) - X1. Toto neobvyklé riešenie so sebou nesie o čosi menej priamočiare ovládanie SAA1099P, ale nie je to nič neprekonateľné. Dátová zbernica SAA1099P je pripojená na port PA PIO 8255 - signály /DAT0
až /DAT7
. Zostávajúce zbernicové signály sú pripojené na port PC PIO 8255. Zápisový signál -WR
na /CO0
, výberový signál -CS
na /BC3
a adresový signál A0
na /BC2
.
Konektor X2 (Cannon-M9) pre pripojenie bežného Atari Joysticku je pripojený cez oddeľovač/budič 742LS45 (IC3). Ten je aktivovaný signálom DIR
(/CO4
), ak je interný budč portu PA v PP 01 prepnutý na vstup. Okrem základných smerov F/U/D/L/R
sú na bity 5 a 6 vyvedené aj signály X
a Y
pre prípadné ďalšie akčné tlačidlá. Kľudový stav vstupov IC3 je definovaný odporovou sieťou RN1.
Pinové lišty JP2, JP3 a JP4 umožňujú podľa potreby upraviť signály A0
, -CS
a -WR
pull-up/down odpormi alebo kondenzátormi. Na niektorých PP 01 SAA1099P nereagovalo korektne na zmeny týchto signálov.
Na konektore X1 sú prepojené signály 2MHZ
a CLK1
, čo umožňuje využívať prerušenie od časovača 1.
Popis programového ovládania
Aby mohli byť posielané dáta do jednotlivých registrov SAA1099P, je potrebné, aby boli port PA PIO 8255 aj interný budič prepnuté na výstup. Zároveň je treba zapnúť napájanie pre SAA1099P. Po prvotnom zapnutí napájania je dobré počkať aspoň 20 ms, kým sa nabije filtračný kondenzátor C13.
Výstupy PIO 8255 na paralelnom interfejse sú prostredníctvom budičov invertované a tak je potrebné aj posielané dáta i signály invertovať. Pôvodne zbernicové signály A0
, -CS
a -WR
sú pripojené na port PC a tak je nutné zápis do SAA1099P "simulovať". V nasledujúcej tabuľke je prehľad nastavovaných signálov:
Signál | Pin na K3 | Význam |
---|---|---|
-WR |
/CO0 |
0->1->0 = zápisový impulz |
-PWR |
/CO1 |
1 = pripojenie napájania SAA1099P |
A0 |
/BC2 |
0 = voľba registra SAA1099P, 1 = zápis dát do zvoleného registra |
-CS |
/BC3 |
0->1->0 = výberový impulz |
Jednoduchý príklad výberu registra SAA1099P a zápis dát do vybraného registra.
Prehrávanie muziky alebo zvukov sa obvykle robí v tzv. prerušení. To znamená, že sa v pravidelných intervaloch preruší vykonávanie hlavného programu a skočí sa do rutiny (hovorí sa jej často hradlo), ktorá "obslúži" SAA1099P a opäť sa vráti do hlavného programu. V PP 01 sa môže využiť prerušenie INT 1 vyvolávané od časovača 1 a preto sú na konektore X1 prepojené signály 2MHZ
a CLK1
, čím sa k časovaču 1 pripoja "systémové hodiny". Najobvyklejšie je, že sa prerušenie vyvoláva 50x za sekundu, teda každých 20 ms.
Ďalej je nutné inicializovať samotné prerušenie a pripraviť rutinu obsluhy prerušenia. Pri vyvolaní prerušenia INT 1 mikroprocesor predá riadenie na adresu 0008h. Tam si uložíme iba skokovú inštrukciu do skutočnej rutiny pre obsluhu prerušenia. Prerušenie INT 1 je nutné "odblokovať" a to nastavením 6. bitu na porte C Systémového PIO. Nakoniec je treba radiču prerušenia povedať, aby akceptoval prerušenie INT 1 a povoliť prerušenie "globálne".
Rutina pre obsluhu prerušenia nesmie zmeniť žiadne registre, aby po návrate mohol hlavný program pokračovať, akoby ani k prerušeniu nedošlo. Okrem samotného prehratia (časti) muziky je dôležité re-inicializovať prerušenie INT 1.
Detekcia pripojneia MUSE
Samotný obvod SAA1099P neumožňuje spätné čítanie hodnôt jeho registrov, takže touto cestou nie je možné zistiť, či je MUSE pripojený. Rovnako tak nie je možné zistiť prítomnosť MUSE čítaním stavu portu Joysticku.
Keďže ale MUSE privádza hodiny k časovaču 1, je možné využiť prerušenie od časovača 1 na detekciu, či je MUSE pripojený. Ak prerušenie nastane, MUSE je pripojený, ak nenastane, nie je.
Súčasné použitie SAA1099P a Joysticku
Na port PA je súčasne pripojený aj SAA1099P a aj Joystick (ten je zámerne pripojený cez osobitný budič, aby bol oddelený od "zbernice", keď je port PA naprogramovaný na výstup). Z toho je jasné, že nemôžu byť "aktívne" oba naraz. SAA1099P potrebuje, aby bol port PA naprogramovaný na výstup, Joystick potrebuje, aby bol port PA naprogramovaný na vstup. Na prvý pohľad sa to možno nezdá ako problém, avšak kameňom úrazu je tu práve "vypínateľné" napájanie SAA1099P.
V okamihu, keď sa pošle do 8255 riadiace slovo pre zmenu smeru portu PA na vstup, tak sa vynulujú aj výstupy na porte PC a to nám odpojí napájanie od SAA1099P (-PWR=1
). Aby nám ale SAA1099P v tomto okamihu "zostal pri živote", je v napájacej vetve kondenzátor C13 s vysokou kapacitou, ktorý na niekoľko milisekúnd udrží na SAA1099P napájacie napätie. Samozrejme to znamená, že po prečítaní stavu Joystiku je treba čo najskôr opäť prepnúť port PA na výstup a obnoviť napájanie SAA1099P. Tento mechanizmus zabezpečí, že môže počas hry hrať muzika a môže sa testovať aj Joystick.
Podpora pre programovanie SAA1099P
Pre tvorbu zvukov a muziky je samozrejme možné vytvoriť si vlastné rutiny, ako to už urobili zrejme mnohí. Stačí si iba naštudovať katalógový list SAA1099P. Pred pár rokmi ale vznikol SAA1099Tracker, ktorý síce nie je úplne dokončený (kompilácia sa robí "externe" a nie sú hotové všetky verzie hradla (prehrávacej rutiny)), ale editor je plne funkčný.
- SAA1099Tracker - webová aplikácia na tvorbu muziky pre SAA1099P.
- Kompilátor pre SAA1099Tracker - webová aplikácia na kompiláciu STMF zdrojových súborov z SAA1099Trackera.
- Datasheet SAA1099P (PDF - 0,9 MB)