Opisi:
Moj Mikro, #2, Februar 1987, Uporabni Programi, Aleš Likar
Light Show za C64
Glasba in slika iz vašega kasetnika
Program sprejema glasbo iz commodorjevega kasetnika in jo slišno in vidno
predstavi na televizorju. Glavni del programa je napisan v strojnem jeziku.
Začne se na $C0EE. Sledi skok na $C000, kjer se postavi IRQ vektor, tako da
kaže na $C012. Tu se začne IRQ rutina za pobiranje bitov, ki prihajajo iz
kasetofona. Rutina bere bit 4 na lokaciji $DC0D (IRQ kontrolni register v CiA
1). Več kot pride enic, večja je frekvenca signala. Izmerjena frekvenca se
shrani na pomnilniški lokaciji $4E. Hkrati se glede na to, ali je prišla 1 ali
0, vključi ali izključi zvočnik v televizorju, razen če to preprečimo iz
basica. Tako je mogoče prihajajoči signal tudi slišati, čeprav kvaliteta ni
ravno hi-fi. Rutina se konča na $C0D2B z reševanjem registrov in vrnitvijo iz
prekinitve (RTI).
Glavna rutina je na lokacijah $C000-$C173.Skoku na $C000 sledi skok v izbrani
podprogram. Izbiro smo naredili v basicu, tako da smo na lokaciji $C0F2 in
$C0F3 s poki vnesli začetni naslov rutine. Potem je na vrsti preskušanje, ali
je pritisnjena kakšna tipka. Če je, se IRQ vektor postavi pazaj in se program
vrne v basic, drugače pa spet skočimo v enega od treh podprogramov.
Prvi podprogram je SPEKTRALNI ANALIZATOR. Leži na naslovih $C04E-$C088, na
$C02C-$C04D pa shranjuje pozicijo kazalca - črte za vsako od frekvenc. V vsakem
prehodu programa se najprej vsi kazalci skrajšajo, razen če niso že maksimalno
kratki. Potem se v vrstici, ki je zapisana na $4E, kazalec podaljša za tri
znake. Postavijo se še kazalci v vmesnem pomnilniku in na zaslonu ter vrnitev v
glavni program.
Drugi podprogram je YU-meter (na način YU-metra predstavjena frekvenca).
Najprej se v programu zbrišeta potrebni vrstici, nato pa se vanju nariše toliko
znakov, kot je napisano na lokaciji $4E. Posebnost tega podprograma je, da se
sam spreminja: ko nariše gornji del puščice, spremeni kodo znaka v instrukciji
LDA # KODA in naredi to še za spodnji del puščice. Tretji podprogram je LIGHT
SHOW. Začne se na $C0AF in konča na $C0ED, vendar je start pravzaprav na $C10D.
Tam je rutina, ki prenese vsebino lokacije $C175-$C55D na zaslon. Na teh
lokacijah je shranjena slika treh »žarnic« light showa. Uporabil sem način
razširjenega ozadja (extended background mode). To pomeni, da je lahko ozadje
znakov v treh različnih barvah. Namesto inverznih znakov in istih, ki jih
dobimo s tipko SHIFT, se izpisujejo znaki z drugo barvo ozadja. Tako je slika
ves čas na zaslonu, le vidimo je ne, ker ima isto barvo kot ozadje. S pokanjem
barv na lokacije 53282, 53283 in 53284 lahko osvetlimo posamezne »žarnice«.
Podprogram na začetku preskuša vrednost frekvence na lokaciji $4E in na podlagi
te prižge eno od »žarnic«.
V strojnem programu sta še rutina za prenos znakov v ROM na 12288 (zaradi
šumnikov) in rutina za prenos zaslona na pomnilniške lokacije $C175-$C55D. V
programu v basicu je pomemben samo še EDITOR. Z njim lahko spremenimo sliko
light showa, če nam sedanja ni všeč. Ostanek basica je namenjen »kozmetiki«:
določanju barv, risanju zaslonov itd.
Verjetno marsikdo ne bo zadovoljen s kvaliteto tona,ki jo dobimo s softversko
rešitvijo. Zato sem se domislil še preprostega hardverskega posega. Po uporu je
treba povezati nožico 1 na serijskih vratih z nožico 5 na AUDIO/VIDEO. Najbrž
ste ugotovili, kaj se zgodi. Na SERIAL SROIN se pojavljajo podatki s kasete,
vodimo pa ih na vhod AUDIO IN iz zunanjega izvora. Rezultat je bistveno boljši
ton. Zato nas program v vrstici 2030 vpraša, ali je ta povezava narejena. Sam
sem zanjo uporabil upor 100 KOhmov. Morda bi šlo tudi z neposredno povezavo,
vendar si je nisem upal tvegati.
|