Építsünk hanggenerátort!
3 csatornás programozható hanggenerátor interface


Bevezetés
Nélkülözhetetlen zeneelméleti alapfogalmak
Építsünk hanggenerátort!
   Hanggenerátor mono kimenettel
   Hanggenerátor sztereo kimenettel
   Külső órajel generálása
   Formai javaslat az interface kivitelezéséhez
Az AY-3-8912 hanggenerátor IC
A hanggenerátor programozása
   Mintaprogramok a hanggenerátor használatához
PIO (parallel input-output) párhuzamos digitális be / kimeneti adatvezérlés
Utószó
Függelék - hanggenerátor frekvencia-táblázat


Bevezetés

"A zene térben két dimenzióban, vízszintesen és függőlegesen létrejövő jelenség. A vízszintes dimenziót a dallamvonal jelöli, a függőlegeset az összhangzat vagyis az akkord: több hang egyidejű megjelenése egymás fölött." - olvashatjuk a lexikonban. A zene ősi eredetű jelenség, a társadalmi fejlődés minden szintjén találkozhatunk vele, kezdve két fadarab egymáshoz ütögetésétől egészen a modern gépzenéig.
Egy dolgot azonban már a legegyszerűbb zenei hangzásoknál is vizsgálnunk kell: hány hangot szólaltatunk meg egyidőben? A vízszintes zeneszemlélet tudománya a melódiatan vagy más szóval a dallamtan. Ez a tudomány foglalkozik az egy hanggal létrehozható jelenségekkel (pl. oktáv, hangnem, amplitúdó, lépések, hangközök stb.). A függőleges zeneszemlélet tudományága az összhangzattan, amely az egyidejűleg megszólaltatott hangok konszonanciájával (különböző hangmagasságok kellemes együtthangzása) illetve disszonanciájával (nem összeillő hangok együtthangzása) foglalkozik. A mai zeneszemlélet szerint az összhangzattant szorosan együtt kell tárgyalni a dallamtannal, a kettő egymás nélkül nem létezhet. Ma már megkülönböztetünk alacsonyabb- és magasabb rendű összhangzatformákat. Az alacsonyabb rendű összhangzat tipikus példája az afrikai őslakosság kezdetleges hangszerekkel nyújtott dallam- és zajjátéka. Magasabb rendű összhangzatok csak a középkortól kezdtek kialakulni.
A zenestruktúra és harmónia tökéletes egyeztetését ma már a digitális technika nagy vívmányai, a számítógépek és a szintetizátorok is segítik. A gépzene a 70-es évek derekán kezdett kialakulni. Jeles képviselői közé tartoznak a KRAFTWERK együttes és a TANGERINE DREAM trió, de nem hagyhatjuk ki a sorból a japán TOMITA nevét sem.
A szintetizátorok óriási előnye, hogy az eredeti hangszerek ( pl. a zongora, gitár, xilofon ) hangjának utánzásán túlmenten olyan hangok generálására is képesek, amelyeket hagyományos hangszerekkel lehetetlen előállítani. Ma már több cég gyárt különböző kategóriájú szintetizátorokat. A CASIO elsősorban a kisebb kategóriában robbant be a piacra. A PT, MT és CT sorozat darabjaival a hazai üzletekben is találkozhatunk. A nagyobb méretű és tudású szintetizátorok közül a legismertebb a YAMAHA cég DX-7 típusú készüléke, amely ritkán bár, de szintén megvásárolható a hazai áruházakban (mintegy 120 ezer forintért). Megemlíthetjük még a KORG termékeit is, melyek igen közkedveltek a pop-együttesek körében.
A szintetizátorok többsége dobgéppel együtt kerül forgalomba, de mostanában már számos igen jó képességű, önállóan is működő dobgép is napvilágot látott, amelyekkel az összes létező hagyományos és elektromos dob hangja előállítható.
A digitális technika e területén az egyik legnagyszerűbb alkotás a "SOUND SAMPLING SYSTEM", köznapi nyelven az emulátor. Ez a készülék lehetővé teszi, hogy digitálisan rögzíthessünk bármilyen, az életben előforduló hangot (pl. fareccsenés, motorzúgás, köhögés stb.). A rögzített hang bármilyen formában (lassítva, gyorsítva, amplitúdómodulálva) visszajátszható. Végeredményben az emulátor is egy bonyolult számítógép - de maradjunk csak a mindenki számára elérhető személyi számítógép-kategóriánál.
Vitathatatlan tény, hogy hangképzésre a COMMODORE-64 hanggenerátora, a 6510-es sorozatú SID chip-je (ezzel bővebben foglalkozik az LSI Atsz 1987 második negyedévében megjelent kiadványa, a "C-64 zenekedvelőknek" című könyv) jóval alkalmasabb, mint a Spectrum BEEP-je. A beépített ADSR generátor segítségével a legbonyolultabb hangzásokat is előállíthatjuk, a generátor gyakorlatilag elérhetővé teszi egy kisebb kategóriájú szintetizátor lehetőségeit.
A számítógépeket ma kétféleképpen használhatjuk fel zenei területen. Először is úgy, hogy komponálunk és zenélünk rajtuk. Ez több oldalról is megköti a kezünket, mert az egyes gépek hangképzési korlátai igen nagyok. Másrészt kiegészítő perifériát (perifériákat) építünk, és a számítógépet csak vezérlési célokra használjuk. Ez utóbbi a jelentősebb terület, mert a számítógép teljes memóriáját kihasználhatjuk vezérlési feladatokra, ami megközelíti egy jobb képességű szintetizátor memórianagyságát.
A számítógéphez kialakítható periférialánc igen sokféle lehet. Nagy zenekarok gyakran használják fel a számítógépet a szintetizátorok összehangolására, vezérlésére. Ilyen rendszer a ZX Spectrumra is elkészült ( MUZIX-81 ), amit az OMEGA-stáb is sikerrel alkalmaz. Egy ilyen rendszer kiépítése a nem profi felhasználótól igen időigényes és költséges munkát követel, ezért célszerű kisebb, néhány ezer forintból megépíthető interface elkészítése.
Az interface-t elsősorban olyan gépre érdemes elkészíteni, amely alapkiépítésben nem képes jó minőségű illetve több szólamú hangot megszólaltatni. Ezek közé tartozik a ZX Spectrum és a ZX-81 számítógép is, ezért most egy olyan interface tervezésére mutatunk példát, amely az említett számítógépek hangzásvilágát kibővítve biztosítja az összhangzat megvalósulását.

Nélkülözhetetlen zeneelméleti alapfogalmak

