posta - Amiga Magazine Online
posta - Amiga Magazine Online
posta - Amiga Magazine Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
La gestione del Timer su Amga<br />
Antonello Biancalana<br />
Tre metodi per perdere sempre lo stesso tempo<br />
Antonello Biancalana lavoraper la ProMIND, una sofiwa-<br />
re house di Pemgia che sviluppa software grafico e musi-<br />
cale per <strong>Amiga</strong>, ed è sviluppatore <strong>Amiga</strong> registrato nella<br />
catego" "commercial". Di recente, Antonello Biancala-<br />
na, ha progettato e sviluppato MSPL (Music Synthesis Pro-<br />
gmmming Language), un particolare linguaggio di pro-<br />
grammazione rivolto alla sintesi sonora e musicale.<br />
Può accadere che, durante la scrittura dei nostri program-<br />
mi, si abbia bisogno di momenti di pausa, o comunque di<br />
controllare ed eseguire alcuni eventi dopo un certo periodo<br />
di tempo. L'errore più frequente che si commette nell'im-<br />
plementare i momenti di pausa all'interno di un program-<br />
ma, è quello di fare uso di cicli, come accade, per esempio,<br />
nelle istruzioni "C":<br />
oppure nell'equivalente codice assembler:<br />
m0ve.w #30000,dO<br />
wait: dbra do, wait<br />
entrambi gli esempi assicurano un certo periodo di ritardo<br />
che può soddisfare le nostre esigenze, ma in alcune circo-<br />
stanze il loro risultato sarà assolutamente imperfetto, pre-<br />
giudicando l'esecuzione dell'intero programma e, alle vol-<br />
te, l'utilizzo dello stesso.<br />
I1 motivo è semplice: supponiamo di sviluppare un nostro<br />
ipotetico programma su un <strong>Amiga</strong> 2000, che, come tutti<br />
sanno, utilizza il microprocessore Motorola 68000 a una<br />
frequenza di 7 MHz, e supponiamo anche che uno dei due<br />
esempi riportati sopra sia stato incluso nei nostro program-<br />
ma. Tutto funzionerà correttamente fino a quando il pro-<br />
gramma viene eseguito in un <strong>Amiga</strong> con caratteristiche<br />
simili, in tal caso le pause saranno esattamente come le<br />
volevamo. Immaginiamo ora che il programma venga<br />
eseguito in un <strong>Amiga</strong> 2000 con una scheda acceleratrice, o<br />
peggio ancora, su un Arniga 3000: il programma diventerà<br />
di colpo "ultraveloce", e, in alcuni casi, diventerà impossi-<br />
bile usarlo. E' chiaro che il ritardo ottenuto con gli esempi<br />
precedenti e strettamente dipendente dalla velocità del<br />
microprocessore usato, nonché dalla frequenza di clock<br />
dello stesso, ed è owio che il tempo di esecuzione dell'i-<br />
struzione assembler "dbra" sia notevolmente minore su un<br />
68030 che su un 68000.<br />
Delay<br />
Per risolvere correttamente il problema, <strong>Amiga</strong> offre diver-<br />
se possibilità a seconda delle nostre esigenze. Se abbiamo<br />
bisogno di includere dei semplici momenti di pausa all'in-<br />
terno dei nostri programmi, potremo far ricorso alla funzio-<br />
ne Delay( ) supportata dalla "dos.library". I1 suo compito,<br />
infatti, è quello di fornire un certo periodo di ritardo<br />
determinato dal suo argomento. I1 periodo dovrà essere<br />
espresso in "tick" e, tenendo conto che ogni secondo è<br />
composto da 50 tick, il calcolo del tempo di attesa da fornire<br />
alla funzione è molto semplice. L'esempio n. 1 su disco<br />
comprende un semplice programma scritto in C, che utiliz-<br />
za appunto la funzione "Delay".<br />
Forse, alcuni lettori si meraviglieranno di non trovare nel<br />
programma il codice relativo all'apertura della<br />
"dos.library", dove risiede la funzione Delay( ): ricordiamo<br />
che i compilatori C per <strong>Amiga</strong> (Aztec, Lattice. ecc.) gestisco-<br />
no automaticamente l'apertura e la chiusura di questa<br />
libreria. Rispetto agli esempi precedenti, questa volta la<br />
quantità di tempo sarà sempre la stessa, indipendentemen-<br />
te dalla configurazione hardware in cui il programma viene<br />
eseguito, e sarà anche più precisa.<br />
I1 timer device<br />
<strong>Amiga</strong>, come sappiamo, possiede una struttura hardware e<br />
software dalle possibilità infinite (o quasi), per esempio il<br />
multitasking, le librerie di funzioni e i device. Proprio da<br />
uno dei device di <strong>Amiga</strong> otteniamo un metodo ancora più<br />
potente e accurato per la gestione dei tempi: il timer device.<br />
Questo va gestito come tutti gli altri device: prima deve<br />
essere aperto, poi gli si devono spedire i comandi necessari<br />
e, infine, si deve chiuderlo.<br />
L'uso del timer device permette di implementare dei ritardi<br />
molto più precisi di quanto consenta la funzione Delay( )<br />
esaminata in precedenza. Può lavorare in due modalità<br />
diverse a seconda delle esigenze del programmatore e,<br />
inoltre, il suo uso consente al nostro programma di gestire<br />
altre risorse mentre attende che la richiesta di pausa sia