Story Transcript
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). 1
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.
2
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
3
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 4
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 5
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: 6
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 0 1 2 3 4 5 6 7
Significado 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. 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. Banderín del sistema: asignado con un comando del 8042. 0 al arrancar. 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. Bit de inhibición. Este bit se actualiza siempre que se coloca un dato en el registro de salida, un 0 indica teclado inhibido. 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. Recepción fuera de tiempo. Indica si el teclado ha enviado un dato y sigue enviando más después del tiempo esperado. Error de paridad. Indica la paridad del dato recibido: 0 la correcta.
Tabla 1. Registros de Estado. 7
Comando 20h 60h AAh ABh ACh ADh AEh C0h D0h D1h E0h Fxh
Significado 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. 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. Autotest. El 8042 realiza un diagnóstico interno y coloca un 55h en el registro de salida si todo va bien. 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. 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. Inhibir teclado. Esto activa el bit 4 del byte de comando del 8042. Habilitar teclado. Esto baja el bit 4 del byte de comando del 8042. 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. 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. 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. 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. 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). 8
• 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 IRQ0
Código Dispositivo 08H Timer del sistema 9
IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15
09H 0AH 0BH 0CH 0DH 0EH 0FH 70H 71H 72H 73H 74H 75H 76H 77H
Teclado 8259 esclavo COM2/COM4 COM1/COM3 Reservada/ Tarjeta de sonido Disco flexible LPT1 Reloj de tiempo real Reservada Reservada Reservada Ratón PS/2 Coprocesador matemático Disco duro 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).
10
• 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 ACh ADh AEh COh DOh DIh EOh Fxh
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. 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. Inhibir teclado. Esto activa el bit 4 del byte de comando del 8042 Habilitar teclado. Esto baja el bit 4 del byte de comando del 8042 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. 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 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. 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 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 0 1
SIGNIFICADO 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). Reservado (escribir 0) 11
2 3 4 5 6 7
Banderín del sistema. Este bit define el bit 2 del registro de estado Ignorar inhibición: con 1 se ignorará la función de inhibir el teclado Deshabilitar el teclado: un 1 baja la línea de reloj inhibiendo la comunicación del 8042 con el teclado. Modo IBM PC. Con 1 no se traducen los códigos del teclado ni se controla la paridad. 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). Reservado (escribir 0)
Tabla 5: Bit de comandos del 8042 BIT SIGNIFICADO
BIT
SIGNIFICADO
0−3
Indefinidos
0
4
RAM del sistema. A 1 si instalada la extensión de 256 Kb
1
5 6
7
A 0 si presente el puente (o jumper) del fabricante. Tipo de pantalla. 0 si la pantalla principal es de color y 1 si es monocroma 0: el teclado ha sido bloqueado con la llave externa de la unidad central. Tabla 6: Byte recibido por el puerto de entrada.
Reset del sistema (como Ctrl−Alt−Del). 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.
2−3
Indefinidos.
4
Registro de salida lleno.
5
Registro de entrada vacío.
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 12
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 13
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 MOV CLI MOV MOV ADD CMP JB MOV CMP JE MOV MOV CMP
BX,40h DS,BX BX,DS:[1Ch] CX,BX CX,2 CX,DS:[82h] no desb CX,DS:[80h] CX,DS:[1Ah] Fin de la rutina DS:[BX],AX DS:[1Ch],CX SP,0
meter carácter AX en el buffer del teclado evitar conflictos con interrupciones puntero a la cola del buffer apuntar CX al siguiente dato más allá del fin del buffer inicio de la cola circular no desb puntero al inicio del buffer ZF = 1 −−> buffer lleno introducir carácter ASCII (AL) en el buffer actualizar puntero al final del buffer 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
1
DO NOT USE DO NOT USE ~`
2
!1
3
@2
Código Scan 1 make 00 E0_00 29 E0_29 02 E0_02 03
Código Scan 1 break 80 E0_80 A9 E0_A9 82 E0_82 83
Código Scan 2 make 00 E0_00 0E E0_0E 16 E0_16 1E
Codigo Scan 2 brake F0 00 E0_F0 00 F0 0E E0_F0 0E F0 16 E0_F0 16 F0 1E 14
4
#3
5
$4
6
%5
7
^6
8
&7
9
*8
10
(9
11
)0
12
_−
13
+=
15
Backspace
16
Tab
17
Q
18
W
19
E
20
R
21
T
22
Y
23
U
24
I
25
O
E0_03 04 E0_04 05 E0_05 06 E0_06 07 E0_07 08 E0_08 09 E0_09 0A E0_0A 0B E0_0B 0C E0_0C 0D E0_0D 0E E0_0E 0F E0_0F 10 E0_10 11 E0_11 12 E0_12 13 E0_13 14 E0_14 15 E0_15 16 E0_16 17 E0_17 18 E0_18
E0_83 84 E0_84 85 E0_85 86 E0_86 87 E0_87 88 E0_88 89 E0_89 8A E0_8A 8B E0_8B 8C E0_8C 8D E0_8D 8E E0_8E 8F E0_8F 90 E0_90 91 E0_91 92 E0_92 93 E0_93 94 E0_94 95 E0_95 96 E0_96 97 E0_97 98 E0_98
E0_1E 26 E0_26 25 E0_25 2E E0_2E 36 E0_36 3D E0_3D 3E E0_3E 46 E0_46 45 E0_45 4E E0_4E 55 E0_55 66 E0_66 0D E0_0D 15 E0_15 1D E0_1D 24 E0_24 2D E0_2D 2C E0_2C 35 E0_35 3C E0_3C 43 E0_43 44 E0_44
E0_F0 1E F0 26 E0_F0 26 F0 25 E0_F0 25 F0 2E E0_F0 2E F0 36 E0_F0 36 F0 3D E0_F0 3D F0 3E E0_F0 3E F0 46 E0_F0 46 F0 45 E0_F0 45 F0 4E E0_F0 4E F0 55 E0_F0 55 F0 66 E0_F0 66 F0 0D E0_F0 0D F0 15 E0_F0 15 F0 1D E0_F0 1D F0 24 E0_F0 24 F0 2D E0_F0 2D F0 2C E0_F0 2C F0 35 E0_F0 35 F0 3C E0_F0 3C F0 43 E0_F0 43 F0 44 E0_F0 44 15
26
P
27
{[
28
}]
29*
|\
30
Caps Lock
31
A
32
S
33
D
34
F
35
G
36
H
37
J
38
K
39
L
40
:;
41
`
42** 43 44
Enter L SHIFT
45** 46
Z
47
X
19 E0_19 1A E0_1A 1B E0_1B 2B E0_2B 3A E0_3A 1E E0_1E 1F E0_1F 20 E0_20 21 E0_21 22 E0_22 23 E0_23 24 E0_24 25 E0_25 26 E0_26 27 E0_27 28 E0_28 2B E0_2B 1C 2A E0_2A 56 E0_56 2C E0_2C 2D E0_2D
99 E0_99 9A E0_9A 9B E0_9B AB E0_AB BA E0_BA 9E E0_9E 9F E0_9F A0 E0_A0 A1 E0_A1 A2 E0_A2 A3 E0_A3 A4 E0_A4 A5 E0_A5 A6 E0_A6 A7 E0_A7 A8 E0_A8 AB E0_AB 9C AA E0_AA D6 E0_D6 AC E0_AC AD E0_AD
4D E0_4D 54 E0_54 5B E0_5B 5D E0_5D 58 E0_58 1C E0_1C 1B E0_1B 23 E0_23 2B E0_2B 34 E0_34 33 E0_33 3B E0_3B 42 E0_42 4B E0_4B 4C E0_4C 52 E0_52 5D E0_5D 5A 12 E0_12 61 E0_61 1A E0_1A 22 E0_22
F0 4D E0_F0 4D F0 54 E0_F0 54 F0 5B E0_F0 5B F0 5D E0_F0 5D F0 58 E0_F0 58 F0 1C E0_F0 1C F0 1B E0_F0 1B F0 23 E0_F0 23 F0 2B E0_F0 2B F0 34 E0_F0 34 F0 33 E0_F0 33 F0 3B E0_F0 3B F0 42 E0_F0 42 F0 4B E0_F0 4B F0 4C E0_F0 4C F0 52 E0_F0 52 F0 5D E0_F0 5D F0 5A F0 12 E0_F0 12 F0 61 E0_F0 61 F0 1A E0_F0 1A F0 22 E0_F0 22 16
48
C
49
V
50
B
51
N
52
M
53
<,
54
>.
55
?/
56*** 57
R SHIFT
58 60
L CTRL L ALT
61
Space Bar
62 64 75 76 79 80 81 83 84 85 86 89 90
R ALT R CTRL Insert Delete L Arrow Home End Up Arrow Dn Arrow Page Up Page Down R Arrow Num Lock
91 92 93 95
Numeric 7 Numeric 4 Numeric 1 Numeric /
2E E0_2E 2F E0_2F 30 E0_30 31 E0_31 32 E0_32 33 E0_33 34 E0_34 35 E0_35 73 E0_73 36 E0_36 1D 38 E0_38 39 E0_39 E0 38 E0 1D Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 45 E0_45 47 4B 4F Note 3
AE E0_AE AF E0_AF B0 E0_B0 B1 E0_B1 B2 E0_B2 B3 E0_B3 B4 E0_B4 B5 E0_B5 F3 E0_F3 B6 E0_B6 9D B8 E0_B8 B9 E0_B9 E0 B8 E0 9D Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 Note 1 C5 E0_C5 C7 CB CF Note 3
21 E0_21 2A E0_2A 32 E0_32 31 E0_31 3A E0_3A 41 E0_41 49 E0_49 4A E0_4A 51 E0_51 59 E0_59 14 11 E0_11 29 E0_29 E0 11 E0 14 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 77 E0_77 6C 6B 69 Note 3
F0 21 E0_F0 21 F0 2A E0_F0 2A F0 32 E0_F0 32 F0 31 E0_F0 31 F0 3A E0_F0 3A F0 41 E0_F0 41 F0 49 E0_F0 49 F0 4A E0_F0 4A F0 51 E0_F0 51 F0 59 E0_F0 59 F0 14 F0 11 E0_F0 11 F0 29 E0_F0 29 E0 F0 11 E0 F0 14 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 Note 2 F0 77 E0_F0 77 F0 6C F0 6B F0 69 Note 3 17
96 97 98 99 100
Numeric 8 Numeric 5 Numeric 2 Numeric 0 Numeric *
101 102 103 104 105 106 107***
Numeric 9 Numeric 6 Numeric 3 Numeric . Numeric − Numeric +
108 110
DO NOT USE Numeric Enter Esc
112
F1
113
F2
114
F3
115
F4
116
F5
117
F6
118
F7
119
F8
120
F9
121
F10
122 123 124 125
F11 F12 Print Screen Scroll Lock
126
Pause
48 4C 50 52 37 E0_37 49 4D 51 53 4A 4E 7E E0_7E E0 1C 01 E0_01 3B E0_3B 3C E0_3C 3D E0_3D 3E E0_3E 3F E0_3F 40 E0_40 41 E0_41 42 E0_42 43 E0_43 44 E0_44 57 58 Note 4 46 E0_46 Note 5
C8 CC D0 D2 B7 E0_B7 C9 CD D1 D3 CA CE FE E0_FE E0 9C 81 E0_81 BB E0_BB BC E0_BC BD E0_BD BE E0_BE BF E0_BF C0 E0_C0 C1 E0_C1 C2 E0_C2 C3 E0_C3 C4 E0_C4 D7 D8 Note 4 C6 E0_C6 Note 5
75 73 72 70 7C E0_7C 7D 74 7A 71 7B 79 6D E0_6D E0 5A 76 E0_76 05 E0_05 06 E0_06 04 E0_04 0C E0_0C 03 E0_03 0B E0_0B 83 E0_83 0A E0_0A 01 E0_01 09 E0_09 78 07 Note 4 7E E0_7E Note 5
F0 75 F0 73 F0 72 F0 70 F0 7C E0_F0 7C F0 7D F0 74 F0 7A F0 71 F0 7B F0 79 F0 6D E0_F0 6D E0 F0 5A F0 76 E0_F0 76 F0 05 E0_F0 05 F0 06 E0_F0 06 F0 05 E0_F0 05 F0 0C E0_F0 0C F0 03 E0_F0 03 F0 0B E0_F0 0B F0 83 E0_F0 83 F0 0A E0_F0 0A F0 01 E0_F0 01 F0 09 E0_F0 09 F0 78 F0 07 Note 4 F0 7E E0_F0 7E Note 5 18
Left Win Right Win Application ACPI Power ACPI Sleep DO NOT USE DO NOT USE DO NOT USE DO NOT USE
ACPI Wake
59 E0_59 5B E0_5B 5C E0_5C 5D E0_5D 5E E0_5E 5F E0_5F 60 E0_60 61 E0_61 62 E0_62 63 E0_63 64 E0_64 65 E0_65 66 E0_66 67 E0_67 68 E0_68 69 E0_69 6A E0_6A 6B E0_6B 6C E0_6C 6D E0_6D 6E E0_6E 6F
D9 E0_D9 DB E0_DB DC E0_DC DD E0_DD DE E0_DE DF E0_DF E0 E0_E0 E1 E0_E1 E2 E0_E2 E3 E0_E3 E4 E0_E4 E5 E0_E5 E6 E0_E6 E7 E0_E7 E8 E0_E8 E9 E0_E9 EA E0_EA EB E0_EB EC E0_EC ED E0_ED EE E0_EE EF
0F E0_0F 1F E0_1F 27 E0_27 2F E0_2F 37 E0_37 3F E0_3F 47 E0_47 4F E0_4F 56 E0_56 5E E0_5E 08 E0_08 10 E0_10 18 E0_18 20 E0_20 28 E0_28 30 E0_30 38 E0_38 40 E0_40 48 E0_48 50 E0_50 57 E0_57 6F
F0 0F E0_F0 0F F0 1F E0_F0 1F F0 27 E0_F0 27 F0 2F E0_F0 2F F0 37 E0_F0 37 F0 3F E0_F0 3F F0 47 E0_F0 47 F0 4F E0_F0 4F F0 56 E0_F0 56 F0 5E E0_F0 5E F0 08 E0_F0 08 F0 10 E0_F0 10 F0 18 E0_F0 18 F0 20 E0_F0 20 F0 28 E0_F0 28 F0 30 E0_F0 30 F0 38 E0_F0 38 F0 40 E0_F0 40 F0 48 E0_F0 48 F0 50 E0_F0 50 F0 57 E0_F0 57 F0 6F 19
E0_6F DBE_KATAKANA 70 E0_70 71 E0_71 72 E0_72 74 E0_74 75 E0_75 76 E0_76 DBE_SBCSCHAR 77 E0_77 78 E0_78 CONVERT 79 E0_79 DO NOT USE 7A DO NOT USE E0_7A NONCONVERT 7B DO NOT USE E0_7B DO NOT USE 7C DO NOT USE E0_7C DO NOT USE 7D DO NOT USE E0_7D DO NOT USE 7F DO NOT USE E0_7F
E0_EF F0 E0_F0 F1 E0_F1 F2 E0_F2 F4 E0_F4 F5 E0_F5 F6 E0_F6 F7 E0_F7 F8 E0_F8 F9 E0_F9 FA E0_FA FB E0_FB FC E0_FC FD E0_FD FF E0_FF
E0_6F 13 E0_13 19 E0_19 39 E0_39 53 E0_53 5C E0_5C 5F E0_5F 62 E0_62 63 E0_63 64 E0_64 65 E0_65 67 E0_67 68 E0_68 6A E0_6A 6E E0_6E
E0_F0 6F F0 13 E0_F0 13 F0 19 E0_F0 19 F0 39 E0_F0 39 F0 53 E0_F0 53 F0 5C E0_F0 5C F0 5F E0_F0 5F F0 62 E0_F0 62 F0 63 E0_F0 63 F0 64 E0_F0 64 F0 65 E0_F0 65 F0 67 E0_F0 67 F0 68 E0_F0 68 F0 6A E0_F0 6A F0 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
20