Minden hangot szabályos vagy szabálytalan rezgés (hullám) ír le. A rezgés periódikus állapotváltozás, pl. egy gitárhúr rezgésekor a húr egyes pontjainak az egyensúlyi helyzettől mért távolsága. A legegyszerűbb elméleti rezgés a harmónikus rezgés, melynek lefolyása szinusz-görhével ábrázolható (ld. ábra).
A vízszintes tengelyre kerül a periódusidő, a függőlegesre pedig az amplitúdó. Periódusidő helyett szokás annak a reciprokát is megadni. Ez a frekvencia, vagyis a másodpercenként végzett rezgések száma. A normál zenei "A" hang rezgéseinek száma másodpercenként 440, ezért f=440 Hz (Hertz).
Az oktáv egy adott intervallumban előforduló legmagasabb és legmélyebb hang különbsége. Általában több oktáv tartozik egymás mellé. A teljes oktávoktól megkülönböztetünk hiányos skálájú, három négy és öt hangból álló oktávokat, de használatuk nem számottevő. A hagyományos zeneelmélet a teljes skálájú ( egy oktávot hét hanggal kitöltő ) dallamvilágot helyezi előtérbe. Ez a C-D-E-F-G-A-H hangokra alapuló skála. Itt kell megjegyeznünk, hogy az egyes hangok frekvenciái oktávonként duplázódnak, vagyis ha a normál "A" hang frekvenciája egy skálában 440 Hz, egy oktávval feljebb 880 Hz, egy oktávval lejjebb 220 Hz lesz. A normál hangskálát 7+5-ös elnevezéssel is illetik, hiszen az egész hangokat fél hangokkal is kiegészítjük.
A megszólaltatott hang jellege elsősorban a hullám formájától függ. Mindenekelőtt megkülönböztetünk tiszta hangot és zajt. A tiszta hang szabályos vonalú amplitúdógörbét ír le, ide tartozik a szinuszos rezgés (amelynek görbéjét már előbb megismertük ), valamint a legfontosabb tiszta hanggörbék:

négyszög-hullám
háromszög-hullám
fűrészfog-hullám

Egy tiszta hang sem biztos, hogy ezen hullámformák szerint fog rezegni, hozzáadódnak különböző felharmonikusok. Ha egy időben több hangot is megszólaltatunk, akkor az eredmény az egyes hullámgörbék eredője lesz. Ilyen eredő hullámforma képe lehet a következő:

A zaj szabálytalan vonalú amplitúdó-görbével írható le:

Megkülönböztethetünk ún. sötét és világos zajt. A sötét zaj tompább, mélyebb, amplitúdója laposabb. Ilyen pl. ha az öklünkkel a padlót verjük. A világos zaj élesebb, magasabb amplitúdóval rendelkezik. Ilyen pl. a tenger zúgása. A tiszta hang és a zaj is keverhető egymással, ezáltal igen bonyolult hanghatásokat érhetünk el.
Egy hang megszólaltatásában igen nagy szerepet játszik a hang burkológörbéje. Bonyolultabb hanggenerátorok rendelkeznek az ún. ADSR generátorral. Ez a rövidítés a hang felfutás-lecsengés-kitartás-elengedés paramétereit takarja.

A hagyományos hangszerek hangjának utánzásához elengedhetetlen ennek a négy feltételnek a megfelelő szintű beállítása.
Az egyszerűbb hanggenerátorok csak felfutás-lecsengés láncból állnak, de még így is széleskörű variációs lehetőséggel bírnak. A következő ábrán látható egy lövés burkológörbéje:

A tenger zúgását periódikusan ismétlődő felfutás-lecsengés láncú burkológörbe határozza meg:

Építsünk hanggenerátort!

A hanggenerátorunk szíve az angol GENERAL INDUSTRY cég AY-3-8912 típusú integrált áramköre, mely hazai viszonylatban igen nehezen beszerezhető, ára az NSZK-ban jelenleg kb. 40,-DM. Megjegyeznénk, hogy a HT számítógépekbe beépített hanggenerátor IC az AY chippel kompatibilis, de beszerzése hasonlóan problémát okoz.
A hanggenerátor IC 3 független hangkimenettel rendelkezik, mely kitűnő lehetőségeket biztosít számunkra. A három kimenetet összekötve mono kimenőjelet kapunk eredményül, de egyszerű változtatással ezt sztereóvá alakíthatjuk. Az interface-be beépíthetünk egy megfelelő erősítőt is, hogy ezáltal a hangszórónkat közvetlenül az interface-re csatlakoztathassuk. A rendszer kisfeszültségű kimenettel is kiépíthető- a hang megszólaltatása ekkor közvetetten, egy erősítő segítségével történik.

Hanggenerátor mono kimenettel

1. ábra: hanggenerátor mono kimenettel - áramköri rajz

Az 1.sz. ábrán látható az interface áramköri vázlata.
Az áramkör központja az AY-3-8912 chip, amelynek 17 lábát kell közvetlenül bekötni. Az IC programozásához a számítógép cím-, adat- és vezérlővonalait használjuk fel. Az adatáramlás a D0-D7 vonalakon történik ( az IC 21-28. lábai ). A címvonalak közül az A5 és A6 címsínek, az adatáramlás vezérlésére pedig az IORQ, RD, és WR vezérlővonalak használatosak (az IC 18. és 20. lába). A 16. lábra csatlakozik a RESET kapcsoló, amely - az R2 ellenálláson és a C3 kondenzátoron keresztül - törli az IC öszszes regiszterét. A 17. és 19. lábak az 5V tápfeszültség átadására szolgálnak.
A hanggenerátor működéséhez elengedhetetlenül szükséges egy 1 MHz-es órajel, amelyet NAND kapu biztosít a 15. lábon egy Schmitt Trigger váltó segítségével. Az IC három összekötött kimenetén megjelenő jelet - az R4 és C4 által meghatározott aluláteresztő szűrőn keresztül - egy műveleti erősítő IC-vel erősítjük. Ekkor a kimenő jel közvetlenül rávihető egy 8-16 Ohm ellenállású hangszóróra.
Az interface a ZX-81 gépen is kifogástalanul működik, de ennél csak 23 osztású csatlakozó sin használható. A vezérlő sín lábkiosztását - párhuzamosan egymás mellett - a következő táblázatban tüntetjük fel:

Spectrum
Hanggenerátor
Zx-81
N
A
B
N
A
B
N
A
B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

A15
A13
D7
-
üres
D0
D1
D2
D6
D5
D3
D4
INT
NMI
HALT
MREQ
IORQ
RD
WR
-5V
WAIT
+12V
-12V
MI
RFSH
A8
A10
-

A14
A12
+5V
+9V
üres
0V
0V
CK
A0
A1
A2
A3
IORQGE
0V
VIDEO
Y
V
U
BUSRQ
RESET
A7
A6
A5
A4
ROMCS
BUSAK
A9
A11

