|
 |
Raccolta di Procedure ASM |
KEYwait 5/5
[10 di 54] |
 | In questa ultima pagina dedicata alla
Procedura KEYwait cerchiamo di
chiarire il suo compito: da una analisi superficiale abbiamo rilevato che, mentre essa è in
esecuzione il programma è bloccato... Non succede
nulla! |
 | La cosa è scontata, dato che, per tutto questo tempo,
rimane in attesa della pressione di un tasto,
uno qualunque; ma che succede, nel frattempo? |
 | Ne abbiamo già parlato in una
scheda, nata per altro a supporto
delle procedure Pascal della
Libreria GIOBE.TPU;
i concetti principali sono riassunti qui di seguito:
 | il processore dedicato presente sulla
scheda interna alla tastiera si incarica di scandire (polling)
ogni tasto all'infinito, per sentire se è premuto
o rilasciato; quando ciò accade spedisce
al computer un numero, il
codice di scansione, in pratica il
numero che esprime la sua
posizione nell'ambito della
tastiera; per esempio ESC, il
primo tasto in alto a sinistra, ha il
numero
1. |
 | l'interfaccia interna al computer rileva
l'arrivo di questo byte e segnala al processore una
richiesta d'interruzione (IRQ1)
in risposta alla quale, di norma, il processore attiva la
procedura di servizio corrispondente (INT
09H). |
 | tra i compiti di questa procedura c'è quello di cercare
in una tabella
un secondo importante numero, da affiancare al precedente: il
codice ascii. |
 | la
tabella nazionale disponibile per
default è quella inglese, ma può essere
facilmente sostituita con quella corrispondente alla nazionalità della
tastiera in uso, eseguendo il comando Dos
KEYB; per esempio KEYB IT
associa ai tasti i caratteri ascii
tipici della
tastiera italiana (nessun'altra nazione
usa, per esempio, le lettere accentate...). [naturalmente quando siamo
ospiti di Windows la cosa non è necessaria..] |
 | dopo questa operazione
per ogni tasto premuto (o
rilasciato) sono dunque resi disponibili
2 bytes; la medesima
procedura di servizio (INT
09H) provvede a memorizzarli in una
area di memoria ram condivisa con il sistema operativo, detta
Buffer Circolare. |
 | in questo preciso
istante ha termine l'effetto
prodotto dalla
pressione (e dal
rilascio) di un tasto
(e, con esso, quello della procedura INT 09H). |
|
 | Se nessuno si affretta a scaricare il
Buffer Circolare l'informazione rischia di essere
perduta; in fatti esso può tener memoria
solo di 15 coppie
di bytes, dopo di chè le successive pressioni e rilasci sovrascriveranno le
precedenti, nella logica della circolarità del buffer... |
 | In realtà questo rischio
è assolutamente improbabile:
nessun software rimane, di norma, insensibile alla
pressione di un tasto; il sistema operativo stesso mostra di accorgersi
della pressione di un tasto perchè provvede a far apparire il carattere
corrispondente (echo a video) nella
posizione di stampa corrente. |
 | In pratica con l'operazione di
echo a video provvede a
scaricare
il Buffer Circolare, cioè
legge (= toglie)
da esso la coppia di bytes, cedendoli alle
procedure di stampa a video. |
 | La gestione diretta del
Buffer Circolare
è compito delicato e complesso; dovremo attendere parecchio tempo prima di
poterla affrontare con soddisfazione... |
 | Per fortuna il sistema,
dopo aver provveduto a caricare (scrivere)
i 2 bytes nel Buffer, mette a
disposizione anche la struttura adatta a scaricarlo
(leggerlo): si tratta della funzione BIOS
INT 16H, in sostanza la nostra
KEYwait
. |
 |
Come anticipato, non appena un tasto
è premuto,
la
KEYwait (e la
funzione BIOS
INT 16H)
lasciano in AL il suo
codice Ascii e in
AH il suo
codice di scansione. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|