1 - Amiga Magazine Online

1 - Amiga Magazine Online 1 - Amiga Magazine Online

amigamagazine.info
from amigamagazine.info More from this publisher
01.06.2013 Views

Tipi e polimorfismo Abbiamo detto che le macro presenti nel file 1iste.h ser- vono per facilitare l'uso delle funzioni di Exec, in partico- lare per quanto riguarda il cast sui tipi. È importante no- tare che la scelta di operare in questo modo ha una certa base teorica, anche se può produrre in pratica dei risulta- ti dannosi. Infatti basta riflettere un attimo per rendersi conto che le operazioni che si compiono sulle liste, sia quelle descritte fin qui sia altre che potrebbero essere im- plementate, come il calcolo del numero di elementi nella lista, non dipendono dal tipo degli elementi contenuti. Questa caratteristica, che non riguarda solo le liste, ma anche le altre strutture contenitore (code, stack, ecc.) è ben nota con vari nomi in diversi linguaggi di program- mazione: polimorfismo parametrico in ML e Miranda, package generici in ADA, template in C++. In tutti questi linguaggi il polimorfismo parametrico (da non confondere con il polimorfismo per inclusione, che è collegato alla ereditarietà nei linguaggi object-oriented), cioè la capacità di uno stesso oggetto di assumere forme diverse pur mantenendo una sua "identità", è però realiz- zato in modo che il controllo sui tipi avverta il program- matore in caso di eventuali errori. Invece in C, ricorrendo ai cast come abbiamo fatto nelle macro, si aggira il controllo sui tipi, facendo credere al compilatore che in una certa zona di memoria si trovi un certo tipo di struttura. Se abbiamo fatto tutto con cura, non ci sarà alcun pro- blema, ma in caso di disattenzioni il compilatore non ci darà alcun messaggio di errore, mentre avremo compor- tamenti spiacevoli (guru) del nostro programma durante l'esecuzione. Utilizzando le macro si dovrà quindi fare attenzione a non invertire l'ordine dei parametri, a utilizzare le struct List e Node se si intende servirsi di Enqueue e FindName e soprattutto, ci si dovrà ricordare di inserire come primo campo degli elementi di lista da noi definiti una struct Node o MinNode. Liste o vettori? Prima di concludere questo articolo, è giusto mettere a confronto le due alternative, per evitare di comprare a scatola chiusa. i punti a favore delle liste sono: capacità di crescere e regredire dinamicamente; possibilità per gli elementi di risiedere ovunque in memoria, dal momento che sono i puntatori a mantenere la coesione della strut- tura dati per cui non c'è alcun vincolo di adiacenza, co- me accade invece per i vettori; nessuna necessità di pre- vedere in anticipo il numero di elementi da memorizzare e quindi di allocare più memoria di quanta se ne utilizza effettivamente. Tutto ciò può essere riassunto nello slo- gan: maggiore flessibilità. I punti a sfavore sono non meno importanti: ogni ele- mento inserito in lista occupa almeno 8 byte in più, per tenervi i due puntatori, rispetto allo stesso elemento inse- rito in un vettore; i byte diventano poi 14 se usiamo la struct Node; inoltre non è possibile accedere direttamen- te a un certo elemento della lista che non sia quello di testa o di coda: la lista va scandita elemento per elemen- to fino a raggiungere quello che ci interessa! Lo slogan a favore dei vettori è quindi: maggiore efficienza. Per finire, il programma di esempio presente su disco può essere lanciato sia da CL1 che da Workbench: in questo caso clickate sul gadget zoom prima di iniziare gli esperimenti; l'interfaccia utente è ridotta al minimo. Come esercizio potreste estendere questo esempio in modo da utilizzare anche Enqueue e FindName. I più av- venturosi e tenaci potrebbero invece cercare di realizzare liste di liste oppure liste contenenti elementi non dello stesso tipo, ma ai quali è possibile applicare una stessa funzione, come una procedura di stampa. A

