16.06.2013 Views

posta - Amiga Magazine Online

posta - Amiga Magazine Online

posta - Amiga Magazine Online

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!