Informática
Teclado
EL TECLADO
RESEÑA HISTORICA
Los teclados de ordenador tienen su ascendiente directo en los teclados de máquinas de escribir. En concreto, la disposición QWERTY se remonta al año 1868 en que fue patentada por Christopher Sholes. En 1873 vendió la patente a Remington, que fue la primera máquina de escribir con éste tipo de teclado (las primeras no disponían de teclado como tal, sino de ruedas y otros artificios para introducir los caracteres).
Existen varias teorías sobre el porqué de la disposición QWERTY, incluyendo las que sostienen que fue un intento deliberado de hacer difícil teclear los caracteres más frecuentes, de modo que los mecanógrafos no las atascaran (cosa muy frecuente en las antiguas máquinas de escribir mecánicas, si se escribía demasiado rápido). Algunos sostienen que este diseño es poco funcional, razón por la que se han ideado otras disposiciones. El teclado Dvorak es uno de estos diseños fundamentado en consideraciones ergonómicas
1. INTRODUCCION.
La familia de procesadores 80x86, presente en el IBM PC, utiliza la arquitectura Von Neumann (figura 1). El denominado bus del sistema conecta las diferentes partes de una maquina Von Neumann, y en la familia 80x86, se diferencian 3 clases de buses:
a) Bus de datos.- Existen de 8, 16, 32 o 64 bits dependiendo del modelo (64 bits para los Pentium de última generación). El número de bits se usa, en general, para determinar el tamaño del procesador.
b) Bus de direcciones.- Para poder conectar la CPU con la memoria y con los dispositivos de entrada/salida.
c) Bus de control.- Para enviar señales que determinan como se comunica la CPU con el resto del sistema (por ejemplo, las líneas de lectura (read) y escritura (write) especifican que es lo que se esta haciendo en la memoria)
Figura 1. Arquitectura básica de una maquina Von Neumann.
Por tanto los dispositivos de E/S son una parte fundamental del computador y tienen velocidades muy diferentes, lentas (como el teclado o ratón), de velocidad media (como una impresora) y rápidas (como los discos duros).
Para homogenizar las velocidades de los dispositivos de E/S con la del CPU se crearon circuitos de interfaz. Tenemos dos tipos de conexiones con los dispositivos:
a) Conexión mapeada.
b) Conexión mediante puertos especiales de E/S.
La PC IBM usa la conexión mediante puertos especiales de E/S. En este computador existen 2 espacios de direcciones que son para la memoria y para los dispositivos de E/S.
El bus de direcciones para la E/S es siempre de 16 bits. Entonces el microprocesador puede direccionar hasta 65536 diferentes localizaciones especiales, suficiente para varios dispositivos. Hay 2 espacios de direcciones pero un solo bus de direcciones, por eso las líneas de control son las que deciden a que espacio estamos accediendo en cada momento (figura 2).
Entonces, la memoria y los dispositivos de E/S, comparten el bus de datos y los primeros 16 bits del bus de direcciones.
Figura 2. Interfaces de entrada/salida.
Existen 3 formas de realizar la E/S en un dispositivo:
Por encuesta.- El CPU sondea periódicamente el dispositivo para ver su estado. Esta forma de análisis es sencilla pero ineficiente ya que se pierde tiempo, y el mismo esta sujeto a la velocidad de procesador.
Por interrupciones.- El dispositivo es quien establece el momento en que se realiza la transferencia de datos. En la familia 80x86 existen 3 tipos de interrupciones. Las traps (invocadas por el usuario mediante software), las excepciones (traps generados automáticamente por alguna condición excepcional ejemplo, división por cero), y interrupciones hardware (se basa en un evento hardware externo al CPU, no tiene nada que ver con las instrucciones que se realicen en ese momento).
Por acceso directo a la memoria.- El dispositivo opera directamente sobre la memoria, siempre y cuando la CPU le otorgue el permiso para hacerlo.
En la E/S por interrupciones, todos los dispositivos se conectan al controlador programable de interrupciones o PIC, quien establece prioridad entre las interrupciones y se conecta con la CPU. Denominado genéricamente como Controlador 8259 acepta interrupciones de hasta 8 dispositivos, si cualquier dispositivo pide servicio, el 8259, se conectara con la CPU y le pasara un vector de interrupción programable. Actualmente la mayoría de computadores tienen 2 PICs (figura 3).
Figura 3. Esquema de conexión de los PICs.
El ordenador, manda y recibe la información del periférico que necesita para comunicarse con él, (una serie de señales y símbolos), siendo único para cada marca y modelo de periférico. El principal problema en la conexión de los periféricos con la CPU es el de compatibilizar las características entre periféricos y CPU, para solucionarlo se usan los Controladores de Periféricos.
Los objetivos de un controlador son:
a) Selección o direccionamiento del periférico.- La CPU sitúa en el bus de direcciones la dirección del puerto con el que quiere comunicarse.
b) Almacenamiento temporal.- El controlador dispone de uno o varios puertos de datos para almacenar temporalmente los datos a transferir.
c) Sincronización.- La velocidad a la que opera la CPU es muy superior a la de un periférico.
d) Control del periférico.- La CPU debe ser capaz de interrogar al controlador para conocer su estado o enviar órdenes.
e) Conversión de datos.- Consiste en la adaptación de las características eléctricas y lógicas de las señales empleadas por el dispositivo de E/S y el bus.
f) Detección de errores.- Las transferencias de datos son operaciones sensibles a sufrir errores. En el controlador se realizan funciones como inclusión/detección de paridad.
g) Gestión de transmisión de bloques de información.- Existen periféricos que intercambian información mediante un conjunto de palabras y no con palabras aisladas.
En los primeros ordenadores la CPU controlaba las operaciones elementales de E/S. Con el tiempo y para descargar a la CPU de estas funciones, las operaciones de E/S las realizan los controladores, siendo éstos cada vez más complejos (algunos incluyen memoria y un procesador para uso exclusivo de operaciones de E/S).
2. EL TECLADO.
Un teclado de computadora es un periférico, físico o virtual (por ejemplo teclados en pantalla o teclados láser), utilizado para la introducción de órdenes y datos en una computadora (es la principal vía de entrada de comandos). Tiene su origen en los teletipos y las máquinas de escribir eléctricas, que se utilizaron como los teclados de los primeros ordenadores y dispositivos de almacenamiento (grabadoras de cinta de papel y tarjetas perforadas).
Esta unido al PC por un conector de 5 contactos, por el que circulan la señal del reloj, la de datos y las señales de referencia. La comunicación con la PC es de tipo serie.
El teclado multifunción II refleja y estandariza el teclado moderno con cuatro bloques diferenciados:
a) Teclado principal.- Contiene los caracteres alfabéticos, numéricos y especiales, como en una maquina de escribir convencional.
b) Teclado numérico.- es habitual que las teclas correspondientes a los dígitos decimales, signos de operaciones básicos y punto decimal están repetidas para facilitar al usuario la introducción de datos numéricos.
c) Teclado de gestión de imagen o de control.- Sobre la pantalla se visualiza una marca o cursor indicador de posición. El cursor indica la posición donde aparecerá el siguiente carácter que tecleemos. Las teclas de posición de imagen permiten modificar la posición del cursor en la pantalla.
d) Teclas de función.- Normalmente distribuidas en una hilera en la parte superior del teclado. Son teclas cuyas funciones están definidas por el usuario o predefinidas para una aplicación, por ejemplo F8.
Básicamente, IBM ha soportado 3 tipos de teclados físicos:
El primero de éstos apareció en 1981, tenía 83 teclas, fue denominado XT, usaban es Scan Code set 1, unidireccionales y no eran muy ergonómicos, eran unidireccioales ahora está obsoleto (Figura 4).
En 1984 apareció el teclado PC/AT con 84 teclas (una más al lado de SHIFT IZQ), ya es bidireccional, usa el Scan Code set 2 y al igual que el anterior cuenta con un conector 5-pin DIN (Figura 4).
En 1987 IBM desarrolló el MF-II (Multifunción II o teclado extendido) a partir del AT. Sus características son que usa el mismo interfaz que el AT, añade muchas teclas más, se ponen leds y soporta el Scan Code set 3, aunque usa por defecto el 2. De este tipo hay dos versiones, la americana con 101 teclas y la europea con 102 (Figura 4).
-
Los teclados PS/2 son básicamente iguales a los MF-II. Las únicas diferencias son el conector (mini-DIN de 6 pin) más pequeño que el AT y más comandos, pero la comunicación es la misma, usan el protocolo AT.
Teclado AT
Teclado XT
Teclado MF-II
Figura 4. Tipos de teclados.
Existen distintos tipos de pulsadores de teclas (Mecánicos, de laminas, de bovedilla, capacitivo, de efecto hall, etc.) Aquí definimos algunos:
Tipo resorte. Cuenta con un contacto metálico, con un resorte que hace retornar luego de la presión. Generalmente son muy resistentes y duraderos, ya que los contactos metálicos se limpian automáticamente. Más caros, más "duros" al tacto.
Tipo membrana. Consisten de una membrana en cuya superficie se encuentra una superficie conductora. En la placa, existen láminas de contacto aisladas. Cuando entran en contacto con la superficie conductora de la tecla presionada, se cierra el circuito. Son más baratos, más suaves y más frágiles.
3. LOS CONECTORES DEL TECLADO
Los primeros teclados, XT de 83 teclas; AT de 84, y algunos extendidos de 101/102 teclas, utilizan un conector DIN de 5 patillas con el macho del lado del teclado y la hembra del lado de la placa-base. Salvo en algunos modelos de IBM el cable está sólidamente unido al teclado.
La introducción del PS/2 de IBM inauguró la moda de utilizar conectores mini DIN para teclados y ratones. La tendencia actual es utilizar conectores USB para ambos dispositivos de entrada. Más recientemente se está extendiendo la moda de dispositivos inalámbricos ("Wireless"). Esto no significa que tales modelos no utilicen el conector de teclado; lo que en realidad desaparece es el cable entre el dispositivo que se conecta al conector del PC y el propio teclado. La moda comenzó con los de enlace infrarrojo, pero actualmente casi todos son de radio-frecuencia (figura 5)
Adaptador USB/mini-DIN
Figura 5. Tipos de conectores y señales.
4. EL CHIP DEL TECLADO
Muchos ordenadores llevan en su interior el Chip 8048, 8049 o similares fabricados por Intel. Consta de unos 2Kb de memoria ROM y 128 bytes de RAM (Las 8 primeras posiciones son empleadas como registros) Este procesador se encarga de detectar la pulsación de las teclas, generando unos bytes que las identifican y enviándolos a continuación por el cable a través de un protocolo de comunicación en serie que en el AT consta de 11 bits por cada dato (1 de inicio, 8 de datos, 1 de paridad y otro de stop) y 9 en los XT (entre otras razones, porque no se controla la paridad).
Los teclados de AT y de XT generan códigos diferentes para las mismas teclas. Además, al soltar una tecla, los teclados de XT generan el mismo código que al pulsarla pero con el bit 7 activo; sin embargo, en AT se generan dos códigos que se envían consecutivamente (0F0h y después el mismo código que al pulsarla). El teclado se encarga de repetir los códigos de una tecla cuando ésta lleva cierto tiempo pulsada, en el conocido mecanismo autorepeat de la mayoría de los teclados. Muchos teclados tienen debajo un interruptor que permite seleccionar su modo de funcionamiento (XT o AT). El teclado tiene algunos registros, dos de ellos son accesibles desde el exterior:
a) Registro de Estado: Contiene información acerca del interfase.
b) Registro de Datos: Si en la memoria interna del teclado hay pulsaciones registradas, en este registro se guarda una copia del SCAN CODE correspondiente a la primera que se pulsó.
Chip 8048. Fabricado por NEC.
5. CODIGO SCAN
Los códigos que envía el teclado, y que llegan a la CPU a través del controlador de teclado, no son los correspondientes al código ASCII que devuelven las interrupciones del ROM BIOS. Son unos códigos particulares del teclado llamado SCAN CODE. El teclado no tiene información sobre qué tecla se encuentra en cada intersección de la matriz (si es una `a' o un `;'). La interfaz identifica la posición de la tecla en el teclado, y se la indica a la CPU por medio del SCAN CODE. Los SCAN CODE están asociados a posiciones del teclado. Es la propia CPU la que convierte un SCAN CODE del teclado en un código ASCII correspondiente a un carácter, y lo hace por medio de las rutinas de interrupción que son invocadas cuando el controlador de teclado genera una petición de interrupción. Estas rutinas leen el dato del controlador de teclado (el SCAN CODE) y lo convierten a código ASCII según una tabla interna (en caso de que sea un carácter del código ASCII; si se trata de teclas mudas, como la tecla Ctrl o Alt, se genera también un código, aunque no sea ASCII). Esto permite que una tecla situada en una posición determinada se traduzca como un código ASCII u otro, según el PC esté configurado para un idioma u otro (es el caso de la tecla `ñ' del teclado español, que en teclados para otros idiomas tiene un carácter distinto: el código scan que envía el teclado es el mismo en todos los teclados, son las rutinas de interrupción las que deciden que sea una `ñ' u otro carácter).
Hay códigos scan de dos tipos: los códigos make y los códigos break. Los primeros se generan cuando se pulsa una tecla, y los segundos cuando se suelta. Esto permite que el PC pueda saber cuándo se pulsan dos teclas a la vez. Por ejemplo, si se recibe el código make de la tecla mayúsculas y luego el código make de la “a”, el PC deduce que se debe generar una “A”. Más adelante se recibirán el código break de la “a” y el código break de la tecla “mayúsculas”, al ser soltada cada una de ellas. Como observación, el código scan de la “a” y el de la “A” es el mismo, puesto que para ambas se pulsa la misma tecla. Lo que cambia es que, en el caso de la “A”, además, se pulsa la tecla “mayúsculas”. En general, el código make de una tecla es único, independientemente de cuántos caracteres tenga dibujados encima. Lo que distingue entre unos y otros son los códigos adicionales de teclas de modificación que se reciben (mayúsculas, Ctrl, Alt...). Lo mismo ocurre para los códigos break. Para facilitar la conversión entre códigos make y códigos break, éstos se establecen de forma que para obtener el código break correspondiente a un código make únicamente hay que sumar al código make 128 (80h), por lo que los códigos make tienen el bit más significativo a 0 y los códigos break a 1.
6. FUNCIONAMIENTO.
El funcionamiento del teclado es básicamente el siguiente:
Cada tecla se encuentra en el cruce entre un hilo vertical y un hilo horizontal en la denominada matriz de hilos. Los hilos verticales y los horizontales no se tocan en estado de reposo, están a distinta altura. Cuando se pulsa una tecla, se establece un contacto entre el hilo vertical y el horizontal que forman el cruce en el que se encuentra la tecla, produciéndose un cambio de corriente (figura 6).
El chip del teclado (microcontrolador 8048, 8049 o 8051) está constantemente muestreando la matriz para detectar cuándo se ha producido un contacto entre un hilo vertical y uno horizontal, señal de que se ha pulsado una tecla. A partir del hilo vertical y el horizontal involucrados en el contacto, el chip de teclado reconoce la tecla que se ha pulsado.
Cuando el chip del teclado reconoce que se ha pulsado una tecla, con el programa interno que tiene grabado en su respectiva ROM, calcula el código correspondiente a la tecla pulsada (cada ubicación tiene un código especifico). El código generado se llama KSCAN (Keyboard Scan Code).
Figura 6. Comunicación con el ordenador.
Luego de localizar el código, se dispone a enviarlo al sistema. Primero pasa por el controlador de teclado que se encuentra en la PC. Se encarga de recibir los datos en formato serie, convertirlos a formato paralelo, y solicitar una interrupción a la CPU para que los lea a través del bus del sistema. En los PC XT el controlador de teclado era un simple interfaz serie, capacitado únicamente para recibir datos del teclado. A partir del PC AT se incluye un controlador más sofisticado, como el 8042, o el 8741 ó 8742, más modernos. De esta manera, el controlador de teclado puede llevar a cabo algunas funciones más que en el PC XT. Por ejemplo, a partir del AT es posible, además de recibir los códigos KSCAN del teclado, enviarle información (por ejemplo: comandos).
El Controlador del teclado, convierte propiamente el código KSCAN a SCAN CODE (código de 8 bits), con el programa que tiene en su ROM. La interrupción solicitada, se realiza a través del controlador de interrupciones 8259 o PIC, el que recibe las peticiones de interrupción de todos los periféricos del sistema y se las pasa de una en una a la CPU. En la arquitectura PC, el interface de teclado está conectado a la línea llamada IRQ1 del PIC. Como se puede (ver la Figura 6), la “lógica de petición de interrupciones” conecta con el PIC, (ver la Figura 8), la “lógica de petición de interrupciones” viene dada en parte por el “Output Buffer” o buffer de salida.
Figura 7. Estructura y funcionamiento del teclado.
El CPU a través del denominado “Vector 9”, se comunica con la BIOS. Cada vez que se pulsa una tecla se genera un código de interrupción y la rutina de servicio almacena el código de la tecla pulsada en un buffer de memoria cíclico situada en el área de datos del BIOS. El código de la tecla se obtiene leyendo dos veces el puerto 60h del controlador del teclado, obteniéndose el código SCAN, y el código ASCCI siempre y cuando no sean teclas especiales (F1,F2,…, F12, Shift, Cursor, etc.) en cuyo caso se devolvería 0 (figura 7).
7. EL CONTROLADOR DEL TECLADO
En los AT hay un circuito integrado encargado de interpretar los datos procedentes del teclado y, después de traducirles adecuadamente para compatibilizar con los XT si así ha sido programado, enviarles a la CPU: el 8042 de Intel. También sirve de intermediario a las transmisiones de datos de la CPU al teclado, que en el AT es un periférico bidireccional que puede recibir comandos para configurar los LEDs, entre otras tareas. El 8042 se comporta como una interfase de periférico programable: “permite implementar interfaces a medida para distintos periféricos”. Dispone de 2Kb de memoria ROM, 128Kb de memoria RAM, 2 puertos de entrada programable de E/S de 8 bits, contador interno de 8 bits, reloj de 12 Mhz y otras señales de control y especiales.
Chip 8042. Fabricado por Megatrends Inc.
Cuando el 8042 recibe un byte entero del teclado, inhibe la comunicación hasta que la CPU lo acepta. Si el dato se recibe con error de paridad, automáticamente el 8042 lo solicita de nuevo al teclado enviando un comando de reenvío al mismo y un byte 0FFh a la CPU indicando esta circunstancia, activando también el bit 7 del registro de estado del 8042. Además, chequea que no pasen más de 2 milisegundos durante la recepción: si se excede este límite se envía también un 0FFh a la CPU y se activa el bit 6 en el registro de estado. Cuando la CPU envía algo al teclado, el 8042 inserta el bit de paridad automáticamente. Si el teclado no empieza la comunicación en menos de 15 milisegundos o tarda en recibir el dato más de 2 milisegundos, se envía un 0FEh a la CPU y se activa el bit 5 en el registro de estado.
Además, el teclado ha de responder a todas las transmisiones con un byte de reconocimiento, si en esta operación hay un error de paridad se activarán los bits 5 y 7 en el registro de estado; si tarda más de 25 milisegundos en responder también se envía el byte 0FEh a la CPU y se activan los bits 5 y 6 del registro de estado.
(figura 8).
Figura 8. Esquema de los registros del controlador del teclado.
La comunicación teclado-CPU puede ser inhibida por hardware por medio de la llave que incorpora la unidad central, aunque la comunicación CPU-teclado sigue habilitada. El 8042 se apoya en tres registros básicos: uno de estado, uno de salida y otro de entrada. El registro de estado, del que ya se ha explicado parte de su funcionalidad, se encuentra en el puerto de E/S 64h y puede ser leído en cualquier momento.
El registro de salida está ubicado en el puerto 60h y es de sólo lectura; el 8042 lo usa para enviar los códigos de las teclas a la CPU y los bytes de datos de los comandos que los soliciten. Debería ser leído sólo cuando el bit 0 del registro de estado está activo. El registro de entrada del 8042 es de sólo escritura y puede ser accedido por los puertos 60h y 64h según que lo que se quieran enviar sean datos o comandos al 8042, respectivamente; los datos serán reenviados por el 8042 hacia el teclado a menos que el propio 8042 esté esperando un dato de la CPU a consecuencia de un comando previo enviado por ésta. Los datos deben ser escritos en este registro sólo cuando el bit 1 del registro de estado esté inactivo. En el cuadro 2 se listan los comandos que admite el 8042 (enviados al puerto 64h). Debe darse cuenta el lector de la particularidad de que los registros de salida y entrada son accedidos por el mismo puerto (60h), siendo la lectura y escritura las que seleccionan el acceso a uno u otro respectivamente.
Figura 9. Conexión del controlador del teclado con el puerto AT.
Bit | Significado |
0 | Registro de salida lleno. Un 1 indica que el 8042 ha colocado un dato en el registro de salida y la CPU aún no lo ha leído. Este bit se pone a 0 cuando la CPU lee el puerto 60h. |
1 | Registro de entrada lleno. Un 1 significa que ha sido colocado un dato en el registro de entrada y el 8042 aún no lo ha leído. |
2 | Banderín del sistema: asignado con un comando del 8042. 0 al arrancar. |
3 | Comando/dato. Se pone a 1 o a 0 al enviar algo al puerto 60h o al 64h respectivamente: de esta manera, el 8042 sabe si lo que se le envía son órdenes o datos (órdenes = 1). Ambos puertos conectan con el registro de entrada. |
4 | Bit de inhibición. Este bit se actualiza siempre que se coloca un dato en el registro de salida, un 0 indica teclado inhibido. |
5 | Transmisión fuera de tiempo. Indica que la transmisión de un dato hacia el teclado no ha sido respondida en los márgenes de tiempo adecuados. |
6 | Recepción fuera de tiempo. Indica si el teclado ha enviado un dato y sigue enviando más después del tiempo esperado. |
7 | Error de paridad. Indica la paridad del dato recibido: 0 la correcta. |
Tabla 1. Registros de Estado.
Comando | Significado |
20h | Leer el byte de comando del 8042 (ver cuadro 3). Esta orden envía al registro de salida (en el puerto 60h) dicho byte para que sea leído. |
60h | Escribir el byte de comando del 8042. El siguiente byte que se envíe al registro de entrada (puerto 60h) será el byte de comando del 8042. |
AAh | Autotest. El 8042 realiza un diagnóstico interno y coloca un 55h en el registro de salida si todo va bien. |
ABh | Test del interface. El controlador chequea las líneas de reloj y datos devolviendo: 0 si no hay errores; 1: el reloj está demasiado en bajo, 2: está demasiado en alto; 3: la línea de datos está demasiado en bajo y 4: la línea de datos está demasiado en alto. |
ACh | Volcado de diagnóstico. Envía al registro de salida, sucesivamente, 16 bytes de la RAM del 8042, el estado de los registros de entrada y salida y la palabra de estado del controlador. |
ADh | Inhibir teclado. Esto activa el bit 4 del byte de comando del 8042. |
AEh | Habilitar teclado. Esto baja el bit 4 del byte de comando del 8042. |
C0h | Leer el puerto de entrada (véase cuadro 4). Esto obliga al 8042 a leer el puerto de entrada y colocar lo que lee en el registro de salida; sólo ha de emplearse este comando cuando el registro de salida está vacío. |
D0h | Leer el puerto de salida. El 8042 lee el puerto de salida y lo coloca en el registro de salida; sólo debe emplearse este comando si el registro es vacío. |
D1h | Escribir el puerto de salida (ver cuadro 5). El siguiente byte que se envíe al registro de entrada (puerto 60h) se colocará en el puerto de salida. |
E0h | Leer entradas de testeo. El 8042 coloca en el registro de salida los bits de reloj (bit 0) y datos (bit 1) para permitir la comunicación directa con el teclado. |
Fxh | Los bits 0 al 3 de este comando se relacionan con los bits 0 al 3 del puerto de salida del 8042; un 0 indica bit pulsado durante 6 microsegundos (apróx.) y un 1 que el bit no resulta modificado; ¡cuidado con el reset!. |
Tabla 2. Comandos del 8042.
8. EL CONTROLADOR DE INTERRUPCIONES.
El PIC 8259 puede aceptar hasta ocho señales de interrupción independientes (vectores), numeradas del 0 al 7 (16 en la PCs actuales “2 PICs”). Las entradas de señales de interrupción al 8259 están alambradas en el bus de control así que cualquier dispositivo conectado al bus puede acceder a este mecanismo de interrupción. En el bus de control, las señales se llaman IRQ0 hasta IRQ15 (figura 10).
-
-CS: Habilita la comunicación con la CPU.
-
-WR: Permite al 8259 aceptar comandos de la CPU.
-
-RD: Permite al 8259 dejar la información en el bus de datos.
-
D7...D0: Bus de datos bidireccional, por el que se transmite la información de control/estado y el número de vector de interrupción.
-
CAS0..CAS2: Líneas de cascada, actúan como salida en el 8259 maestro y como entrada en los 8259 esclavos, en un sistema con varios 8259 interconectados, constituyendo un bus local.
-
-SP/-EN: Pin de doble función: en el buffered mode del 8259 actuará como -EN, para habilitar los buffers del bus; en el modo normal indicará si el 8259 es maestro o esclavo (-SP).
-
INT: Conectado a la patilla INT de la CPU para producir la interrupción cuando llegue el momento.
-
IR0...IR7: Líneas asíncronas de petición de interrupción. Una petición de interrupción se ejecuta manteniendo IR en alto hasta que se recibe el reconocimiento (modo por flancos) o simplemente poniendo en alto la línea IR (modo por niveles).
-
-INTA: Línea de reconocimiento de interrupción, por medio de esta línea se fuerza al 8259 a depositar en el bus la información del vector de interrupción. INTA es independiente de -CS.
-
A0: En conjunción con -CS, -WR y -RD es empleada para enviar las palabras de comando al 8259 y para solicitar información al mismo. Suele ir conectada a la línea A0 de la CPU.
Chip Intel 8259
Figura 10. Circuito del controlador de interrupciones.
El funcionamiento del 8259 varía ligeramente en función del sistema en que esté instalado, según sea este un 8086 o un 8080/8085. Veremos primero el caso del 8086:
Una o más líneas IR son activadas por los periféricos, lo que pone a 1 el correspondiente bit del IRR.
El 8259 evalúa la prioridad de estas interrupciones y solicita la interrupción a la CPU (línea INT) si es necesario.
Cuando la CPU reconoce la interrupción, envía la señal -INTA.
Nada más recibida la señal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupción de mayor prioridad (la que va a ser procesada) en el ISR y lo borra en el IRR. En este ciclo, el 8259 aún no controla el bus de datos.
Cuando la CPU envía un segundo ciclo -INTA, el 8259 deposita en el bus de datos un valor de 8 bits que indica el número de vector de interrupción del 8086, para que la CPU lo pueda leer.
En el modo AEOI del 8259, el bit de la interrupción en el ISR es borrado nada más acabar el segundo pulso -INTA; en caso contrario, ese bit permanece activo hasta que la CPU envíe el comando EOI al final de la rutina que trata la interrupción (caso más normal).
En el caso de sistemas basados en el 8080/8085, el funcionamiento es idéntico hasta el punto (3), pero a continuación sucede lo siguiente: 4) Nada más recibida la señal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupción de mayor prioridad (la que va a ser procesada) en el ISR y lo borra en el IRR. En este ciclo, el 8259 deposita en el bus de datos el valor 11001101b, correspondiente al código de operación de la instrucción CALL del 8080/85.
Esta instrucción CALL provoca que la CPU envíe dos pulsos -INTA.
El 8259 utiliza estos dos pulsos -INTA para depositar en el bus de datos, sucesivamente, la parte baja y alta de la dirección de memoria del ordenador de la rutina de servicio de la interrupción (16 bits).
Esto completa la instrucción CALL de 3 bytes. En el modo AEOI del 8259, el bit de la interrupción en el ISR es borrado nada más acabar el tercer pulso -INTA; en caso contrario, ese bit permanece activo hasta que la CPU envíe el comando EOI al final de la rutina que trata la interrupción.
Si en el paso (4), con ambos tipos de microprocesador, no está presente la petición de interrupción (por ejemplo, porque ha sido excesivamente corta) el 8259 envía una interrupción de nivel 7 (si hubiera un 8259 conectado en IR7, las líneas CAS permanecerían inactivas y la dirección de la rutina de servicio de interrupción sería suministrada por el 8259 maestro).
Entrada al 8259 | Código | Dispositivo |
IRQ0 | 08H | Timer del sistema |
IRQ1 | 09H | Teclado |
IRQ2 | 0AH | 8259 esclavo |
IRQ3 | 0BH | COM2/COM4 |
IRQ4 | 0CH | COM1/COM3 |
IRQ5 | 0DH | Reservada/ Tarjeta de sonido |
IRQ6 | 0EH | Disco flexible |
IRQ7 | 0FH | LPT1 |
IRQ8 | 70H | Reloj de tiempo real |
IRQ9 | 71H | Reservada |
IRQ10 | 72H | Reservada |
IRQ11 | 73H | Reservada |
IRQ12 | 74H | Ratón PS/2 |
IRQ13 | 75H | Coprocesador matemático |
IRQ14 | 76H | Disco duro |
IRQ15 | 77H | Reservada |
Tabla 3. Peticiones de ininterrupción.
9. COMUNICACIÓN DE LA CPU CON EL TECLADO.
El teclado del AT es bidireccional y admite comandos por parte del ordenador. Estudiaremos ahora cuáles son esos comandos. En primer lugar, tras el arranque del ordenador y al recibir la alimentación el teclado, éste realiza un autotest denominado BAT (Basic Assurance Test) donde chequea su ROM, RAM y enciende y apaga todos los LEDs. Esta operación emplea entre 600 y 900 milisegundos; al acabar el BAT y cuando sea posible establecer la comunicación con el ordenador (líneas de reloj y datos en alto) envía un byte 0AAh si todo ha ido bien y un 0FCh si ha habido fallos; inicializando después los parámetros de auto repetición de las teclas.
El teclado tiene un buffer interno con capacidad para 17 bytes (unas 8 teclas) con objeto de almacenar las últimas teclas pulsadas cuando no puede enviarlas al 8042. Cuando este buffer se llena, su última posición (17ª) se rellena con 0 y se ignoran las siguientes pulsaciones.
Los comandos al teclado pueden ser enviados en cualquier momento al puerto 60h: a menos que el 8042 esté esperando por un byte de datos en el registro de entrada, como consecuencia de un comando previo, redireccionará todo lo que se le envíe por el puerto 60h hacia el teclado. El teclado responderá en menos de 20 milisegundos, devolviendo una señal de reconocimiento por medio de un byte 0FAh. Los principales comandos (diferenciados de los datos por tener el bit 7 activo) son:
-
Reset (0FFh): Al recibirlo envía una señal de reconocimiento y se asegura de que la CPU se de por enterada poniendo en alto las líneas de reloj y datos un mínimo de 500 microsegundos; el teclado permanece inhibido hasta que la CPU acepta la señal de reconocimiento o envía otro comando que sobrescribe y anula éste. Llegados a este punto, el teclado ejecuta de nuevo el BAT, estableciendo valores por defecto para la auto repetición y limpiando su registro de salida.
-
Reenvío (0FEh): El sistema puede enviar este comando al teclado cuando detecta un fallo en la recepción desde el teclado. Este comando sólo puede ser enviado después de una transmisión del teclado y antes de habilitar la comunicación para la siguiente recepción. El teclado responde enviando de nuevo el dato anterior (si ya era un 0FEh, el último dato que envió que no fuera 0FEh).
-
Establecer valores por defecto (0F6h): Devuelve la auto repetición a los valores habituales, limpia su registro de salida y continúa rastreando las teclas si no estaba inhibido; es una especie de reset en caliente.
-
Establecer valores por defecto y parar (0F5h): Similar al comando anterior, pero dejando de rastrear las teclas y permaneciendo inhibido hasta recibir más instrucciones.
-
Habilitar (0F4): Reanuda el funcionamiento interrumpido por el comando anterior o algún otro.
-
Establecer ratio y retardo de auto repetición (0F3h): Tras este comando debe enviarse otro inmediatamente a continuación, que se interpretará como dato, estableciendo los valores de auto repetición. De este segundo byte, el bit 7 estará siempre a cero; el valor de los bits 5 y 6, sumándole una unidad, indica el tiempo que ha de pasar desde que se pulsa una tecla hasta que comience a auto repetirse, en unidades de 0,25 segundos (±20%). Los bits 2, 1 y 0 forman un número A; los bits 4 y 3 forman otro número B; por medio de la siguiente fórmula se obtiene la tasa o ratio de auto repetición en “teclas por segundo”:
Una vez recibido este comando, el teclado envía la acostumbrada señal de reconocimiento, deja de rastrear las teclas y espera por el parámetro de auto repetición, respondiendo al mismo con otra señal de reconocimiento y volviendo a rastrear las teclas. Si en lugar de recibir el parámetro recibe otro comando (bit 7 activo) dejará inalterados los valores de auto repetición y procesará dicho comando, aunque ¡cuidado!: permanecerá inhibido hasta que se le habilite con el comando 0F4h. Por defecto, el sistema establece una tasa de 10 caracteres por segundo y 0,5 segundos de espera (parámetro 4Ch).
ABh | Test del interface. El controlador chequea las líneas de reloj y datos devolviendo: 0 si no hay errores; 1: el reloj está demasiado en bajo, 2: está demasiado en alto; 3: la línea de datos está demasiado en bajo y 4: la línea de datos está demasiado en alto. |
ACh | Volcado de diagnóstico. Envía al registro de salida, sucesivamente, 16 bytes de la RAM del 8042, el estado de los registros de entrada y salida y la palabra de estado del controlador. |
ADh | Inhibir teclado. Esto activa el bit 4 del byte de comando del 8042 |
AEh | Habilitar teclado. Esto baja el bit 4 del byte de comando del 8042 |
COh | Leer el puerto de entrada (véase cuadro 4). Esto obliga al 8042 a leer el puerto de entrada y colocar lo que lee en el registro de salida; sólo ha de emplearse este comando cuando el registro de salida está vacío. |
DOh | Leer el puerto de salida. El 8042 lee el puerto de salida y lo coloca en el registro de salida; sólo debe emplearse este comando si dicho registro está vacío |
DIh | Escribir el puerto de salida (ver cuadro 5). El siguiente byte que se envíe al registro de entrada (puerto 60h) se colocará en el puerto de salida. |
EOh | Leer entradas de testeo. El 8042 coloca en el registro de salida los bits de reloj (bit 0 y datos (bit 1) para permitir la comunicación directa con el teclado |
Fxh | Los bits 0 al 3 de este comando (la parte baja de este mismo comando) se relacionan con los bits 0 al 3 del puerto de salida del 8042; un 0 indica bit pulsado durante 6 microsegundos (apróx.) y un 1 que el bit no resulta modificado; ¡cuidado con el reset |
Tabla 4: Comandos del 8042
BIT | SIGNIFICADO |
0 | Activar la interrupción del registro de salida lleno: un 1 indica que el 8042 genere una IRQ1 (INT 9) tras colocar un dato en el registro de salida (esto es lo normal). |
1 | Reservado (escribir 0) |
2 | Banderín del sistema. Este bit define el bit 2 del registro de estado |
3 | Ignorar inhibición: con 1 se ignorará la función de inhibir el teclado |
4 | Deshabilitar el teclado: un 1 baja la línea de reloj inhibiendo la comunicación del 8042 con el teclado. |
5 | Modo IBM PC. Con 1 no se traducen los códigos del teclado ni se controla la paridad. |
6 | IBM PC compatibilidad. Un 1 selecciona la conversión de los códigos del teclado para emular los del PC y XT, traduciendo los códigos de rastreo y generando un único byte al soltar las teclas. Puesto a 1 por la BIOS antes de cargar el DOS (compatibilidad). |
7 | Reservado (escribir 0) |
Tabla 5: Bit de comandos del 8042
BIT | SIGNIFICADO | BIT | SIGNIFICADO | |
0-3 | Indefinidos | 0 | Reset del sistema (como Ctrl-Alt-Del). | |
4 | RAM del sistema. A 1 si instalada la extensión de 256 Kb | 1 | Línea A20: 0 fuerza la línea A20 de la CPU a 0, con lo que se prohíbe acceder a la memoria por encima de 1 Mb lo cual emula el direccionamiento de los PC/XT; un 1 deja que A20 la controle la CPU aunque hay PC's en que esto no basta. | |
5 | A 0 si presente el puente (o jumper) del fabricante. | 2-3 | Indefinidos. | |
6 | Tipo de pantalla. 0 si la pantalla principal es de color y 1 si es monocroma | 4 | Registro de salida lleno. | |
7 | 0: el teclado ha sido bloqueado con la llave externa de la unidad central. | 5 | Registro de entrada vacío. | |
Tabla 6: Byte recibido por el puerto de entrada. | 7 | Línea de datos (comunicación directa con el teclado). |
Tabla 7: Byte a enviar al puerto de salida.
-
No operación (0F7h a 0FDh y 0EFh al 0F2h): Son códigos reservados; el teclado al recibirlos envía la señal de reconocimiento de siempre y no realiza ninguna acción.
-
Eco (0EEh): Si el teclado recibe este comando, lo reenvía a continuación. Es una ayuda al diagnóstico.
-
Encender/apagar los LED (0EDh). Tras este comando se ha de enviar otro byte de datos, cuyos bits 0, 1 y 2 están ligados al estado de los LED de Scroll Lock, Num Lock y Caps Lock, respectivamente; los demás están reservados. Al recibir el comando envía la correspondiente señal de reconocimiento y deja de rastrear las teclas, esperando por el dato. Si en vez de un dato recibe otro comando, dejará intactos los LED, procesará dicho comando y continuará rastreando las teclas (sin quedar inhibido en esta ocasión).
En general, este será el procedimiento a seguir para cualquier comando que requiera parámetros: hay que esperar el momento adecuado para enviarlos; el LOOPNZ evita que la CPU se quede colgada si por cualquier motivo fallara el teclado o el 8042.
Como se ve, se establecen los 3 LED a la vez, aunque si sólo se desea cambiar uno habrá que consultar el estado actual de los otros en las variables de la BIOS. No obstante, este cambio es sólo puntual ya que al pulsar las teclas que actúan sobre los LED, la BIOS o el KEYB los reajustarán anulando el cambio, siendo necesario reprogramar parcialmente la interrupción del teclado si se desea evitarlo.
10. COMUNICACIÓN DEL TECLADO CON LA CPU.
Más bien cabría llamarla la comunicación “teclado con el 8042”: aunque muchos de estos códigos acaben siendo interpretados por la CPU, algunos se los queda el 8042 que siempre es el primero en enterarse. A continuación se listan los valores que el teclado puede enviar a la CPU o al 8042 en un momento dado.
-
Reenvío (0FEh): El teclado puede enviar este comando a la CPU para solicitar el reenvío cuando detecta un fallo en la recepción (normalmente de paridad) o una entrada incorrecta.
-
Reconocimiento ó ACK (0FAh): El teclado devuelve este valor cada vez que la CPU le envía algo, para indicar que lo ha recibido (excepto en el caso de los comandos Eco y Reenvío de la CPU).
-
Desbordamiento (0): Cuando la CPU intenta leer el teclado directamente sin haber códigos en el buffer del teclado (el buffer interno del propio teclado, se entiende) accederá a la posición 17ª del mismo, encontrándose este valor.
-
Fallo en el diagnóstico (0FDh): El teclado periódicamente se auto chequea y envía este código si detecta algún fallo. Si el fallo sucede durante el BAT, dejará de rastrear las teclas en espera de un comando de la CPU; en cualquier otro momento continuará rastreando las teclas.
-
Código de tecla soltada ó break code (0F0h): El teclado envía este código a la CPU para indicar que el siguiente código que enviará a continuación corresponderá a una tecla soltada. Bajo MS-DOS este código lo intercepta el 8042 y se lo oculta a la CPU, con objeto de emular el código de tecla soltada de los PC/XT.
-
BAT completado (0AAh): Después de realizar el BAT el teclado envía un 0AAh para indicar que ha salido bien, o un 0FCh (u otro valor) si ha habido fallos.
-
Respuesta al eco (0EEh): El teclado envía este valor a la CPU si ésta se lo ha enviado a él.
11. BUFFER DEL TECLADO.
Cuando se pulsa una tecla normal, la rutina que gestiona INT 9 deposita en un buffer dos bytes con su código ASCII y el código de rastreo, para cuando el programa principal decida explorar el teclado -lo hará siempre consultando el buffer-. Si el código ASCII depositado es cero ó 0E0h, se trata de una tecla especial (ALT-x, cursor, etc.) y el segundo byte indica cuál (son los denominados códigos secundarios). El código ASCII 0E0h sólo es generado en los teclados expandidos por las teclas expandidas, aunque las funciones estándar de la BIOS y del DOS que informan del teclado lo convierten en cero para compatibilizar con teclados no expandidos. Así mismo, el código ASCII 0F0h está reservado para indicar las combinaciones de ALT-tecla que no fueron consideradas inicialmente en el software de soporte de los teclados no expandidos, pero sí actualmente (de esta manera, las rutinas de la BIOS saben si deben informar de estas teclas o no según se esté empleando una función avanzada u obsoleta, para compatibilizar). En todo caso, las secuencias introducidas por medio de ALT-teclado numérico llevan asociado un código de rastreo 0, por lo que el usuario puede generar los caracteres ASCII 0E0h y 0F0h sin que se confundan con combinaciones especiales; además, según IBM, si el código ASCII 0 va acompañado de un código de rastreo 3 los programas deberían interpretarlo como un auténtico código ASCII 0 (esta secuencia se obtiene con Ctrl-2) lo que permite recuperar ese código perdido en indicar combinaciones especiales.
Es importante señalar que aunque el buffer (organizado como cola circular) normalmente está situado entre 0040h:001Eh y 0040h:003Eh, ello no siempre es así; realmente el offset del inicio y el fin del buffer respecto al segmento 0040h lo determinan las variables (tamaño palabra) situadas en 0040h:0080h y 0040h:0082h en todos los ordenadores posteriores a 1981. Por ello, la inmensa mayoría de las pequeñas utilidades de las revistas y los ejemplos de los libros son, por desgracia, incorrectos: la manera correcta de colocar un valor en el buffer -para simular, por ejemplo, la pulsación de una tecla- o extraerlo del mismo es comprobando adecuadamente los desbordamientos de los punteros teniendo en cuenta las variables mencionadas. El puntero al inicio del buffer es una variable tamaño palabra almacenada en la posición 0040h: 001Ah y el fin otra ubicada en 0040h: 001Ch. El siguiente ejemplo introduce un carácter de código ASCII AL y código de rastreo AH (es cómodo y válido hacer AH=0) en el buffer del teclado.
El valor 0 para el código de rastreo es usado para introducir también algunos caracteres especiales, como las vocales acentuadas, etc., aunque por lo general no es demasiado importante su valor (de hecho, los programas suelen comprobar preferentemente el código ASCII; de lo contrario, en un teclado español y otro francés, ¡la tecla Z tendría distinto código!). No estaría de más en este ejemplo comprobar si las variables 40h:80h y 40h:82h son distintas de cero por si el ordenador es demasiado antiguo, medida de seguridad que de hecho toma el KEYB del DR-DOS (en estas máquinas además no es conveniente ampliar el tamaño del buffer cambiándolo de sitio, por ejemplo; lo normal es que esté entre 40h:1Eh y 40h:3Eh). Los códigos secundarios: son el segundo byte (el más significativo) de la palabra depositada en el buffer del teclado por la BIOS o el KEYB.
MOV | BX,40h | meter carácter AX en el buffer del teclado |
MOV | DS,BX | |
CLI | evitar conflictos con interrupciones | |
MOV | BX,DS:[1Ch] | puntero a la cola del buffer |
MOV | CX,BX | |
ADD | CX,2 | apuntar CX al siguiente dato |
CMP | CX,DS:[82h] | más allá del fin del buffer |
JB | no desb | |
MOV | CX,DS:[80h] | inicio de la cola circular no desb |
CMP | CX,DS:[1Ah] | puntero al inicio del buffer |
JE | Fin de la rutina | ZF = 1 --> buffer lleno |
MOV | DS:[BX],AX | introducir carácter ASCII (AL) en el buffer |
MOV | DS:[1Ch],CX | actualizar puntero al final del buffer |
CMP | SP,0 | ZF=0 (SP siempre <> 0) --> buffer no lleno fin de la rutina: STI |
Tabla 8. Códigos de rastreo.
ANEXOS
1. TABLA DE CODIGOS SCAN
Ubicación de Tecla | Teclados MF-II | Código Scan 1 make | Código Scan 1 break | Código Scan 2 make | Codigo Scan 2 brake |
DO NOT USE | 00 | 80 | 00 | F0 00 | |
DO NOT USE | E0_00 | E0_80 | E0_00 | E0_F0 00 | |
1 | ~ ` | 29 | A9 | 0E | F0 0E |
E0_29 | E0_A9 | E0_0E | E0_F0 0E | ||
2 | ! 1 | 02 | 82 | 16 | F0 16 |
E0_02 | E0_82 | E0_16 | E0_F0 16 | ||
3 | @ 2 | 03 | 83 | 1E | F0 1E |
E0_03 | E0_83 | E0_1E | E0_F0 1E | ||
4 | # 3 | 04 | 84 | 26 | F0 26 |
E0_04 | E0_84 | E0_26 | E0_F0 26 | ||
5 | $ 4 | 05 | 85 | 25 | F0 25 |
E0_05 | E0_85 | E0_25 | E0_F0 25 | ||
6 | % 5 | 06 | 86 | 2E | F0 2E |
E0_06 | E0_86 | E0_2E | E0_F0 2E | ||
7 | ^ 6 | 07 | 87 | 36 | F0 36 |
E0_07 | E0_87 | E0_36 | E0_F0 36 | ||
8 | & 7 | 08 | 88 | 3D | F0 3D |
E0_08 | E0_88 | E0_3D | E0_F0 3D | ||
9 | * 8 | 09 | 89 | 3E | F0 3E |
E0_09 | E0_89 | E0_3E | E0_F0 3E | ||
10 | ( 9 | 0A | 8A | 46 | F0 46 |
E0_0A | E0_8A | E0_46 | E0_F0 46 | ||
11 | ) 0 | 0B | 8B | 45 | F0 45 |
E0_0B | E0_8B | E0_45 | E0_F0 45 | ||
12 | _ - | 0C | 8C | 4E | F0 4E |
E0_0C | E0_8C | E0_4E | E0_F0 4E | ||
13 | + = | 0D | 8D | 55 | F0 55 |
E0_0D | E0_8D | E0_55 | E0_F0 55 | ||
15 | Backspace | 0E | 8E | 66 | F0 66 |
E0_0E | E0_8E | E0_66 | E0_F0 66 | ||
16 | Tab | 0F | 8F | 0D | F0 0D |
E0_0F | E0_8F | E0_0D | E0_F0 0D | ||
17 | Q | 10 | 90 | 15 | F0 15 |
E0_10 | E0_90 | E0_15 | E0_F0 15 | ||
18 | W | 11 | 91 | 1D | F0 1D |
E0_11 | E0_91 | E0_1D | E0_F0 1D | ||
19 | E | 12 | 92 | 24 | F0 24 |
E0_12 | E0_92 | E0_24 | E0_F0 24 | ||
20 | R | 13 | 93 | 2D | F0 2D |
E0_13 | E0_93 | E0_2D | E0_F0 2D | ||
21 | T | 14 | 94 | 2C | F0 2C |
E0_14 | E0_94 | E0_2C | E0_F0 2C | ||
22 | Y | 15 | 95 | 35 | F0 35 |
E0_15 | E0_95 | E0_35 | E0_F0 35 | ||
23 | U | 16 | 96 | 3C | F0 3C |
E0_16 | E0_96 | E0_3C | E0_F0 3C | ||
24 | I | 17 | 97 | 43 | F0 43 |
E0_17 | E0_97 | E0_43 | E0_F0 43 | ||
25 | O | 18 | 98 | 44 | F0 44 |
E0_18 | E0_98 | E0_44 | E0_F0 44 | ||
26 | P | 19 | 99 | 4D | F0 4D |
E0_19 | E0_99 | E0_4D | E0_F0 4D | ||
27 | { [ | 1A | 9A | 54 | F0 54 |
E0_1A | E0_9A | E0_54 | E0_F0 54 | ||
28 | } ] | 1B | 9B | 5B | F0 5B |
E0_1B | E0_9B | E0_5B | E0_F0 5B | ||
29* | | \ | 2B | AB | 5D | F0 5D |
E0_2B | E0_AB | E0_5D | E0_F0 5D | ||
30 | Caps Lock | 3A | BA | 58 | F0 58 |
E0_3A | E0_BA | E0_58 | E0_F0 58 | ||
31 | A | 1E | 9E | 1C | F0 1C |
E0_1E | E0_9E | E0_1C | E0_F0 1C | ||
32 | S | 1F | 9F | 1B | F0 1B |
E0_1F | E0_9F | E0_1B | E0_F0 1B | ||
33 | D | 20 | A0 | 23 | F0 23 |
E0_20 | E0_A0 | E0_23 | E0_F0 23 | ||
34 | F | 21 | A1 | 2B | F0 2B |
E0_21 | E0_A1 | E0_2B | E0_F0 2B | ||
35 | G | 22 | A2 | 34 | F0 34 |
E0_22 | E0_A2 | E0_34 | E0_F0 34 | ||
36 | H | 23 | A3 | 33 | F0 33 |
E0_23 | E0_A3 | E0_33 | E0_F0 33 | ||
37 | J | 24 | A4 | 3B | F0 3B |
E0_24 | E0_A4 | E0_3B | E0_F0 3B | ||
38 | K | 25 | A5 | 42 | F0 42 |
E0_25 | E0_A5 | E0_42 | E0_F0 42 | ||
39 | L | 26 | A6 | 4B | F0 4B |
E0_26 | E0_A6 | E0_4B | E0_F0 4B | ||
40 | : ; | 27 | A7 | 4C | F0 4C |
E0_27 | E0_A7 | E0_4C | E0_F0 4C | ||
41 | “ ` | 28 | A8 | 52 | F0 52 |
E0_28 | E0_A8 | E0_52 | E0_F0 52 | ||
42** | 2B | AB | 5D | F0 5D | |
E0_2B | E0_AB | E0_5D | E0_F0 5D | ||
43 | Enter | 1C | 9C | 5A | F0 5A |
44 | L SHIFT | 2A | AA | 12 | F0 12 |
E0_2A | E0_AA | E0_12 | E0_F0 12 | ||
45** | 56 | D6 | 61 | F0 61 | |
E0_56 | E0_D6 | E0_61 | E0_F0 61 | ||
46 | Z | 2C | AC | 1A | F0 1A |
E0_2C | E0_AC | E0_1A | E0_F0 1A | ||
47 | X | 2D | AD | 22 | F0 22 |
E0_2D | E0_AD | E0_22 | E0_F0 22 | ||
48 | C | 2E | AE | 21 | F0 21 |
E0_2E | E0_AE | E0_21 | E0_F0 21 | ||
49 | V | 2F | AF | 2A | F0 2A |
E0_2F | E0_AF | E0_2A | E0_F0 2A | ||
50 | B | 30 | B0 | 32 | F0 32 |
E0_30 | E0_B0 | E0_32 | E0_F0 32 | ||
51 | N | 31 | B1 | 31 | F0 31 |
E0_31 | E0_B1 | E0_31 | E0_F0 31 | ||
52 | M | 32 | B2 | 3A | F0 3A |
E0_32 | E0_B2 | E0_3A | E0_F0 3A | ||
53 | < , | 33 | B3 | 41 | F0 41 |
E0_33 | E0_B3 | E0_41 | E0_F0 41 | ||
54 | > . | 34 | B4 | 49 | F0 49 |
E0_34 | E0_B4 | E0_49 | E0_F0 49 | ||
55 | ? / | 35 | B5 | 4A | F0 4A |
E0_35 | E0_B5 | E0_4A | E0_F0 4A | ||
56*** | 73 | F3 | 51 | F0 51 | |
E0_73 | E0_F3 | E0_51 | E0_F0 51 | ||
57 | R SHIFT | 36 | B6 | 59 | F0 59 |
E0_36 | E0_B6 | E0_59 | E0_F0 59 | ||
58 | L CTRL | 1D | 9D | 14 | F0 14 |
60 | L ALT | 38 | B8 | 11 | F0 11 |
E0_38 | E0_B8 | E0_11 | E0_F0 11 | ||
61 | Space Bar | 39 | B9 | 29 | F0 29 |
E0_39 | E0_B9 | E0_29 | E0_F0 29 | ||
62 | R ALT | E0 38 | E0 B8 | E0 11 | E0 F0 11 |
64 | R CTRL | E0 1D | E0 9D | E0 14 | E0 F0 14 |
75 | Insert | Note 1 | Note 1 | Note 2 | Note 2 |
76 | Delete | Note 1 | Note 1 | Note 2 | Note 2 |
79 | L Arrow | Note 1 | Note 1 | Note 2 | Note 2 |
80 | Home | Note 1 | Note 1 | Note 2 | Note 2 |
81 | End | Note 1 | Note 1 | Note 2 | Note 2 |
83 | Up Arrow | Note 1 | Note 1 | Note 2 | Note 2 |
84 | Dn Arrow | Note 1 | Note 1 | Note 2 | Note 2 |
85 | Page Up | Note 1 | Note 1 | Note 2 | Note 2 |
86 | Page Down | Note 1 | Note 1 | Note 2 | Note 2 |
89 | R Arrow | Note 1 | Note 1 | Note 2 | Note 2 |
90 | Num Lock | 45 | C5 | 77 | F0 77 |
E0_45 | E0_C5 | E0_77 | E0_F0 77 | ||
91 | Numeric 7 | 47 | C7 | 6C | F0 6C |
92 | Numeric 4 | 4B | CB | 6B | F0 6B |
93 | Numeric 1 | 4F | CF | 69 | F0 69 |
95 | Numeric / | Note 3 | Note 3 | Note 3 | Note 3 |
96 | Numeric 8 | 48 | C8 | 75 | F0 75 |
97 | Numeric 5 | 4C | CC | 73 | F0 73 |
98 | Numeric 2 | 50 | D0 | 72 | F0 72 |
99 | Numeric 0 | 52 | D2 | 70 | F0 70 |
100 | Numeric * | 37 | B7 | 7C | F0 7C |
E0_37 | E0_B7 | E0_7C | E0_F0 7C | ||
101 | Numeric 9 | 49 | C9 | 7D | F0 7D |
102 | Numeric 6 | 4D | CD | 74 | F0 74 |
103 | Numeric 3 | 51 | D1 | 7A | F0 7A |
104 | Numeric . | 53 | D3 | 71 | F0 71 |
105 | Numeric - | 4A | CA | 7B | F0 7B |
106 | Numeric + | 4E | CE | 79 | F0 79 |
107*** | 7E | FE | 6D | F0 6D | |
DO NOT USE | E0_7E | E0_FE | E0_6D | E0_F0 6D | |
108 | Numeric Enter | E0 1C | E0 9C | E0 5A | E0 F0 5A |
110 | Esc | 01 | 81 | 76 | F0 76 |
E0_01 | E0_81 | E0_76 | E0_F0 76 | ||
112 | F1 | 3B | BB | 05 | F0 05 |
E0_3B | E0_BB | E0_05 | E0_F0 05 | ||
113 | F2 | 3C | BC | 06 | F0 06 |
E0_3C | E0_BC | E0_06 | E0_F0 06 | ||
114 | F3 | 3D | BD | 04 | F0 05 |
E0_3D | E0_BD | E0_04 | E0_F0 05 | ||
115 | F4 | 3E | BE | 0C | F0 0C |
E0_3E | E0_BE | E0_0C | E0_F0 0C | ||
116 | F5 | 3F | BF | 03 | F0 03 |
E0_3F | E0_BF | E0_03 | E0_F0 03 | ||
117 | F6 | 40 | C0 | 0B | F0 0B |
E0_40 | E0_C0 | E0_0B | E0_F0 0B | ||
118 | F7 | 41 | C1 | 83 | F0 83 |
E0_41 | E0_C1 | E0_83 | E0_F0 83 | ||
119 | F8 | 42 | C2 | 0A | F0 0A |
E0_42 | E0_C2 | E0_0A | E0_F0 0A | ||
120 | F9 | 43 | C3 | 01 | F0 01 |
E0_43 | E0_C3 | E0_01 | E0_F0 01 | ||
121 | F10 | 44 | C4 | 09 | F0 09 |
E0_44 | E0_C4 | E0_09 | E0_F0 09 | ||
122 | F11 | 57 | D7 | 78 | F0 78 |
123 | F12 | 58 | D8 | 07 | F0 07 |
124 | Print Screen | Note 4 | Note 4 | Note 4 | Note 4 |
125 | Scroll Lock | 46 | C6 | 7E | F0 7E |
E0_46 | E0_C6 | E0_7E | E0_F0 7E | ||
126 | Pause | Note 5 | Note 5 | Note 5 | Note 5 |
59 | D9 | 0F | F0 0F | ||
E0_59 | E0_D9 | E0_0F | E0_F0 0F | ||
5B | DB | 1F | F0 1F | ||
Left Win | E0_5B | E0_DB | E0_1F | E0_F0 1F | |
5C | DC | 27 | F0 27 | ||
Right Win | E0_5C | E0_DC | E0_27 | E0_F0 27 | |
5D | DD | 2F | F0 2F | ||
Application | E0_5D | E0_DD | E0_2F | E0_F0 2F | |
5E | DE | 37 | F0 37 | ||
ACPI Power | E0_5E | E0_DE | E0_37 | E0_F0 37 | |
5F | DF | 3F | F0 3F | ||
ACPI Sleep | E0_5F | E0_DF | E0_3F | E0_F0 3F | |
DO NOT USE | 60 | E0 | 47 | F0 47 | |
DO NOT USE | E0_60 | E0_E0 | E0_47 | E0_F0 47 | |
DO NOT USE | 61 | E1 | 4F | F0 4F | |
DO NOT USE | E0_61 | E0_E1 | E0_4F | E0_F0 4F | |
62 | E2 | 56 | F0 56 | ||
E0_62 | E0_E2 | E0_56 | E0_F0 56 | ||
63 | E3 | 5E | F0 5E | ||
ACPI Wake | E0_63 | E0_E3 | E0_5E | E0_F0 5E | |
64 | E4 | 08 | F0 08 | ||
E0_64 | E0_E4 | E0_08 | E0_F0 08 | ||
65 | E5 | 10 | F0 10 | ||
E0_65 | E0_E5 | E0_10 | E0_F0 10 | ||
66 | E6 | 18 | F0 18 | ||
E0_66 | E0_E6 | E0_18 | E0_F0 18 | ||
67 | E7 | 20 | F0 20 | ||
E0_67 | E0_E7 | E0_20 | E0_F0 20 | ||
68 | E8 | 28 | F0 28 | ||
E0_68 | E0_E8 | E0_28 | E0_F0 28 | ||
69 | E9 | 30 | F0 30 | ||
E0_69 | E0_E9 | E0_30 | E0_F0 30 | ||
6A | EA | 38 | F0 38 | ||
E0_6A | E0_EA | E0_38 | E0_F0 38 | ||
6B | EB | 40 | F0 40 | ||
E0_6B | E0_EB | E0_40 | E0_F0 40 | ||
6C | EC | 48 | F0 48 | ||
E0_6C | E0_EC | E0_48 | E0_F0 48 | ||
6D | ED | 50 | F0 50 | ||
E0_6D | E0_ED | E0_50 | E0_F0 50 | ||
6E | EE | 57 | F0 57 | ||
E0_6E | E0_EE | E0_57 | E0_F0 57 | ||
6F | EF | 6F | F0 6F | ||
E0_6F | E0_EF | E0_6F | E0_F0 6F | ||
DBE_KATAKANA‡ | 70 | F0 | 13 | F0 13 | |
E0_70 | E0_F0 | E0_13 | E0_F0 13 | ||
71 | F1 | 19 | F0 19 | ||
E0_71 | E0_F1 | E0_19 | E0_F0 19 | ||
72 | F2 | 39 | F0 39 | ||
E0_72 | E0_F2 | E0_39 | E0_F0 39 | ||
74 | F4 | 53 | F0 53 | ||
E0_74 | E0_F4 | E0_53 | E0_F0 53 | ||
75 | F5 | 5C | F0 5C | ||
E0_75 | E0_F5 | E0_5C | E0_F0 5C | ||
76 | F6 | 5F | F0 5F | ||
E0_76 | E0_F6 | E0_5F | E0_F0 5F | ||
DBE_SBCSCHAR‡ | 77 | F7 | 62 | F0 62 | |
E0_77 | E0_F7 | E0_62 | E0_F0 62 | ||
78 | F8 | 63 | F0 63 | ||
E0_78 | E0_F8 | E0_63 | E0_F0 63 | ||
CONVERT‡ | 79 | F9 | 64 | F0 64 | |
E0_79 | E0_F9 | E0_64 | E0_F0 64 | ||
DO NOT USE | 7A | FA | 65 | F0 65 | |
DO NOT USE | E0_7A | E0_FA | E0_65 | E0_F0 65 | |
NONCONVERT‡ | 7B | FB | 67 | F0 67 | |
DO NOT USE | E0_7B | E0_FB | E0_67 | E0_F0 67 | |
DO NOT USE | 7C | FC | 68 | F0 68 | |
DO NOT USE | E0_7C | E0_FC | E0_68 | E0_F0 68 | |
DO NOT USE | 7D | FD | 6A | F0 6A | |
DO NOT USE | E0_7D | E0_FD | E0_6A | E0_F0 6A | |
DO NOT USE | 7F | FF | 6E | F0 6E | |
DO NOT USE | E0_7F | E0_FF | E0_6E | E0_F0 6E |
BIBLIOGRAFIA.
-
http://atc.ugr.es/docencia/udigital/
-
http://www.saludmed.com/Educ-Web/TecnoEdu/Equipo-C.html
-
http://www.monografias.com/trabajos21/partes-computadora/partes-computadora.shtml
-
http://es.wikipedia.org/wiki/Teclado_de_computadora
-
http://lv.wikipedia.org/wiki/Intel_8042
-
http://www.beyondlogic.org/keyboard/keybrd.htm
-
http://www.trucoswindows.net/foro/topico-30061-placas-madres.html
ORGANIZACIÓN Y ARQUITECTURA CPIIS
DEL COMPUTADOR
Descargar
Enviado por: | Hector Ugarte Rojas |
Idioma: | castellano |
País: | Perú |