11 Chipset AGA Alla scoperta dei Chip Custom di Amiga I200 e Amtga 4000 @arte II) FABRIZIO FARENGA (F.FurengaQagoru.stm .it) "Double CAS" e "32 bit reali" con quella unica "Double CAS a 32 bit". Le prime due permettono un fetch dei bitplane a 32 bit, mentre la seconda lo permette a 64 bit Fabrizio Farenga coordina la Holodream Software di Roma, specializzata nella produzione di prodotti per l'in- (normalmente, sugli Amiga OCS/ECS il fetch è a 16 bit). trattenimentoper Amiga e PC. È uno Sviluppatore Amiga Ricordiamo in questa sede che il bit O di FMODE da diversi anni, detiene una licenza di sviluppo CD32 e ($DFFlDC) controlla l'attivazione della modalità "32 bit ha realizzato personalmente Formula 17 Challengeper la reali" per l'accesso ai bitplane e che il bit 1 dello stesso britannica Team 17 Software. registro controlla la funzione "Double CAS". II Modulo W, W 6 e W 8 Nella prima parte di questo articolo abbiamo appreso co- me attivare fino a otto bitplane contemporaneamente (per ottenere display da 2 a 256 colori) e come program- mare di conseguenza i registri colore. Abbiamo anche parlato delle nuova ampiezza di banda e della sua programmabilità per mezzo del registro FMODE ($DFFlFC). Come accennato, modificando le impostazio- ni del suddetto registro per aumentare l'ampiezza della banda in risoluzioni che non ne avrebbero bisogno, si ot- tiene un incremento delle prestazione dei dispositivi (ti- po Blitter) che accedono alla memoria grafica (Chip RAM) grazie al minor numero di accessi necessari per la visualizzazione dei bitplane; il rovescio della medaglia è un leggero aumento delle limitazioni in fase di allocazio- ne della memoria destinata ai bitplane, i quali, impostan- do la modalità di banda più veloce ("Double CAS a 32 bit"), devono addirittura essere posizionati a partire da indirizzi multipli di 8. Alcuni problemi sorgono nella ge- stione del modulo, il quale non si comporta più come di consueto quando viene impostata la modalità Double CAS, quella a 32 bit, o entrambe contemporaneamente. Senza creare allarme tra coloro che vogliono utilizzare al meglio il registro FMODE, senza per questo dover ripro- gettare le proprie Copperlist, basterà dire che ai consueti valori di modulo impostati per visualizzare correttamente una schermata deve essere sottratto il numero 4 nelle modalità a 32 bit ("Double CAS" e "32 bit reali") e 8 nella modalità a 64 bit ("Double CAS a 32 bit"). Non si confon- dano le due distinte (ma in pratica equivalenti) modalità Per owie ragioni di compatibilità la modalità HAM (come anche quella Extra Half Brite di cui abbiamo parlato la volta precedente) è rimasta immutata nel suo funziona- mento sui sistemi AGA. Unica miglioria è rappresentata dalla possibilità di utilizzarla anche su schermi Hires e Super-Hires, gradita sorpresa offerta dalle nuove ampiez- ze di banda. Da qualche tempo, per distinguerla più chiaramente dall'HAM "avanzato" disponibile su Arniga 1200 e Amiga 4000, viene chiamata HAM6, visto che sfrutta 6 bitplane per il suo funzionamento. La modalità HAM "avanzata" delllAGA, anziché 4.096 co- lori, permette di gestire (a patto di avere uno schermo sufficientemente ampio e aver impostato con intelligenza la base dei colori) ben 16.777.216 sfumature diverse, dal momento che utilizza tutti e otto i bitplane: è stata bat- tezzata HAM8. I1 suo principio di funzionamento è analogo a quello dell'HAM6. In particolare l'unica sostanziale differenza è costituita dallo spostamento dei bitplane di controllo. Come sapete, nella modalità HAM6 i bitplane 5 e 6 sono destinati alla selezione dell'operazione da compiere; nel caso entrambi siano a O (OO), sullo schermo, il pixel cor- rispondente avrà il colore definito dal registro colore in- dicato dai 4 bit dei bitplane da 1 a 4 (come in un norma- le schermo a 16 colori). Se la combinazione di bit dei plane 5 e 6 è 01, il colore

11 Chipset AGA<br />

Alla scoperta dei Chip Custom di <strong>Amiga</strong> I200 e Amtga 4000 @arte II)<br />

FABRIZIO FARENGA (F.FurengaQagoru.stm .it) "Double CAS" e "32 bit reali" con quella unica "Double<br />

CAS a 32 bit". Le prime due permettono un fetch dei bitplane<br />

a 32 bit, mentre la seconda lo permette a 64 bit<br />

Fabrizio Farenga coordina la Holodream Software di Roma,<br />

specializzata nella produzione di prodotti per l'in-<br />

(normalmente, sugli <strong>Amiga</strong> OCS/ECS il fetch è a 16 bit).<br />