(-)
(-)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(24)
(25)
(26)

-
-
D7
-
üres
D0
D1
D2
D6
D5
D3
D4
-
-
-
-
IOREQ
RD
WR
-
-
-
-
-
-
-
-
-
-
-
+5V
+9V
üres
0V
0V
-
-
-
-
-
-
-
-
-
-
-
-
-
-
A6
A5
-
-
-
-
-


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23



D7
RAMCS
üres
D0
D1
D2
D6
D5
D3
D4
INT
NMI
HALT
MREQ
IOREQ
RD
WR
BUSAK
WAIT
BUSRQ
RESET
MI
RFSH



+5V
+9V
üres
0V
0V
0
A0
A1
A2
A3
A15
A15
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
ROMCS

Alkatrész-lista:

Ellenállások: 1 db 470 R
2 db 33 K
2 db 1 K
1 db 3,3 R
1 db 680 R
1/4 W
1/4 W
1/4 W
1/4 W
1/4 W
R1
R2, R4
R3, R5
R6
R7
Potenciométer: 1 db 10 K lineáris P1
Kondenzátorok: 2 db 100 u
1 db 10 n
2 db 4,7 u
3 db 100 n
1 db 1 n
16V ELKO
kerámia
16V ELKO
kerámia
kerámia
C7, C8
C3
C1, C5
C4, C6, C9
C2
IC-k: 1 db 74LS02 (4xNOR)
1 db 74LS132 (4xNAND Schmitt Trigger)
1 db LM 380N (műveleti erősítő)
1 db AY-3-8912 (hanggenerátor)
IC1
IC2
IC4
IC3
Egyéb: 1 db 2x28 ( ZX-81-hez 2x23 ) 1/10 inch osztású
         csatlakozósáv
1 db 1x záróérintkezős nyomógomb
1 db 28 érintkezős DIL IC aljzat
3 db 14 érintkezős DIL IC aljzat
1 db 3,5 jack mono aljzat vagy normál
         hangszóró-csatlakozó aljzat
1 db 3 miniatűr LED
1 db egy oldalas panel
1 db arányos méretű műanyag doboz
4 db összeszorító csavar + anya


K1




LED 1

Az itt ismertetett áramkör nem tartalmazza a gép alaphelyzetét beállító RESET-kapcsolót. A kapcsoló beépítése a csatlakozósáv RESET illetve 0V pontjaira tetszőlegesen elvégezhető.

Hanggenerátor sztereo kimenettel

Kis módosítással kihasználhatjuk a hanggenerátor IC előnyeit: a három független hang csatorna nyújtotta lehetőségeket.
A sztereo interface áramköri vázlata a 2.sz. ábrán látható. Az IC kimeneteit egymástól függetlenül vezetjük át egy aluláteresztő szűrőn; ezután egy 6 potenciométerből álló keverő következik, amellyel a három csatornát tetszés szerint állíthatjuk be a bal vagy a jobb kimeneti csatornára. Ezzel elérhetjük, hogy egy 'x' hang a bal oldalon, egy 'y' hang a jobb oldalon és egy 'z' hang középen szólaljon meg. A hangok keverése menet közben is tetszés szerint módosítható.
A keverőből kimenő jelet átvezetjük egy előerősítő IC-n, amelynek az a szerepe, hogy a kimenő jel erőssége ne függjön az interface-hez csatolt erősítő impedanciájától. Az előerősítő IC feladata tehát az, hogy a kimeneten állandó jel legyen biztosítva.
Mivel úgy gondoljuk, hogy célszerűbb ezt az áramkört megépíteni, közöljük a fóliatervet is. A nyákterv a 3.sz., a beültetési terv a 4.sz. ábrán látható.

2. ábra: Hanggenerátor sztereo kimenettel áramköri rajz
3. ábra: Hanggenerátor sztereo kimenettel fóliaterv
4. ábra: Hanggenerátor sztereo kimenettel beültetési terv

Alkatrész-lista:

Ellenállások: 1 db 470 R
1 db 680 R
14 db 33 K
4 db 1 K
1/4 W
1/4 W
1/4 W
1/4 W
R1
R2
R3, R8-R20
R4-R7
Potenciométer: 6 db 100 K lineáris P1-P6
Kondenzátorok: 3 db 100 u
2 db 10 u
1 db 4,7 u
4 db 100 n
3 db 10 n
1 db 1 n
16V ELKO
16V ELKO
16V ELKO
kerámia
kerámia
kerámia
C10-C12
C13, C14
C1
C3-C5,C9
C6-C8
C2
IC-k: 1 db 74LS02 ( 4xNOR )
1 db 74LS132 ( 4xNAND Schmitt Trigger )
1 db LM 381 ( 2xelőerősítő )
1 db AY-3-8912 ( hanggenerátor )
IC1
IC2
IC4
IC3
Egyéb: 1 db 2x28 ( ZX-81-hez 2x23 ) 1/10 inch
         osztású csatlakozósáv
1 db 1x záróérintkezős nyomógomb
1 db 28 érintkezős DIL IC aljzat
1 db 14 érintkezős DIL IC aljzat
1 db 3,5 sztereó jack aljzat
6 db potenciométer forgatógomb
1 db miniatűr LED
1 db egy oldalas panel
1 db arányos méretű műanyag doboz
4 db összeszorító csavar + anya


K1




Led1

A RESET gomb a fent leírtak alapján tetszés szerint beépíthető.

Külső órajel generálása

Ha szakmai szemmel nézzük, észrevehetjük, hogy a hanggenerátor órajelét szolgáltató áramkör csak közelítőleg adja az 1 MHz-es jelet, ami miatt a hangok frekvenciaértékei eltolódhatnak. A számítógép CLOCK kimenetéről levehetünk egy stabil órajelet, de ez 3,5 MHz-es, egy segédáramkörrel le kell osztanunk 1 MHz-re. A segédáramkör blokkdiagramja az 5.sz. ábrán látható.
Az áramkör 5V hálózati tápfeszültséget igényel. Ezt a gép azonban már nem bírja el, tehát célszerű a módosított interface-t külön hálózati tápegységről üzemeltetni. Ennek egyéb előnyei is vannak: a gép áramtalanítása esetén a hanggenerátor regiszterei nem veszítik el értéküket.
A kiegészítő áramkör elkészítése nem feltétele a hibátlan működésnek, csak javaslat azok számára, akik precíz egységet akarnak építeni. Megjegyzés: A frekvenciaosztóról részletes irodalmat a Rádiótechnika 1979/12 kiadványának 573. oldalán találunk.

5. ábra: Órajel osztó blokkvázlata

