Un controller non è altro che l'hardware che praticamente interfaccia il device
vero e proprio con il resto del sistema (possiamo pensare al chip di I/O come parte di esso); gestisce
infatti l'accesso al bus (vedi sezione 3.7.1 del testo). Ogni controller nel
nostro esempio avra' un registro CSR ed un registro BR.

Quando un tasto viene premuto sulla tastiera, il byte contenente
il codice ASCII del carattere corrispondente al tasto premuto viene inserito nei
bit 15-8 del BR della tastiera.
La figura che segue rappresenta lo stato dei registri dopo la pressione del tasto "A" - carattere 65 della tabella ASCII - 01000001
Vengono nello stesso
momento posti ad 1 i bit 15 (detto IP) e 0 (detto RDY) del CSR.
Il bit IP
indica che viene fatta richiesta di un'interruzione dalla tastiera, mentre RDY
indica la presenza di un carattere nel BR. (I bit IP e RDY non hanno sempre lo
stesso valore, poiché il driver, appena inizia ad operare, pone IP a 0 per
indicare che l'interruzione richiesta è stata accolta ed è in fase di
elaborazione).

Ovviamente è possibile
che in precedenza un tasto sia stato
premuto e che ancora la gestione dell'interruzione relativa non sia terminata.
E' possibile cioè che il controller, quando si preme un tasto, trovi ad uno il
bit RDY. In questo caso possiamo supporre che quel che viene fatto è
semplicemente inserire nei bit 13-1 del CSR un codice di errore

allo scopo di segnalare al driver una condizione di anomalia.
prova tu: clicca sulla figura qui sotto e premi qualsiasi
tasto. Viene messo il codice ASCII del carattere digitato in BR, e messo a
1 IP e RDY
Nota: Se non vedi la figura
sopra hai bisogno di Java Plug-in che funziona automaticamente
installando la
J2SE JRE
Quando il microinterprete accoglierà la
richiesta di interruzione chiamerà il driver della tastiera.
<---- Il gestore delle interruzioni
Il driver della tastiera ---->