Responderé por el teclado del PC. Dentro del teclado hay un microprocesador – originalmente un 8048, hoy en día podría ser cualquier cosa. Las teclas son contactos de interruptor dispuestos en una matriz X-Y, y el procesador escanea constantemente esta matriz, manteniendo un mapa de qué teclas están cerradas y cuáles están abiertas.
Cuando detecta una nueva tecla pulsada envía un código de serie al PC. Para la mayoría de las teclas es un solo byte, pero para las teclas de función y algunas otras es un código de 2 bytes. Cuando detecta que se ha soltado una tecla que estaba apagada anteriormente, envía el mismo código, pero con un byte 0xF0 adicional. El PC anfitrión captura estos códigos entrantes y los utiliza para mantener su propio mapa de qué teclas están arriba y abajo.
Note que estos códigos no corresponden a letras todavía sino a posiciones de teclas X-Y. El PC anfitrión los busca ahora en la Página de Códigos, que tiene una tabla de qué caracteres ASCII corresponden a qué posiciones de las teclas, lo que a su vez depende del país en el que te encuentres y del idioma que hables. El PC escribe entonces el código ASCII para cada nueva tecla «abajo» en un búfer de memoria donde puede ser recuperado por una aplicación.
Aquí hay algunas teclas y códigos de teclas típicos:
‘A’ – make code 0x1C; break code oxF0,0x1C
‘5’ – make code 0x2E; break code 0xF0, 0x2E
F10 – make code 0xE0, 0x74; break code 0x0E, 0xF0, 0x74
Control derecho – make code 0xE0, 0x14; código de ruptura 0xE0, 0xF0, 0x14
Nótese que cuando más de una tecla tiene la misma función – como el ‘5’ en el teclado principal y el ‘5’ en el teclado numérico, o las teclas de mayúsculas derecha e izquierda – cada una tiene sus propios códigos de ruptura específicos para que el PC pueda saber cuál se está presionando. Cuando se pulsa shift-5 para un signo ‘%’, el teclado sigue enviando el código 0x2E, pero en el mapa del PC’ve que el shift está abajo y elige el carácter desplazado de la página de códigos.