Videoton TVC 64k SAA1099 hanggenerátor IC-vel

A kezdet:

Kíváncsi voltam, hogy az első, dokumentálásra szánt projektemben képes leszek-e kibővíteni valamilyen hangkütyüvel a TVC-m eredetileg
kissé szegényes hangzásvilágát. A cél az volt, hogy a lehető legegyszerűbben, nagyrészt a kezem ügyében lévő alkatrészekből  építsek valamit.
Persze nem állt szándékomban a teljes 74-es sorozatot egy A3-as méretű nyákba több kg ón felhasználásával összekókányolni.
Bíztam benne, hogy lesz valami tetszetősebb megoldás.

Bár a CBM gépek MOS 6581 és 8581-es chipjei elég népszerűek, ennek ellenére horror áron és csak kis darabszámban elérhetőek.
Az sem túl jó, ha a TVC-nknek Commodore hangja lesz, mert valahogy az összkép nem lenne szimpatikus.

Ha körülnézünk mi jöhet számításba a ’80-as ’90-es évek 8-bites zajkeltőiből, a következők állnak rendelkezésre:

- AY-3-8910 és kistesói(General Instruments, monó, ára kb. 1000Ft/db)

- YM sorozat valamelyike(Yamaha, monó,  ára változattól, a + külső DAC-tól függően 1000Ft-3000Ft/db)

- SAA1099P(Philips, sztereó, kb. 500Ft/db(ha nem a “hákú” árát nézed))

Hát bizony ezen IC-k közül egyik sem volt a fiókomban, de minél jobban vizsgálgattam az SAA dokumentációját, egyre szimpatikusabb lett, ezért berendeltem belőle 2 db-ot.

Az SAA1099 előnye a kis méret és lábszám, a sztereó hang. 32 regisztere van aminek majd’ a felét nem is használjuk. Könnyű, érthető a programozása, olcsó, beszerezhető.
Hátránya viszont, hogy nincs reset bemenete, tehát ha zenélés közben nyomunk egy resetet a TVC-n, vagy belefagy a gép a programba, akkor bizony a táp megszüntetéséig
hallgathatjuk az utolsóként megszólaló hangot. Persze erre létezik hardveres megoldás, később ismertetem.

Míg az IC-k érkezésére vártam, végeztem egy kis nyomozást, honnan tudnám beszerezni a megfelelő szoftveres hátteret a hangkeltéshez. Megnéztem azt is, hova tudnám fizikailag,
és szoftveresen is beépíteni az amúgy 4(az én esetemben 5) integrált áramkörből álló kapcsolást. A cél az volt, hogy ne ütközzön semilyen eredeti beépített vagy külső hardverrel,
a BASIC is kezelje. Utóbb kiderült, hogy a TVC-hez készített Spectrum Emulátor Kártya nagyjából a kijelölt portokat használja, de a cikk szerint ebből mindössze egyetlen példány létezik,
utánépítésről nem hallottam (bár lehet az lesz a következő hardveres projektem:-)). Fontos tudni, hogy az én gépembe beépített 1.2-es BASIC nem kezeli a  16-bites portcímeket,
ezért raktam át az eredeti SAM Coupéban és tuning ZX-ekben használt kapcsolás címét a 8-bites tartományba.

A hardver:

A kapcsolás nagyon egyszerű, az áramkör a TVC FFh(regcím) és FEh(adat) portjaira van biggyesztve, a címdekódolást egy 74LS30 8 bemenetű NAND kapu végzi, amit összekapuzunk 
a -WR és a -IORQ jelekkel. Ezt egy négy OR kapuból álló 74LS32 végzi. Így áll elő az SAA -CS és -WR jele. Az én nyákomon 1-el több IC van, nekem csak 74LS20-am volt kéznél,
az 2 db 4 bemenetű NAND-ot tartalmaz, így kellett még egy 74LS00, hogy összekapuzzam őket. Igaziból nem ért nagy veszteség, van egy szatyor ruszki TTL-em .
A BEEP bemenetre az eredeti hang kimenetet köthetjük, így a meglévő programok hangja is hallható lesz, igaz monóban.
Én ezt a bemenetet használtam a videónál pl. a "magnó"(winamp) hangjának felvételéhez. Így elvileg a videó hangsávja a programot is hordozza,
tehát egy egyszerű jack-din kábellel akár közvetlenül betöltheted a TVC-dbe a programot.