Formai javaslat az interface kivitelezéséhez

6. ábra: Elölnézet
7. ábra: Hátulnézet

Az AY-3-8912 hanggenerátor IC

Az IC az angol GENERAL INDUSTRY cég terméke, a 8900-as család tagja. Profi felhasználó valóságos csodákat művelhet vele, mivel három független hanggenerátort, egy zajgenerátort, egy burkológörbe-generátort, egy vezérlőregisztert és a teljesség kedvéért még egy 8 bites PI0-t is tartalmaz.
Az IC blokkdiagramja a 8.sz. ábrán látható.
A zajgenerátor 32 fokozatban programozható, a "világos" zajtól a "sötét"-ig. A három hanggenerátorral egymástól függetlenül 4096 hang állítható elő (ez kb. 9 oktáv hangszélességnek felel meg). Az egyes hangokhoz csatornánként hozzákeverhetjük a zajgenerátor által keltett zörejeket, de külön-külön is hallgathatóak.
Az IC legfontosabb regisztere a vezérlő regiszter. Segítségével meghatározható a PIO adás/vétel állapota, és hogy milyen hang illetve zörej jelenjen meg a kimeneten. A hangerő csatornánként 15 fokozatban állítható. A burkológörbe-generátorral 8 féle burkológörbe-formát választhatunk ki, külön-külön szabályozva a frekvenciát is.

8. ábra: az AY 3-8912 hanggenerátor IC blokkdiagramja

A hanggenerátor programozása

A hanggenerátor IC 16 regisztert tartalmaz, ebből 14 ( 0-13 ) segíti elő a hangképzést. A 14-es és 15-ös regisztereknek a párhuzamos adat be/kivitelnél (PIO) van szerepük. Először tekintsük át az egyes regiszterek funkcióit (a hanggenerátor csatornáit jelöljük A, B és C betűkkel):

R0 - Az A csatorna hangmagasságának finom beállítása
R1 - Az A csatorna hangmagasságának durva beállítása
R2 - A B csatorna hangmagasságának finom beállítása
R3 - A B csatorna hangmagasságának durva beállítása
R4 - A C csatorna hangmagasságának finom beállítása
R5 - A C csatorna hangmagasságának durva beállítása
R6 - A zajgenerátor-fokozat beállítása
R7 - A kimeneti csatornák megnyitása (+PIO)
R8 - Az A csatorna hangerejének beállítása
R9 - A B csatorna hangerejének beállítása
R10 - A C csatorna hangerejének beállítása
R11 - A burkológörbe frekvenciájának finom beállítása
R12 - A burkológörbe frekvenciájának durva beállítása
R13 - A burkológörbe hullámformájának kiválasztása
R14 - PIO adatregiszter
R15 - PIO adatregiszter

Akár ZX-81-et, akár ZX Spectrumot használunk, egy regiszterbe két utasítással tudunk adatot bevinni. Az adatbevitel a következő séma szerint történik (tetszőlegesen BASIC vagy gépi kód használatával):

OUT 159,a regiszter száma: OUT 223,tartalom

Most tekintsük át részletesebben az egyes regiszterek programozását:

A hangmagasság beállítása

Minden csatorna hangmagassága 2 regiszterrel állítható be. Az alsó regisztereknek (R0, R2, R4) mind a 8 bitjét, a felső regisztereknek (R1, R3, R5) csak az alsó 4 bitjét használjuk. Ezzel a kapacitással összesen 4096 különböző hangot állíthatunk elő. A felső regiszterek felső 4 bitje a programozás szempontjából jelentéktelen, beállításuknak nincs kézzelfogható eredménye.
Az 1 MHz-es órajel esetében a regiszterekbe írandó érték a frekvencia alapján a következő képlettel számolható ki:

N = 85800 / frekvencia

ahol N a regiszterbe írandó kétbyte-os szám, amelyet a kiszámítás után egész számjegyre kerekítettünk. Ha N értéke 256-nál kisebb, akkor csak az alsó regiszterbe írunk, a felsőt töröljük; 256 illetve nagyobb szám esetén a szám alsó/felső byte-os formára bontandó fel, így tudjuk tárolni.
A függelékben közöljük a hanggenerátor regiszterértékeit a frekvencia függvényében, 8 és fél oktáv hangterjedelemben.
Ha pl. az A csatornán a 49 Hz-es G hangot akarjuk megszólaltatni, akkor R0-ban 214-et, R1-ben 6-ot kell beállítani:

R1
R0
0 0 0 0 0 1 1 0
1 1 0 1 0 1 1 0

A zajgenerátor-fokozat beállítása

A zajgenerátor 0 és 31 közötti értékekkel programozható, a '0' az ún. "sötét", a '31' a "világos" hanghatást eredményezi. A kívánt értékeket az R6 regiszterbe kell beírnunk. A következő példában a "világos" zaj beállítását mutatjuk be:

R6
0 0 0 1 1 1 1 1

Az R6 regiszter felső három bitjének gyakorlatilag semmi jelentősége sincsen.

Keverő-vezérlés illetve a be/kimeneti csatorna megnyitása:

R7
B7 B6 B5 B4 B3 B2 B1 B0
B0 0 - A tiszta hang engedélyezése az A csatornán
1 - A tiszta hang kikapcsolása az A csatornán
B1 0 - A tiszta hang engedélyezése a B csatornán
1 - A tiszta hang kikapcsolása a B csatornán
B2 0 - A tiszta hang engedélyezése a C csatornán
1 - A tiszta hang kikapcsolása a C csatornán
B3 0 - Zaj engedélyezése az A csatornán
1 - Zaj kikapcsolása az A csatornán
B4 0 - Zaj engedélyezése a B csatornán
1 - Zaj kikapcsolása a B csatornán
B5 0 - Zaj engedélyezése a C csatornán
1 - Zaj kikapcsolása a C csatornán
B6 0- Digitális bemeneti vezérlés az R14 regiszterre
1 - Digitális kimeneti vezérlés az R14 regiszterről
B7 0- Digitális bemeneti vezérlés az R15 regiszterre
1 - Digitális kimeneti vezérlés az R15 regiszterről

B0-1-2 és B3-4-5 egymástól függetlenül is vezérelhető, vagyis ugyanazon csatornán egy időben hang és zaj is megjeleníthető.

Hangerő beállítása:

R8 az A csatornán, R9 a B csatornán, R10 pedig a C csatornán teszi lehetővé a hangerő beállítását. Például 12-es fokozatú hangerőt az A csatornán a következőképpen állíthatunk be:

R8
0 0 0 0 1 1 0 0

