Está en la página 1de 4

Arquitectura de Computadoras.

Actividad 24

Tema 2. Programación orientada al hardware


Conferencia. Manejo del teclado del sistema.

Objetivo
Caracterizar el manejo del teclado PS/2 mediante interrupciones.

Bibliografía
[1] Los microprocesadores de Intel. Arquitectura, programación e interfaces. Epígrafes
10.1 y 10.2
[2] The Indispensable PC Hardware Book. Hans Peter Messmer. Capítulos 21 y 34
[3] I/O Ports and Controllers on IBM Compatibles and PS/2. EVA

Contenido

Los conceptos fundamentales que deben ser tratados y relacionados en la


actividad son: Puerto de entrada/salida, Código de rastreo, Interrupción, IRQ,
Vector de interrupción, Rutina de servicio a interrupción.
Para comenzar, se recomienda hacer uso de las siguientes preguntas:
1. En la arquitectura de Von Neumann ¿Cómo se maneja el hardware
externo desde el procesador?
2. ¿Qué son los puertos de entrada/salida?
3. ¿En qué se diferencian la entrada/salida mapeada en memoria y
mediante puertos?

En la bibliografía [1] se introducen y explican los conceptos interrupción y vector de


interrupción. Esta bibliografía está enfocada en el manejo de las interrupciones del
procesador, para ampliar el concepto con las interrupciones del hardware externo en el
PC, puede utilizarse la tabla 2.1 de la bibliografía [2] y el texto relacionado a esta.
Retomando el código para el cambio de modo de video y la lectura de caracteres, puede
ilustrarse la diferencia entre las interrupciones del software y las del hardware. Para la
asignatura y la actividad, serán interesantes solo las interrupciones 8 y 9 y el hecho que
para capturar la ocurrencia de una interrupción, deben escribirse la dirección física
adecuada en el vector correspondiente. Suponiendo que la rutina de atención que desea
utilizarse está ubicada en el segmento de código:

Universidad de las Ciencias Informáticas 1


Arquitectura de Computadoras. Actividad 24

mov ax,0
mov es,ax
mov ax,dirección_rutina
mov [es:interrupción*4],ax
mov [es:interrupción*4+2],cs
Pero ¿Cómo manejar el hardware externo una vez que se captura la interrupción
correspondiente? La bibliografía [3] contiene un listado bastante amplio de varios
puertos y la manera de usar los controladores correspondientes. Para la actividad y la
asignatura son importantes los puertos:
Puerto Controlador
20h/21h : A0h/A1h Controladores de interrupción
40h/43h Temporizador del sistema*
60h/64h Teclado
70h/71h Reloj de tiempo real
*Orientación de estudio independiente a través de un ejercicio
La configuración por defecto de los controladores de interrupción mapea las IRQ como
muestra la tabla en la sección correspondiente en [3] (línea 174) y necesitan que se les
envíe a los puertos 20h y a0h un valor especial llamado fin de interrupción para que
puedan detectar las IRQs nuevamente, una vez que han generado una interrupción. Otra
cuestión importante es el hecho que en cualquier momento pueden enmascararse las
IRQ, estableciendo un valor en los puertos 21h y/o a1h. Así por ejemplo la secuencia:
mov al,10111100b ; Habilitar floppy(bit 6), teclado (bit 1) y timer (bit 0)
out 21h,al
mov al,11101110b ; Habilitar ratón(bit 4) y reloj de tiempo real(bit 0)
out 0a1h,al
Provocaría que solo se generen las interrupciones correspondientes a las IRQs
“marcadas” con cero. Nótese que además se puede ilustrar la diferencia de procedimiento
comparado con la entrada/salida mapeada en memoria.
Para deshabilitar o habilitar las interrupciones hardware se utiliza la bandera de
interrupción, pero el procedimiento más común es mediante las instrucciones:
Instrucción Acción
sti Hace I=1. Se reconocen las interrupciones hardware
cli Hace I=0. Se ignoran las interrupciones hardware
Por defecto, las interrupciones correspondientes a las IRQ del temporizador, el teclado y
el reloj de tiempo real son:
IRQ Interrupción
irq0(timer) int 8
irq1(teclado) int 9
irq8(reloj de timpo real) int 70h
Lo que significa que si se modifica el vector correspondiente con una subrutina propia,
esta se ejecutará cada vez que ocurra la interrupción.
Uno de los dispositivos más versátiles y longevos de los sistemas de cómputo es el
teclado, al punto que desde el surgimiento de las primeras computadoras electrónicas no

