Risponderò per la tastiera del PC. All'interno della tastiera c'è un microprocessore - originariamente un 8048, oggi potrebbe essere qualsiasi cosa. I tasti sono contatti di interruttori disposti in una matrice X-Y, e il processore scansiona costantemente questa matrice, mantenendo una mappa di quali tasti sono chiusi e quali sono aperti.
Quando percepisce un nuovo tasto abbassato invia un codice seriale al PC. Per la maggior parte dei tasti è un singolo byte, ma per i tasti funzione e alcuni altri è un codice di 2 byte. Quando percepisce un tasto rilasciato che era giù in precedenza, invia lo stesso codice, ma con un ulteriore byte 0xF0. Il PC host cattura questi codici in arrivo e li usa per mantenere la sua mappa di quali tasti sono su e giù.
Nota che questi codici non corrispondono ancora a lettere ma a posizioni X-Y dei tasti. Il PC host ora li cerca nella Code Page, che ha una tabella di quali caratteri ASCII corrispondono a quali posizioni dei tasti, che a sua volta dipende dal paese in cui ti trovi e dalla lingua che parli. Il PC poi scrive il codice ASCII per ogni nuovo tasto 'giù' in un buffer di memoria dove può essere recuperato da un'applicazione.
Questi sono alcuni tipici tasti e codici chiave:
'A' - codice 0x1C; break code oxF0,0x1C
'5' - codice 0x2E; break code 0xF0, 0x2E
F10 - codice 0xE0, 0x74; break code 0x0E, 0xF0, 0x74
Right Control - codice 0xE0, 0x14; break code 0xE0, 0xF0, 0x14
Nota che quando più di un tasto ha la stessa funzione - come il '5' sulla tastiera principale e il '5' sul tastierino numerico, o i tasti shift destro e sinistro - ognuno ha i suoi specifici codici make-break così che il PC può dire quale viene premuto. Quando premi shift-5 per un segno '%', la tastiera invia ancora il codice 0x2E, ma nella mappa del PC vede che lo shift è giù e sceglie il carattere spostato dalla pagina del codice.