A hangerő beállítása szempontjából az alsó négy bitnek van jelentősége, tehát 16 fokozatban állítható ( 0-tól 15-ig ).
Az ábrán vastagon kiemelt negyedik bitnek kulcsfontosságú szerepe van: ha itt nullát helyezünk el, akkor az aktuális csatornára nincs hatással a burkológörbe-generátor. Ha ezt a bitet egyre váltjuk, akkor az alsó négy bit értéke nincs hatással a hangerőre, amely a burkológörbének megfelelően alakul.

A burkológörbe frekvenciájának beállítása:

A kiválasztott burkológörbe frekvenciája az R11 és R12 regiszterekben tárolt értékekkel szabályozható. A regiszterek értéke 0-255 között lehet. Alacsonyabb értékek esetén a felfutási illetve lecsengési idő gyorsabb, magasabb értékeknél pedig lassabb lesz.

A burkológörbe hullámformájának kiválasztása:

Egyidőben csatornánként különböző hullámformákat nem tudunk beállítani. A burkológörbe-generátor a beállított hullámformát csak arra a csatornára tudja beállítani, amelyiknek hangerő-regiszterében (R8, R9, R10) a negyedik bit értéke nem zérus. Ellenkező esetben a hang állandó amplitúdójú lesz.
A hullámforma az R13 regiszter alsó négy bitjének segítségével szelektálható. A beállítható hullámformák a következő ábrán láthatóak:

R13
 
B3
B2
B1
B0
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1

Egy lecsengés-felfutás elméleti diagramja a következőképpen néz ki:

A diagramra írt számok a hangerőfokozat értékei. A gyakorlati diagram azonban másképp néz ki. Ezt a következő ábra szemlélteti:

Mintaprogramok a hanggenerátor használatához

Ahhoz, hogy megszólaltassuk a hanggenerátort, először is ki kell nyitni a kimeneti csatornákat. Ha tiszta hangot akarunk, ki kell kapcsolni a zajt (R7 = 56). Válasszunk mind a három csatornára közepes hangerő-értéket (R8-R10 = 8), majd adjunk tetszőleges értéket a hangmagasságoknak (R0, R2, R4). A mintaprogram a következőképpen néz ki:

10 OUT 159,7: OUT 223,56
20 OUT 159,8: OUT 223,8
30 OUT 159,9: OUT 223,8
40 OUT 159,10: OUT 223,8
50 OUT 159,0: OUT 223,200
60 OUT 159,2: OUT 223,133
70 OUT 159,4: OUT 223,103

Futtatás után azt tapasztaljuk, hogy a három hang megszólal, de elég hamisan.
Szólaltassunk meg egy szép dó-mi-szó (C-E-G) hangzást a 4. oktávban. Előbbi programunkat módosítsuk az 50. sortól kezdve:

50 OUT 159,0: OUT 223,144
55 OUT 159,1: OUT 223,2
60 OUT 159,2: OUT 223,8
65 OUT 159,3: OUT 223,2
70 OUT 159,4: OUT 223,182
75 OUT 159,4: OUT 223,1

Futtassuk ismét a programot és azt, tapasztaljuk, hogy a hangok konszonánsak, egymáshoz illenek.
Használjuk a hanggenerátor RESET funkcióját, majd NEW paranccsal töröljük a programot is. A következő mintaprogram a csilingelő harangok vagy az üvegpoharak hangjára emlékeztető hangot szólaltat meg:

10 OUT 159,0: OUT 223,200
20 OUT 159,1: OUT 223,1
30 OUT 159,2: OUT 223,130
40 OUT 159,4: OUT 223,60
50 OUT 159,7: OUT 223,56
60 OUT 159,8: OUT 223,16
70 OUT 159,9: OUT 223,16
80 OUT 159,10: OUT 223,16
90 OUT 159,12: OUT 223,50
100 OUT 159,13: OUT 223,8

Most módosítsuk a következő sorokat, hogy egy pisztolylövéshez hasonlító hang szólaljon meg:

50 OUT 159,7: OUT 223,7
90 OUT 159,12: OUT 223,7
100 OUT 159,13: OUT 223,9
110 PAUSE 0: GO TO 10

A 110. sor jelentősége abban áll, hogy ha folyamatosan lenyomva tartunk egy billentyűt, egy gépfegyver zaját szimulálhatjuk.
Újabb módosításokkal a programunk egy közeledő gőzmozdony hangját produkálja:

1 LET A=31
10 OUT 159,0: OUT 223,200
20 OUT 159,1: OUT 223,7
30 OUT 159,2: OUT 223,130
35 OUT 159,3: OUT 223,7
40 OUT 159,4: OUT 223,60
50 OUT 159,7: OUT 223,31
60 OUT 159,8: OUT 223,16
70 OUT 159,9: OUT 223,16
80 OUT 159,10: OUT 223,16
85 OUT 159,6: OUT 223,INT A
90 OUT 159,12: OUT 223,12
100 OUT 159,13: OUT 223,9
105 LET A=A-0.1: IF A<1 THEN STOP
110 FOR I=1 TO 10: NEXT I: GO TO 10

A potenciométerek segítségével a gőzmozdony hangja sztereoba is keverhető.
A sztereo hatás érzékeltetéséhez is nézzünk néhány példát! Először is állítsuk be a potmétereket:

A bal és a jobb kimeneten szólaltassunk meg egymástál eltérő magasságú hangokat, középen pedig egy dobgép alapot. Ehhez a következő program futtatása szükséges:

10 OUT 159,0: OUT 223,36: OUT 159,1: OUT 223,1
20 OUT 159,2: OUT 223,32: OUT 159,3: OUT 223,9
30 OUT 159,4: OUT 223,144: OUT 159,5: OUT 223,4
40 OUT 159,7: OUT 223,56
50 OUT 159,8: OUT 223,12
60 OUT 159,9: OUT 223,11
70 OUT 159,10: OUT 223,16
80 OUT 159,12: OUT 223,5
90 OUT 159,13: OUT 223,8

Az alábbi program a véletlenszám-generátor felhasználásával szemlélteti a sztereo hatást:

10 OUT 159,7: OUT 223,56
20 OUT 159,8: OUT 223,INT (RND*15)
30 OUT 159,9: OUT 223,INT (RND*15)
40 OUT 159,10: OUT 223,INT (RND*15)
50 LET A=INT (RND*255): LET B=INT (RND*15)
60 LET C=INT (RND*255): LET D=INT (RND*15)
70 LET E=INT (RND*255): LET F=INT (RND*15)
80 OUT 159,0: OUT 223,A: OUT 159,1: OUT 223,B
90 OUT 159,2: OUT 223,C: OUT 159,3: OUT 223,D
100 OUT 159,4: OUT 223,E: OUT 159,5: OUT 223,F
110 GO TO 20

