7.1.2 El teclado y el SO
§1 Generalidades
En el capítulo anterior hemos visto que en realidad, las rutinas de bajo nivel del teclado no informan sobre caracteres, sino de la acción de determinados interruptores hardware (las teclas) y que esta información es doble: identifica al interruptor de entre un conjunto de ellos, y el tipo de operación realizada (cerrar o abrir el circuito). A partir de este momento, la tarea de decidir que significado se da a esta información corresponde a diferentes capas de software. La primera corresponde al BIOS, que proporciona determinados servicios básicos. A partir de ahí, interviene el Sistema Operativo; finalmente los programas de aplicación reciben información del Sistema y dan su tratamiento específico a la información recibida.
Resulta evidente que en la familia de ordenadores IBM PC y compatibles, a igualdad de condiciones de entrada, el comportamiento de la primera capa, que depende del BIOS, es idéntico en todos los casos en cuanto al resultado producido. Sin embargo, a partir de la segunda, el tratamiento será distinto (aunque parecido) dependiendo del Sistema Operativo y del programa de aplicación.
§2 Servicios BIOS
La BIOS del PC atiende dos interrupciones para servicio del teclado que pueden considerarse estándar; existiendo una tercera que puede considerarse complementaria. Está prevista para que el usuario le de un significado específico:
Nm. | Descripción del servicio |
9h | Este servicio ya ha sido comentado al tratar
del funcionamiento del teclado ( La combinación Ctrl
+ Alt + Del
[1] produce un reinicio del sistema conocido como reseteo en caliente ("Hot boot" o
"Warm boot"), en el que se
suprime la fase de comprobaciones POST del BIOS ( Impresión de pantalla mediante las combinaciones Shift izq. + PtrSc o Shift izq. + *. La impresión de pantalla es un servicio BIOS servido por la interrupción 5h, y como tal puede ser invocado por cualquier programa que la necesite. En este caso, la interrupción 9h se limita a invocar dicho servicio si detecta la combinación de teclas anterior. Pausa del sistema con Pause o la combinación Ctrl + NumLk. El estado de bloqueo o pausa del sistema, es una característica de la rutina BIOS de
servicio de teclado. Cuando detecta esta combinación de teclas, la rutina activa el bit de estado
correspondiente (bit 4 a 1 Introducción directa de códigos ASCII. Esta característica del servicio es conocida como "Truco de Alt-Numérico", y permite introducir cualquier código ASCII (1 a 255) manteniendo pulsada la tecla Alt y los números del teclado numérico para introducir directamente el código decimal ASCII deseado [2] Cuando finalmente se libera la tecla Alt, la rutina BIOS calcula el valor ASCII correspondiente al número pulsado y lo deposita en el búfer de teclado como si se hubiese pulsado mediante una tecla a la que correspondiera ese símbolo. Por ejemplo, Alt + 1 - 2 - 6 es una forma rápida de introducir la tilde " ~" para los que utilizamos un teclado español (en el que no suele aparecer este carácter). |
16h | Servicios BIOS estándar de teclado. Generalmente el SO y las aplicaciones no leen los caracteres
pulsados utilizando la interrupción 9h antes aludida, sino
directamente del búfer de teclado ( Función 0h: Lee el siguiente carácter del búffer de teclado (dos octetos) y hace avanzar el índice correspondiente, lo que equivale a sacar el carácter del búfer. Función 1h: Lee el siguiente carácter del búfer (también dos octetos), pero no hace avanzar el índice, lo que equivale a que el carácter permanece en el búfer hasta que sea leído por la función 0. Función 2h: Lee los dos bytes de estado del teclado
( Los servicios anteriores son los que pueden considerarse estándar (existen en el PC-XT y en todos los miembros de la saga), pero generalmente las BIOSes actuales proporcionan otras funciones adicionales en esta interrupción: Función 3h: Puede establecer las características "Typematic" del
teclado. Es decir, la velocidad de repetición y el retardo
inicial ( Función 5h: Permite escribir directamente en el búfer de teclado como si se hubiese pulsado una tecla. Funciones 10h, 11h y 12h: Realizan respectivamente las mismas operaciones que 0h, 1h y 2h, pero ofrecen soporte para los teclados de 101/102 teclas (las funciones primitivas no disponían de esta posibilidad porque estos teclados no existían). |
1Bh | Cuando el servicio de la
interrupción 9h |
§3 El Teclado y el SO
Los detalles de funcionamiento varían, pero en general, el tratamiento de las señales del teclado es realizado por el SO mediante un mapa que asocia cada código (key-code) encontrado en el búfer de teclado, con una acción o característica determinada. De esta forma, la tarea de cambiar el "idioma" del teclado se reduce a cambiar el mapa (o parte de él).
El mapa ("Keymap") adopta la forma de una tabla que es cargada por el kernel. Posteriormente puede ser cambiada por otra, o modificada, incluso en runtime. En MS-DOS es el conocido KEYBOARD.SYS; en Linux son ficheros de nombres diversos. Posiblemente en /usr/share/kbd/keymaps/.
§4 El idioma del teclado.
La diferencia entre los teclados de distintos lenguajes es que a una misma tecla le corresponde un símbolo distinto en cada uno de ellos. Por ejemplo, el teclado inglés USA tiene los símbolos " ;"/":" en la tecla 40, situada a la derecha de la "L", mientras que el teclado español tiene una " ñ"/"Ñ " en dicha posición.
Generalmente se dice que un teclado es "Español", "Francés", "Alemán", "USA", Etc.
dependiendo de los símbolos dibujados sobre las teclas, sin embargo no existen diferencias
eléctricas. Cuando se pulsa una tecla, el teclado genera
siempre el mismo código de exploración (
7.1a) con independencia de su "Lenguaje". Por ejemplo, cuando se pulsa
la tecla 40 se genera el código 27, con independencia del símbolo ";
" o "ñ"
dibujado sobre la tecla. El hecho de aparecer un símbolo u otro en el
documento que estamos escribiendo se debe a la interpretación que hace de dicho código el Sistema Operativo.
[1] Cuando se describen pulsaciones de teclas, el símbolo + significa pulsación simultánea de las teclas indicadas.
[2] No sirven todas las teclas numéricas, deben ser precisamente las del teclado numérico independiente, por lo que la operación resulta más engorrosa en los portátiles que no disponen de este grupo de teclas. En este caso una zona del teclado normal puede ser convertida en numérica mediante la combinación Fn+NumLk. Las teclas, que suelen estar señaladas con este doble uso, son las siguientes: 7/7; 8/8; 9/9; 0//; U/4; I/5; O/6; P/*; J/1; K/2; L/3 y ;/-