Universidad de las Ciencias Informáticas 2


Arquitectura de Computadoras. Actividad 24

ha cambiado demasiado la lógica de funcionamiento. En el epígrafe 34.1.2 se describe la


operación de este dispositivo y los códigos de rastreo asociados a cada tecla en varios
tipos de teclado. Ello incluye la manera de detectar presión o liberación y teclas
extendidas (incluidas luego del IBP/PC original). En el epígrafe 34.1.5 se describe la
manera de manejar el teclado y el controlador PS/2 a través de los puertos. Como la
operación del teclado estará vinculada con el manejo de la irq1, el puerto 64h solo será
útil en la asignatura para el envío de comandos. Las tablas 34.3 y 34.6 contienen los
comandos que pueden ser utilizados con el controlador del teclado y con el teclado
respectivamente.
A modo de comparación, si no se usan interrupciones, la lectura del teclado PS/2 podría
hacerse como:
@@: in al,64h
test al,1
jz @b
in al,60h
; Hacer algo con el código de rastreo leído
Lo que se denomina encuesta o polling en inglés. De modo diferente, si se define una
subrutina para capturar o dar servicio a la irq9 (interrupción 8, por defecto). Habrá que
hacer:
Keyboard: in al,60h
; Hacer algo con el código de rastreo leído
mov al,20h
out 20h,al
iret
El iret es imprescindible porque la pila se maneja diferente cuando ocurre una
interrupción [1].
La subrutina a continuación detecta cuando se ha presionado cualquiera de las teclas
numéricas:
Keyboard: in al,60h
cmp al,2
jb @f
cmp al,11
ja @f
; Hacer algo con las teclas de números
mov al,20h
out 20h,al
iret
El uso más corriente de la interrupción es traducir las pulsaciones a códigos ASCII, esto
puede hacerse valiéndose de un mapa de códigos que traduce los códigos de rastreo a
códigos ASCII, como en este ejemplo:
ReadKey: in al,60h
cmp al,127 ;Evitar “eco” de las teclas liberadas
ja @b
xor ah,ah
mov si,ax

Universidad de las Ciencias Informáticas 3


Arquitectura de Computadoras. Actividad 24

mov al,[si+keymap]
mov [es:di],al ; es=b800h, se muestran en
; pantalla los caracteres
add di,2
mov al,20h
out 20h,al
iret

keymap: db 0
db 27,'1234567890-=',8
db 9,'qwertyuiop[]',10
db 0,'asdfghjkl;',39,96,0,'\'
db 'zxcvbnm,./',0,'*',0,' '
db 0,'2345678901',0,'3789-456+1230.'

Estudio Independiente
1. Escriba y pruebe una subrutina para utilizar las teclas del 1 al 7 de modo que al
liberarlas, se modifique el color de la pantalla en modo gráfico con el valor
correspondiente al número de la tecla.
2. Escriba y pruebe una subrutina para introducir textos en modo 3 y que la tecla ENTER
provoque un cambio de línea.
3. (*)Escriba una subrutina para desplazar un texto horizontal, en modo 3, como una
marquesina. La tecla ESPACIO será utilizada para pausar o continuar el
desplazamiento del texto. Se recomienda utilizar también la int 8.

Universidad de las Ciencias Informáticas 4

También podría gustarte