A három szólamú zene elkészítésének folyamatát szemléljük végig egy rövid mintapéldán keresztül. Előnyös kottáról dolgozni:

Nem célunk az általános kottaelméletről bővebben beszélni, de a legfontosabb dolgokra felhívjuk a figyelmet. Az itt látható kottasor elején egy 'violin-kulcs' látható, vagyis a 'C' hang a kottán megjelölt helyről indul. Figyelni kell, hogy látunk-e előjelzést a kulcs után. Kettőskereszt esetén egy fél hanggal feljebb, 'b' előjelzés esetén pedig egy fél hanggal lejjebb kerül az a hang amelyikre az előjelzés utal. A minta kottában három kettőskeresztet látunk, ezek a 'C', 'F' és 'G' hangokat viszik fel egy fél hanggal feljebb mindenhol, kivétel, ha a három hang bármelyike előtt feloldójelet nem találunk. Ez hasonló, mint a kettőskereszt, de jobb felső és bal alsó szára hiányzik. Ezután meg kell vizsgálni azt, hogy milyen hangjegyek szerepelnek a kottában. Itt pl. negyed, nyolcad és tizenhatod hangjegyeket látunk, vagyis 1:2:4 arányú időtagokat kell majd a programunkban elhelyezni. Ez azért lényeges, mert mi nem azt adjuk meg, hogy egy hang milyen hosszú ideig szóljon, hanem bekapcsoljuk a hangot, és egy fix időtag eltelte után hangmagasságot váltunk, vagy kikapcsoljuk azt.
A következő lépés a vonaldiagram elkészítése.
Ebben egymás alatt ábrázoljuk a három csatornát, valamint arányos léptékkel az időtagokat. A vonaldiagram alapján az adatsor könnyen elkészíthető, hiszen egy tizenhatod időtagot 20-szal, a nyolcadot 18-cal, míg a negyedet 17-tel jelöljük.

Ha felépültek az egyes vonalszakaszok, a kotta alapján mellé írjuk az összetartozó hangmagasságokat is. Amennyiben a három csatornát különböző oktávon akarjuk megszólaltatni, úgy célszerű a hangok mellé az oktáv számát is beírni. A függelékben megadott táblázatból kikereshetjük az összetartozó értékpárokat, ezt is érdemes felírni a vonaldiagramra. Ha a vonaldiagram elkészült, kialakíthatjuk az adatsort. Kis mintapéldánk adatsora így a következőképpen alakul:

DATA
0,232,1,0,2,36,3,1,4,72,5,2,20,2,134,3,1,20,2,36,3,1,20,2,232,3,0, 20,0,232,1,0,2,36,3,1,20,2,134,3,1,20,0,195,1,0,2,36,3,1,4,72,5,2, 20,2,134,3,1,20,2,36,3,1,20,0,206,1,0,2,134,3,1,20,0,232,1,0,2,36,3,1,
20,2,134,3,1

Természetesen a DATA sort mindenképpen a csatornák megnyitásával, hangerő beállításával stb. kell kezdeni (ld. program 100. sora), ill. a csatornák kikapcsolásával kell befejezni (16-os kód).

Összetettebb zene esetén megfigyelhetjük, hogy egy ütemen belül minél több kapcsolást végzünk el, annál jobban lelassul a program futása. Ez sajnos a BASIC nyelv gyorsaságának köszönhető, természetesen a megoldás a gépi kódú változat megírásában rejlik. Ne ijedjünk meg, nem lesz ez olyan nehéz, meglátjuk megéri. Csak a vezérlő szakaszt kell átírnunk gépi kódra, a DATA sorok könnyen átolvashatók a memória bármely területére. A gépi kódú vezérlő programot a 40000. címtől helyezzük el, hossza 100 byte. Az assembly lista - mely egyénenként változó módon bevihető a memóriába - a következő:

40000
40003
40004
40005
40007
40009
40011
40013
40014
40015
40017
40019
40021
40023
40024
40025
40027
40029
40031
40033
40034
40035
40037
40039
40041
40043
40045
40047
40048
40049
40051
40052
40053
40055
40057
40059
40061
40063
40064
40066
40068
40070
40072
40074
40076
40078
40080
40082
40083
40084
40085
40087
40088
40089
40090
40091
40093
40094
40096
40097
33,164,156
126
245
238,17
32,4
6,240
24,70
241
245
238,18
32,4
6,120
24,60
241
245
238,20
32,4
6,60
24,50
241
245
238,16
32,9
62,7
211,159
62,63
211,223
201
241
211,159
35
126
211,223
62,13
211,159
62,9
211,223
35
62,127
219,254
230,31
254,30
32,185
62,7
211,159
62,63
211,223
201
241
197
6,0
245
241
245
241
16,250
193
16,244
35
195,67,156
LD HL,40100
LD A,(HL)
PUSH AF
XOR 17
JR NZ,40013
LO B,240
JR 40083
POP AF
PUSH AF
XOR 18
JR NZ,40023
LD B,120
JR 40083
POP AF
PUSH AF
XOR 20
JR NZ,40033
LD B,60
JR 40083
POP AF
PUSH AF
XOR 16
JR NZ,40048
LD A,7
OUT (159),A
LD A,63
OUT (223),A
RET
POP AF
OUT (159),A
INC HL
LD A,(HL)
OUT (223),A
LD A,13
OUT (159),A
LD A,9
OUT (223),A
INC HL
LD A,127
IN A,(254)
AND 31
CP 30
JR NZ,40003
LD A,7
OUT (159),A
LD A,63
OUT (223),A
RET
POP AF
PUSH BC
LD B,0
PUSH AF
POP AF
PUSH AF
POP AF
DJNZ 40087
POP BC
DJNZ 40084
INC HL
JP 40003

;HL-ben tároljuk az adatok kezdőcímét
;A soron következő adat vizsgálata
;Az adatot eltesszük a verembe
;17-es időzítési konstans?
;Ha nem, ugrás tovább
;Külső időzítő ciklus beállítása
;Ugrás az időzítő rutinra
;Visszaolvassuk az adatot,
;és ismét eltesszük a verembe.
;18-as időzítési konstans?
;Ha nem, ugrás tovább
;Külső időzítő ciklus beállítása
;Ugrás az időzítő rutinra
;Visszaolvassuk az adatot,
;és ismét eltesszük a verembe.
;20-as idözítési konstans?
;Ha nem, ugrás tovább
;Külső időzítő ciklus beállítása

;Visszaolvassuk az adatot,
;és ismét eltesszük a verembe.
;Adatmező vége ?
;Ha nem, ugrás tovább
;Kimeneti csatornák lezárása