1. Az alapkapcsolás
1. Az alapkapcsolás

Szükség van továbbá egy 8MHz-es oszcillátorra is, amit egy 74LS04 hex inverter 3 kapujából készítünk.

2. Oszcillátor
2. Oszcillátor

Ennek az IC-nek a maradék kapuiból elkészíthetjük az SAA RESET-jét, ami mindössze annyit csinál, hogy a TVC RESET gombjának megnyomásakor
elveszi a tápot a hanggenerátortól, amitől annak a regiszterei bekapcsoláskor alaphelyzetbe állítódnak. Ezzel kiküszöbölhetjük a fentebb említett hátrányt.
Én lusta voltam és nem építettem be az enyémbe, de használat közben még nem is történt baj:-).

3. Reset áramkör
3. Reset áramkör

Ez a pár kapuáramkör és az SAA elfér egy pici próbanyákon, amit a nyomtatóport mögé a burkolat alatt el lehet helyezni. A bekötés a TVC D5-ös pozíciójú
beépítetlen EPROM- helyére történt. Máshova is be lehet forrasztani, ahol vannak D0..D7 adat és A0-A7 címkivezetések. A -WR és a -IORQ jeleket a proci
bal oldalán lévő (HBA nyákon F9 pozíció) 74LS244 11- és 13-as lábaira forrasztva veszem le. A 11-es a -IORQ a 13-as a -WR, a 15-ös láb pedig a -RESET,
ha valaki beépíti a reset áramkört is. A nem használt kapuk bemeneteit kössük L szintre, a táplábak közé az IC-k tövébe tegyünk 100nF-okat.
A kimenetekre én RCA-kat raktam. Igaziból mivel ez egy prototípus, nem egy sorozatgyártásra váró agyontesztelt késztermék, ezért kilógnak a tyúkbelek
a gépből ami engem nem zavar, de Te biztosan szebben meg tudod csinálni .

    

Nekem elsőre működött. Ha mindent jól csináltunk, akkor bekapcsolás után a következő BASIC sorokkal lehet kipróbálni:

10 OUT 255,28
20 OUT 254,1
30 OUT 255,20
40 OUT 254,1
50 OUT 255,16
60 OUT 254,3
70 FOR LEFTVOLUME=15 TO 0 STEP -1
80 OUT 255,0
90 OUT 254,LEFTVOLUME
100 FOR I=0 TO 100
110 NEXT I
120 NEXT LEFTVOLUME
130 FOR RIGHTVOLUME=15 TO 0 STEP -1
140 OUT 255,0
150 OUT 254,RIGHTVOLUME*16
160 FOR I=0 TO 100
170 NEXT I
180 NEXT RIGHTVOLUME

Ha hallod a hangot először bal- majd jobboldalon megszólalni, akkor jól dolgoztál. Ehhez nem mellékelek CAS-t, egy kis ujjgyakorlat senkinek sem árt .

A szoftver:

Eleinte míg az áramkörökre vadászgattam, találtam egy kevésbé ismert számítógépet, amit a ZX Spectrum utódjaként emlegettek, de sajnos a késlekedés
- no meg persze a technika gyorsabb fejlődése miatt a gyártó cég becsődölt. Az amúgy is hibáktól hemzsegő konstrukcióból néhány ezer darab készült.
Ez a masina a  SAM Coupé. Ebben használták először az SAA1099-et, így ezen a vonalon elindulva jutottam el Aley Keprt weblapjára, ahonnét szerettem
volna néhány hangmintát begyűjteni, de sajna a mai napig nem elérhetők ezek a fileok. Írtam az úriembernek mire ő meglepő módon szinte azonnal válaszolt
elküldve a tartalmat, és néhány jó tanácsot, hol találhatom meg a többi információt. Azt már tudtam mikor megvizsgáltam az SAA emulátorokat, hogy
előszeretettel használják az eredeti SAM Coupé-s E-tracker formátumot, de hiába kísérleteztem a megadott bináris fájllal, sehogy sem bírtam megszólaltatni
a kis áramkörömet. Aztán néhány cirillbetűs, guglifordítós szörfözgetős óra után rátaláltam a tutira:  micklab

Tudtam, hogy az oroszoknál sok jó dolgot lehet találni, de ennél az embernél a komplett demók összes forrása fent van. Igazi aranybánya,
ami alapján néhány sikertelen próbálkozás, recsegtetés-ropogtatás után felcsendült a dallam:


Az SAA tesztporgram az sdinterface.atw.hu oldal demóinak alapjain nyugszik, valamint a fentebb említett weboldalak tartalmainak montázsából készült.
Ez úton is szeretném megköszönni a lapok szerkesztőinek az anyagok közzétételét! 

A program működése nagy vonalakban a következő:

A programindítás után gondoskodunk arról, hogy a memórialapozás mentve legyen, és a programból való kilépéskor helyre tudjuk állítani azt.
Ezt követően kiírjuk az intrószöveget, majd bekapcsoljuk a hanggenerátor IC-t. Az etplayer.asm-nek tudnia kell hol találja a memóriában a nótát
amit játszunk, így a HL regiszterpárban átadjuk annak kezdőcímét, majd meghívjuk a teljes inicializáló rutint. Az SAA inicializálást követően átírjuk
a megszakításkezelő függvényt. A hang IT-t tiltjuk, mert nekünk a cursor IT kell, ugyanis az E-tracker player rutinjait másodpercenként 50-szer(20ms)
kell meghívnunk. Ő már automatikusan végzi a dolgát, önállóan updateli a kiküldendő hangokat. Mivel átírtuk az eredeti interrupt alatt lefutó rutinokat,
ezért nem figyeli a gép a gombozatot, erről is nekünk kell gondoskodni. Rém egyszerű módon az inicializálásnál beállítjuk, hogy a “Q”-billentyűhöz  
tartozó 2-es sor legyen kiválasztva. Ennek a 6. bitjét csekkolgatjuk folyamatosan. Ha 0-ba megy, akkor kilépünk .
Hogy milyen billentyűre mit csináljon a program te magad is megszabhatod, a TVC operációs rendszer 13. függelékének vizsgálatával, és a demóm forrásának átírásával.

Íme hát a forrás: saatest_20130602

Az E-trackeres fileokat egy saját készítésű PHP szkripttel konvertáltam át TASM-ba illeszthetőre. Ezt is közkinccsé fogom tenni online használható formában.

Összesítve:

Viszonylag olcsón, egy könnyen összeállítható kapcsolással egész jó eredményt tudunk produkálni.
Az áramköröcske más Z80 alapú gépbe is könnyen beépíthető, mondhatni univerzális.

A jövő:

A TVC-hez jó lenne ebből egy kártyát csinálni. Viszont ha lúd akkor már legyen kövér és adnék hozzá még pár apróságot, de ez tényleg a jövő zenéje.

Források:

tvc.hu – minden TVC-vel kapcsolatos dokumentációt itt találhatsz meg. Köszönet a készítőknek.

sdinterface.atw.hu – SD drive TVC-hez+demók, programozási példák. Remek kiindulási alap TVC-s programok PC-s fejlesztéséhez.

micklab.narod.ru – ZX spectrum klónok, kiegészítők, modding, demók.

velesoft.speccy.cz – dokumentációk az SAA1099-ről


74LS00

74LS20

74LS30

74LS32

 


(Hanák Miklós)
http://retrohw.com/