Gestione della tastiera
Interfaccia tra PC e tastiera Keyboard Interface Keyboard Y-decoder Micro controllore Keyboard chip Cavo della tastiera X-decoder Scan Matrix
Scan Matrix La tastiera è organizzata elettricamente come una matrice di linee che si incrociano. Ad ogni incrocio è posizionato un interruttore, su cui è localizzato un tasto. La pressione di un tasto chiude un interruttore. Le linee della matrice sono collegate ad un chip che riconosce il tasto premuto.
Microcontrollore Il chip trasmette il codice relativo al tasto premuto su un cavo seriale collegato al PC. Tale informazione è ricevuta da un microcontrollore (8042 per i primi PC/AT, 8741 o 8742 per i più recenti PC).
Scan Code Ad ogni tasto è associato un codice che lo identifica (scan code). Tale codice è codificato su 8 bit. Il chip sulla tastiera trasmette al microcontrollore 2 tipologie di codici make code, in corrispondenza della pressione di un tasto break code, in corrispondenza del rilascio del tasto. Per ogni tasto il codice di make corrisponde allo scan code il codice di break corrisponde allo scan code + 128 (bit 7 pari a 1).
Controllore della tastiera Per la programmazione e la lettura della tastiera è possibile accedere al microcontrollore come se fosse un normale dispositivo periferico.
Porte Indirizzo 60h receiver buffer e transmitter buffer indirizzo 64h control register (write-only) e status register (read-only). La funzione del registro dipende dal tipo di istruzione che svolge il processore lettura all’indirizzo 60h receiver buffer lettura all’indirizzo 64h status register scrittura all’indirizzo 60h transmitter buffer scrittura all’indirizzo 64h control register
Status Register Leggendo all’indirizzo 64h è possibile leggere lo stato del controllore della tastiera. I bit del registro di stato hanno il seguente significato bit 7 1 = l’ultimo byte ricevuto con errore di parità bit 6 1 = la tastiera non risponde (time-out) bit 5 utilizzato dal mouse bit 4 1 = tastiera disponibile, 0 = tastiera bloccata bit 3 1 = ultimo byte scritto dalla CPU è un comando al control register, 0 = ultimo byte scritto dalla CPU è un dato per il trasmitter buffer bit 2 1 = self-test della tastiera non presenta errore bit 1 1 = transmitter buffer register full bit 0 1 = receiver buffer full
Receiver buffer full Se il bit 0 del registro di stato vale 1, un byte di dato è disponibile sul receiver buffer. Quando la CPU legge il receiver buffer, il bit 0 del registro di stato viene azzerato automaticamente.
Control Register Scrivendo all’indirizzo 64h è possibile inviare un comando alla tastiera. I codice di alcuni comandi sono i seguenti AAh self-test il controllore della tastiera esegue un test della tastiera e scrive 55h nel receiver buffer se non è stato rilevato nessun errore ADh tastiera è disabilitata AEh tastiera è abilitata
Esempio Lettura di un codice nel receiver buffer rbr equ 60h str equ 64h tast proc test_fi in al, str test al, 01h jz test_fi in al, rbr ret tast endp
Scan Code in tastiera USA ESC 01h - _ 0Ch I 17h G 22h X 2Dh 1 ! 02h =+ 0Dh O 18h H 23h C 2Eh 2 @ 03h BKSP 0Eh P 19h J 24h V 2Fh 3 # 04h TAB 0Fh [ 1Ah K 25h B 30h 4 $ 05h Q 10h ] 1Bh L 26h N 31h 5 % 06h W 11h enter 1Ch ; : 27h M 32h 6 ^ 07h E 12h CTRL 1Dh , @ 28h , < 33h 7 & 08h R 13h A 1Eh ‘ 29h . > 34h 8 * 09h T 14h S 1Fh shift 2Ah / ? 35h 9 ( 0Ah Y 15h D 20h \ 2Bh shift 36h 0) 0Bh U 16h F 21h Z 2Ch print 37h
Scan Code in tastiera USA alt 38h F9 43h + 4Eh blank 39h F10 44h END 4Fh caps-lock 3Ah NUM-Lock 45h cursor do 50h F1 3Bh Scroll 46h page do 51h F2 3Ch Home 47h ins 52h F3 3Dh Cursor up 48h del 53h F4 3Eh Page up 49h F11 57h F5 3Fh - 4Ah F12 58h F6 40h cursor le 4Bh F7 41h 5 4Ch F8 42h cursor ri 4Dh