GESTIONE DELLA TASTIERA Prof. Marco Solarino
ALL'INTERFACCIA DI TASTIERA STRUTTURA HARDWARE CODIFICA DI RIGA A CODIFICA DI COLONNA ALL'INTERFACCIA DI TASTIERA CONTROLLORE INTERNO SCAN CODE (1E)
SCAN CODE Lo SCAN CODE individua il tasto premuto (o rilasciato), ma solo in base alla sua posizione, indipendentemente quindi dal simbolo riportato sulla superficie del tasto stesso. Il suo bit più significativo indica se il tasto è premuto (bit7=0) o rilasciato (bit7=1), mentre i restanti bit indicano di quale tasto si tratta.
COLLEGAMENTO ESTERNO Generalmente la tastiera si collega all'unità centrale tramite il connettore PS/2, ma questa non è l'unica modalità disponibile. SCHEDA MADRE INTERFACCIA TASTIERA
RICHIESTA DI INTERRUPT COLLEGAMENTI INTERNI PORTA A DEL PPI 8255 (60H) INTERFACCIA TASTIERA (64H) SCAN CODE RICHIESTA DI INTERRUPT PIC 8259 IRQ1 INTR RICHIESTA DI INT09 ALLA CPU
INT09 - ATTIVAZIONE Gli eventi che provocano la richiesta di attivazione della INT09 sono due: pressione di un tasto rilascio di un tasto ATTENZIONE Si può abilitare la ripetizione del tasto, e allora la richiesta di INT09 verrà inoltrata più volte finche si mantiene la pressione.
RIPETIZIONE DEL TASTO Se si attiva la ripetizione del tasto, si devono stabilire i valori di due parametri: il ritardo prima dell'inizio la frequenza di ripetizione Questi valori si possono impostare nel setup del BIOS o tramite le utilità offerte dal sistema operativo (Pannello di controllo in Windows XP o Impostazioni di sistema in Kubuntu Linux).
INT09 – COSA FA Semplificando molto, la funzione essenziale della routine di risposta alla INT09 è di riconoscere il tasto premuto (tramite il suo scan code) e associargli un codice ASCII. Non è suo compito “consumare” il tasto, ma solo renderlo disponibile per i programmi che dovranno utilizzarlo. Ottiene questo scopo depositando scan code e codice ASCII nel buffer di tastiera, da cui gli altri programmi potranno prelevarlo.
BUFFER DI TASTIERA 0:41Eh 0:420h Keyboard Buffer Head Pointer (0:41Ah) scan code + ASCII 0:422h scan code + ASCII 0:424h 0:426h Keyboard Buffer Tail Pointer (0:41Ch) 426h 0:43Ch
INT09 – L'INIZIO Le prime istruzioni della routine di risposta alla INT09 consistono in un ciclo di attesa della disponibilità dello scan code sulla porta 60h (Porta A del PPI). Il bit meno significativo della porta 64h (interfaccia tastiera) segnala tale disponibilità ponendosi a 1. INT09 NO LEGGI PORTA 64h BIT MENO SIGNIFICATIVO =1? SI (scan code arrivato) A
INT09 – SECONDA FASE A Qui viene acquisito lo scan code e si determina quale evento ha causato la chiamata della INT09: tasto premuto (bit più significativo=0) tasto rilasciato (bit più significativo=1) LEGGI PORTA 60h BIT PIU’ SIGNIFICATIVO =0? NO (tasto rilasciato) C SI (tasto premuto) B
INT09 – OPERAZIONI PRINCIPALI B Ricordando che stiamo semplificando molto ciò che accade, in questa fase si compiono essenzialmente due operazioni: si associa un codice ASCII allo scan code si inseriscono entrambi i valori nel buffer di tastiera ASSOCIA ALLO SCAN CODE IL CODICE ASCII DEL TASTO INSERISCI SCAN CODE E CODICE ASCII NEL BUFFER DI TASTIERA C
INT09 – CONCLUSIONE C Nella fase finale non resta che avvisare il PIC del termine della routine di interrupt inviandogli il codice di End Of Interrupt INVIA EOI (20h) AL PIC (20h) IRET