;Zene vége
;Az adat a kijelölt regiszter számát
;tartalmazza, a regisztert meghívjuk.
;Az adatmutatót növeljük
;Beolvassuk a következő adatot,
;és beírjuk a megfelelő regiszterbe.
;Burkológörbe-alak kiválasztása



;Az adatmutatót tovább léptetjük
;SPACE megnyomására a kimeneti
;csatornákat lezárjuk, és kilépünk
;a rutinból.

;Egyébként ugrás vissza az új adat
;vizsgálatához.




;Páros PUSH/POP biztosítása
;A külső ciklus értékét kimentjük a
;verembe, és betöltjük a belső ciklus
;értékét. Ezután 4 önmagában jelen-
;téktelen veremművelet következik,
;ezek ciklikus végrehajtása eredmé-
;nyezi az időtagot.
;Belső ciklus
;A külső ciklus értékének visszaírása
;Külső ciklus
;Az adatmutató tovább lép
;Ugrás vissza a következő adat vizs-
;gálatához.

Ez a gépi kódú rutin bármilyen, az előzőekben megismert adatsor lejátszására alkalmas. Az adatsor kezdőcíme a 40100. cím. Próbáljuk ki, hogyan szólnak gépi kódban a dallamok. A gépi kódú rutint a RANDOMIZE USR 40000 (ENTER) utasítással indíthatjuk. A rutinból a SPACE billentyű megnyomásával bármikor kiléphetünk.

Egyetlen dolog maradt a végére, hogyan készítsünk billentyűs hangszert a SPECTRUM-ból ? Nos erre igen nehéz általános útmutatót adni. A hangszert mindenképpen "polifónikusra" érdemes elkészíteni, vagyis több billentyű együttes megnyomása kapcsolja be a különböző csatornákat: Ne ijedjünk meg, ha hozzálátunk, a billentyűvizsgálati rész kicsit hosszúnak fog bizonyulni, de a végén a nagyszerű eredmény nem marad el, ezért mindenképpen érdemes elkészíteni. A billentyűket kirajzolhatjuk, a megnyomott billentyűt vibráltathatjuk. Célszerű minden regiszter aktuális állapotát kijelezni, így menet közben látjuk a változtatást és halljuk az eredményt. A végső stádium pedig a memória beépítés, vagyis a lejátszott dallamokat rögzíthetjük és később visszajátszhatjuk azokat. Sok sikert a folytatáshoz!

PIO (parallel input-output) párhuzamos digitális be / kimeneti adatvezérlés

Ez a funkció a hanggenerátor kiegészítő szolgáltatása, amelynek önmagában semmi köze a hangok megszálaltatásához.
Mint a bevezetőben már említettük, lehetőség van a hangszerek software úton történő összehangolására. Ahhoz, hogy egy független külső eszköz be vagy kikapcsolt állapotát vezérelni tudjuk, célszerű egy relé használata. Ha a relé vezérlő pontjain aktív jel mutatkozik, a csatlakozó pontokon záródik az áramkör. Ezzel egy külső egység ki-bekapcsolt állapotát vezérelheti (pl. fényorgona).
Az IC alkalmas arra, hogy két adott regiszterének tartalmát bitenként külön vonalon továbbítsa, illetve adatot fogadjon. A 9. ábra szemlélteti, hogy mivel érdemes a hanggenerátor áramkört a PI0-csatlakoztatáshoz kiegészíteni:

Az IC 7-14. lábain jelennek meg az aktuális bitek értékei. A kimeneti pontokat össze kell kötnünk egy-egy 4,7 kOhm értékű ellenállással. A PI0-interface áramköri vázlatát a 10. ábrán láthatjuk.

10. ábra: PIO-Interface áramköri vázlat

Fontos, hogy a hanggenerátor és az erősítő IC mellett az 5V-os kimenetet tovább terhelni nem szabad. A PI0-interface-t a számítógép 9V-os kimenetéről látjuk el 5V-os tápfeszültséggel, amit a 7805-ös IC állít elő. A PIO kimenetei csak 500 mA-ig terhelhetőek.

Alkatrész-lista:

Ellenállások: 8 db 220 R
8 db 4,7 K
1/4 W
1/4 W
R1-R8
R9-R16
Kondenzátorok: 2 db 10 u 16 V C1, C2
IC-k: 2 db 74LSO5
2 db 74LSO7
  IC1, IC2
IC 3
LED-diódák: 6 db 3 5 V LED 1-8
Diódák: 8 db 1N4148   D1-D8
Relék: 8 db DIL 5V-500mA rel 1 - rel 8
Laposkábel: 10-15 cm 16 pólusú  

A működés menete a következő:
Tudjuk, hogy az R7 regiszter 6. és 7, bitje kihatással van az R14 és R15 regiszterre is. Próbáljunk meg adatot továbbítani az R14-es regiszteren keresztül a PI0-ba: aktivizáljuk az R7 regiszter 6. bitjét.

OUT 159,7: OUT 223,64

utasításokkal. Ezután az R14-es regiszterben megadott érték szerint adatot küldhetünk a PIO-ba.
A nyolc relé egyidőben 16 csatornáról vezérelhető a következő módon: az R14 regiszter határozza meg a nyolc "A" jelű csatornát A1-tő1 A8-ig, az R15 regiszter pedig a "B" jelű csatornákat B1-tő1 B8-ig. Ha a "B" csatornákat akarjuk használni, az R7 regisztert 128-as értékkel kell feltöltenünk. Akár az "A", akár a "B" kimeneti csatornát használjuk, az R14 és R15 regiszterben az adott csatorna (bit) binárisan kódolt értékét kell beírnunk. Ha az A1-es csatornához tartozó relén akarunk kontaktust létesíteni, az R14-be 1-et kell beírnunk, ha az A8-as csatornán, akkor 128-at.
Az egyes csatornákhoz tartozó értékek:

Csatorna
Érték
1
2
3
4
5
6
7
8
1
2
4
8
16
32
64
128

Egy zárt relé-kontaktus nyitása az adott csatornának megfelelő bit zérusra állításával, vagy pedig egy másik kimenet bekapcsolásával történhet. Amennyiben egyszerre több kimenetet is be akarunk kapcsolni, akkor a bináris számokat össze kell adnunk. Tehát az 1-es és a 7-es csatornák használatához az adott regiszterbe a 65-ös értéket kell beírnunk.
Az áramkörnek megfelelően érdemes minden csatornára egy LED diódát beépíteni, hogy a bekapcsolt kimenet látható legyen.
Kevésbé jelentős a számunkra az adatbeolvasás külső eszközről valamely regiszterbe. Ehhez az itt közölt áramköri tervet módosítani kell. Ebben az esetben az R7 regiszter 6. illetve 7. bitje határozza meg, hogy az R14 és R15 regiszterekbe adat fog érkezni a PIO felől (a bitek értéke 0). Aktív jel érkezése esetén az adott bit 1 értékű lesz.
A PIO hasznossága nem csak a zene területén érvényesülhet. Segítségével software úton több egymástól független áramkört időzítve üzemeltethetünk.