trattenimentoper <strong>Amiga</strong> e PC. È uno Sviluppatore <strong>Amiga</strong> Ricordiamo in questa sede che il bit O di FMODE<br />

da diversi anni, detiene una licenza di sviluppo CD32 e ($DFFlDC) controlla l'attivazione della modalità "32 bit<br />

ha realizzato personalmente Formula 17 Challengeper la reali" per l'accesso ai bitplane e che il bit 1 dello stesso<br />

britannica Team 17 Software. registro controlla la funzione "Double CAS".<br />

II Modulo W, W 6 e W 8<br />

Nella prima parte di questo articolo abbiamo appreso co-<br />

me attivare fino a otto bitplane contemporaneamente<br />

(per ottenere display da 2 a 256 colori) e come program-<br />

mare di conseguenza i registri colore.<br />

Abbiamo anche parlato delle nuova ampiezza di banda e<br />

della sua programmabilità per mezzo del registro FMODE<br />

($DFFlFC). Come accennato, modificando le impostazio-<br />

ni del suddetto registro per aumentare l'ampiezza della<br />

banda in risoluzioni che non ne avrebbero bisogno, si ot-<br />

tiene un incremento delle prestazione dei dispositivi (ti-<br />

po Blitter) che accedono alla memoria grafica (Chip<br />

RAM) grazie al minor numero di accessi necessari per la<br />

visualizzazione dei bitplane; il rovescio della medaglia è<br />

un leggero aumento delle limitazioni in fase di allocazio-<br />

ne della memoria destinata ai bitplane, i quali, impostan-<br />

do la modalità di banda più veloce ("Double CAS a 32<br />

bit"), devono addirittura essere posizionati a partire da<br />

indirizzi multipli di 8. Alcuni problemi sorgono nella ge-<br />

stione del modulo, il quale non si comporta più come di<br />

consueto quando viene impostata la modalità Double<br />

CAS, quella a 32 bit, o entrambe contemporaneamente.<br />

Senza creare allarme tra coloro che vogliono utilizzare al<br />

meglio il registro FMODE, senza per questo dover ripro-<br />

gettare le proprie Copperlist, basterà dire che ai consueti<br />

valori di modulo impostati per visualizzare correttamente<br />

una schermata deve essere sottratto il numero 4 nelle<br />

modalità a 32 bit ("Double CAS" e "32 bit reali") e 8 nella<br />

modalità a 64 bit ("Double CAS a 32 bit"). Non si confon-<br />

dano le due distinte (ma in pratica equivalenti) modalità<br />

Per owie ragioni di compatibilità la modalità HAM (come<br />

anche quella Extra Half Brite di cui abbiamo parlato la<br />

volta precedente) è rimasta immutata nel suo funziona-<br />

mento sui sistemi AGA. Unica miglioria è rappresentata<br />

dalla possibilità di utilizzarla anche su schermi Hires e<br />

Super-Hires, gradita sorpresa offerta dalle nuove ampiez-<br />

ze di banda. Da qualche tempo, per distinguerla più<br />

chiaramente dall'HAM "avanzato" disponibile su Arniga<br />

1200 e <strong>Amiga</strong> 4000, viene chiamata HAM6, visto che<br />

sfrutta 6 bitplane per il suo funzionamento.<br />

La modalità HAM "avanzata" delllAGA, anziché 4.096 co-<br />

lori, permette di gestire (a patto di avere uno schermo<br />

sufficientemente ampio e aver impostato con intelligenza<br />

la base dei colori) ben 16.777.216 sfumature diverse, dal<br />

momento che utilizza tutti e otto i bitplane: è stata bat-<br />

tezzata HAM8.<br />

I1 suo principio di funzionamento è analogo a quello<br />

dell'HAM6. In particolare l'unica sostanziale differenza è<br />

costituita dallo spostamento dei bitplane di controllo.<br />

Come sapete, nella modalità HAM6 i bitplane 5 e 6 sono<br />

destinati alla selezione dell'operazione da compiere; nel<br />

caso entrambi siano a O (OO), sullo schermo, il pixel cor-<br />

rispondente avrà il colore definito dal registro colore in-<br />

dicato dai 4 bit dei bitplane da 1 a 4 (come in un norma-<br />

le schermo a 16 colori).<br />

Se la combinazione di bit dei plane 5 e 6 è 01, il colore

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

Saved successfully!

Ooh no, something went wrong!