\nuovoarticolo{Gianluca Marcoccia, Marco Menichetti e Luca Viola}{DMA
Blanker}{%
Gianluca Marcoccia \\
Via Garibaldi 78 \\
I-56100 Pisa PI
\medskip \\
Marco Menichetti \\
Via Monteverdi 4/C \\
I-50144 Firenze FI \\
\medskip \\
Luca Viola \\
Corso Italia 52 \\
I-95047 Paternò CT \\
Tel.:~(050)525000
}{%
Internet:~marcocci@cli.di.unipi.it~(Marcoccia) \\
~~~~~~~~~~viola@freenet.hut.fi~~~~~(Viola)
}{italian}{%
The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offense.}{E.W.~Dijkstra}

%Idea e implementazione: Gianluca Marcoccia e Luca Viola
%Routine di supporto in assembler: Marco Menichetti


\sez{Introduzione}

Yet Another Blanker? Che bisogno c'era di un altro blanker con tutti quelli
che ci sono in giro? L'idea di questo blanker è nata dopo aver avuto una BBS
installata in casa per quasi un anno. Sebbene suddetta BBS fosse tenuta in
opera con uno dei migliori software disponibili in commercio, a esso
mancavano alcune caratteri\-sti\-che che lo avrebbero reso sicuramente più
utilizzabile, specie per gli utenti remoti. Selezionando la modalità ANSI a
colori, il computer locale apriva lo schermo su cui è possibile monitorare la
sessione con lo stesso numero di colori (8/16) ri\-chie\-sti per lo schermo
dell'utente remoto. Questo in un \amiga{} non dotato dei nuovi chipset porta
inevitabilmente a un decadimento delle prestazioni della CPU e a conseguenti
lamentele dell'utente che non riesce a raggiungere la velocità (di fuga!)
durante il download.

Da queste considerazioni abbiamo avuto un'idea: quando siamo al terminale
è inevitabile il consumo di bandwidth, ma quando non ci siamo, perché il
blanker, invece dei soliti disegnini, non fa qualcosa di più utile?
Abbiamo così deciso di programmare un blanker che permetta ai programmi
che eventualmente girano sulla macchina di disporre di tutte le
risorse possibili.

\sez{La bandwidth}

Gli accessi dei chip custom alla memoria chip vengono svolti in DMA
(direct memory access): ovvero i chip stessi vanno a prelevare i dati che
sono loro necessari senza richiedere l'intervento della CPU.
Normalmente il tempo dedicato all'accesso alla memoria chip è diviso a metà
tra i chip custom e la CPU, a meno che i primi si trovino nella
condizione di aver bisogno di un maggior tempo di accesso.
L'utilizzo di un numero di bitplane superiore a 2 su un \amiga{} ECS produce
un utilizzo di bandwidth alto, limitando il numero di accessi a memoria chip
consentiti alla CPU. Ciò provoca un generale decadimento delle prestazioni
della macchina.

Gli accessi in DMA dei chip custom sono necessari per lo svolgimento delle
funzioni grafiche e sonore. Esiste però un controllore per il DMA che di
volta in volta specifica quali accessi in DMA sono permessi e quali no.
Utilizzando questo controllo è possibile inibire o meno alcune funzioni
dei chip custom.

I controlli di accesso del DMA sono:

\begin{itemize}
\item DMA Sprite
\item DMA Playfield
\item DMA Copper
\item DMA Audio
\item DMA Disk
\item DMA Blitter
\end{itemize}

Se, per esempio, non è necessaria la visualizzazione dello schermo, è possibile
inibire i DMA Sprite, Playfield e Copper. Il DMA Blitter non può essere
disabilitato perché viene utilizzato anche per altre funzioni che non sono
intrinsecamente relative alla visualizzazione.

La disabilitazione del DMA Disk non è necessaria in quanto è automaticamente
svolta dal sistema operativo quando questo non è in utilizzo; la stessa
con\-si\-de\-ra\-zio\-ne vale per il DMA Audio.
Di\-sa\-bilitare i DMA quando non sono necessari consente di restituire alla CPU
il massimo tempo possibile di utilizzo della Chip RAM.

\sez{Il blanker}

Fatte queste considerazioni, passiamo alla descrizione del programma.

Dal sistema operativo 2.04 in poi, sono disponibili all'utente alcune
routine standard per l'integrazione di programmi di utilità nel sistema
operativo. Tali routine sono implementate nella ¶{commodities.library}.
È fornita la possibilità di utilizzare un input handler posto
a valle del processore di eventi di Intuition. Questo handler consente di elaborare
gli eventi in arrivo prima che essi giungano a destinazione, risolvendo in maniera
elegante il problema della coesistenza di più programmi che devono manipolare
il flusso di input. Alla luce di ciò il DMA blanker è stato implementato come
una commodity, con una interfaccia grafica font-adattiva che segue i dettami
della {\em Amiga User Interface Style Guide}.

\sez{Descrizione dell'interfaccia utente}

In alto trova posto un box contenente un gadget per numeri interi: da qui è possibile
immettere il valore di ¶{Timeout} (ovvero l'intervallo di tempo dopo cui, in
assenza di eventi di input, il blanker viene attivato). In basso invece è situato
un pannello contenente 10 gadget di selezione, ognuno corrispondente ai vari tipi
di DMA che si vuole disattivare durante il blanking. Per finire è presente
un menu contenente tre voci: {\tt Hide}, che nasconde l'interfaccia, {\tt About}, che mostra
informazioni di copyright, e {\tt Quit} che provvede a uscire dal blanker. I valori di
default del timeout e degli switch DMA vengono determinati attraverso una serie
di tool type nell'icona.

%, che sono:
%
%\begin{list}
%\item[CX_PRIORITY=<Pri>] indica la priorità del DMA blanker (DEFAULT 0)
%
%CX_HOTKEY=<Keys string>	indica la combinazione di tasti per fa apparire l'interfaccia
%			(DEFAULT "rawkey control b" )
%
%CX_POPUP="YES|NO"	indica se si vuole far apparire l'interfaccia la prima volta
%                	che si lancia il blanker (DEFAULT "YES")
%
%TIMEOUT=<Secondi>	Fornisce il numero di secondi di attesa (DEFAULT 60 secondi)
%
%COPPER=INACTIVE|ACTIVE	Questi tooltypes decidono quali coprocessori vanno disattivati
%BLTPRI=INACTIVE|ACTIVE	durante il blanking. Il default per tutti è INACTIVE
%AUDIO3=INACTIVE|ACTIVE	tranne che per BLITTER e DISK il cui default è ACTIVE.
%AUDIO2=INACTIVE|ACTIVE
%AUDIO1=INACTIVE|ACTIVE
%AUDIO0=INACTIVE|ACTIVE
%SPRITES=INACTIVE|ACTIVE
%PLAYFLD=INACTIVE|ACTIVE
%BLITTER=INACTIVE|ACTIVE (*)
%DISK=INACTIVE|ACTIVE (*)

Gli switch DMA del blitter e del disco non sono selezionabili, in quanto vengono interamente
gestiti dal sistema operativo. Sono stati tuttavia inseriti per un eventuale uso in future
versioni del DMA blanker.

\finearticolo