Utószó

A hanggenerátor-interface kombinálható külső billentyűzetillesztő-interface-szel. Így egyszerű billentyűs hangszerként is használható.
Példáinkban az IC-t csak két porton keresztül programoztuk. Az áramkör kis átalakításával újabb portokat nyithatunk meg, újabb IC-ket építhetünk be, így nemcsak 3, hanem 6-9, vagy akár 12 szólamú zenét is előállíthatunk. A PIO által nyújtott szolgáltatásokkal software-ből vezérelhetünk szintetizátorokat, dobgépeket, magnetofont és még sok egyéb háztartási zajkeltő "kütyüt".
Reméljük, hogy kedvet adtunk minden ZX-81 és ZX Spectrum tulajdonosának ahhoz, hogy számítógépét kibővítve közelebb kerüljön a zeneprogramozáshoz. Az itt közölt információk nem a teljesség igényével készültek, hiszen a témáról könyveket lehetne írni. Úgy érezzük azonban, hogy a téma iránt érdeklődök számára elegendő lendületet adtunk a továbblépéshez.

Figyelem! Az ismertetett hanggenerátor, és a 128K gép hanggenerátora kompatibilis egymással, sőt a Dk'tronics gyártmányú hanggenerátorral is. Hogy tudnánk egyszerűen megoldani, hogy a 48K géppel rendelkezők is élvezhessék a 3 csatornás dallamok örömeit? Nos a hardware átalakítás, vagyis egy port-kapcsoló kapuáramkör-rendszer beépítése a hanggenerátorba bonyolultabb megoldás lenne, mint magának a programnak az átalakítása. Ehhez csak annyi dolgunk van, hogy megkeressük a programban a zene generálásáért felelős rutint, és abban a módosításokat megfelelően elvégezzük. Mint tudjuk, a 128K 3 csatornás zenei portjai:

a/b = 65533 / 49149.

Ez az érték a mi általunk közölt interface esetén:

a/b = 159 / 223,

míg a Dk'tronics típusú interface esetén:

a/b = 63 / 95.

Most megoldást közlünk néhány program esetére, célszerű a módosítást MULTIFACE-szel elvégezni, majd a módosított programot kimentve, a. hanggenerátor interface-t a gépre dugva, s a programot visszatöltve élvezhetjük is munkánk eredményét:

ATF POKE 32464,a: POKE 32465,0: POKE 32468,14: POKE 32469,b
Bobsleigh POKE 34489,a: POKE 34490,0: POKE 34493,14: POKE 34494,b
Cybernoid POKE 25894,14: POKE 61361,a: POKE 61366,b
Cybernoid 2 POKE 62579,a: POKE 62584,b
Exolon POKE 48010,a: POKE 48011,0: POKE 48014,14: POKE 48015,b
Gonzalez POKE 35994,a: POKE 36001,b
Implossion POKE 36273,14: POKE 28387,a: POKE 36279,a: POKE 28392,b: POKE 36274,b
International Karate + POKE 28254,14: POKE 28250,a: POKE 28255,b
Mutant Zone 1 POKE 44895,a: POKE 44902,b
Mutant Zone 2 POKE 44435,a: POKE 44442,b
Nether Earth POKE 46323,a: POKE 46328,b
Stormlord POKE 62141,a: POKE 62146,b
War Cars POKE 34001,a: POKE POKE 34002,0: POKE 34011,b: POKE 34012,0, POKE 57109,24: POKE 32168,0

A módosításokban a/b értéke a fent leírtaknak megfelelő. Reméljük, hogy a programozásban jártasabb Olvasóink nekilátnak átalakítani néhány - erre alkalmas - programot.

Függelék - hanggenerátor frekvencia-táblázat

Oktáv
Hang
frekvencia
(Hz)
Alsó regiszter
(R0, R2, R4)
Felső regiszter
(R1,R3,R5)
Oktáv
Hang
frekvencia
(Hz)
Alsó regiszter
(R0, R2, R4)
Felső regiszter
(R1,R3,R5)
1
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
16.35
17.32
18.35
19.44
20.60
21.83
23.12
24.50
25.96
27.50
29.13
30.83
-
-
-
-
-
89
124
172
232
46
127
218
-
-
-
-
-
15
14
13
12
12
11
10
6
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H

523.26
554.36
587.32
622.26
659.26
698.46
739.98
784.00
830.60
880.00
932.32
987.76

164
155
146
138
130
123
116
109
103
97
92
87
0
0
0
0
0
0
0
0
0
0
0
0
2
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
32.70
34.65
36.71
38.89
41.20
43.65
46.25
49.00
51.91
55.00
58.27
61.72
62
171
32
157
33
172
62
214
116
23
192
109
10
9
9
8
8
7
7
6
6
6
5
5
7
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
1046.52
1108.72
1174.64
1244.52
1318.52
1396.92
1479.96
1568.00
1661.20
1760.00
1864.64
1975.52
82
77
73
69
65
61
58
55
52
49
46
43
0
0
0
0
0
0
0
0
0
0
0
0
3
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
65.41
69.29
73.42
77.78
82.41
87.31
92.50
98.00
103.83
110.00
116.54
123.47
31
213
144
78
17
214
159
107
58
12
224
183

5
4
4
4
4
3
3
3
3
3
2
2

8
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H

2093.04
2217.44
2349.28
2489.04
2637.04
2793.84
2959.92
3136.00
3322.40
3520.00
3729.28
3951.04

41
39
37
34
33
31
29
27
26
24
23
22
0
0
0
0
0
0
0
0
0
0
0
0
4
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
130.82
138.59
146.83
155.56
164.82
174.62
184.99
196.00
207.65
220.00
233.08
246.94
144
107
72
39
8
235
208
182
157
134
112
91
2
2
2
2
2
1
1
1
1
1
1
1
9
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
4186.08
4434.88
4698.56
4978.08
5274.08
5587.68
5919.84
6272.00
6644.80
7040.00
7458.56
7902.08
20
19
18
17
16
15
14
14
13
12
11
11
0
0
0
0
0
0
0
0
0
0
0
0
5
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
261.63
277.18
293.66
311.13
329.63
349.23
369.99
392.00
415.30
440.00
466.16
493.88
72
53
36
20
4
246
232
219
206
195
184
174
1
1
1
1
1
0
0
0
0
0
0
0

Vissza a hardware oldalhoz

Vissza a könyvekhez