Está en la página 1de 5

2.

5 Puertos Entrada/Salida
Nota: Para tener una visin de conjunto, antes de adentrarse en este apartado, dedicado a
los puertos de E/S, es recomendable leer el epgrafe en que se tratan las Entradas/Salidas de
forma genrica ( H2.1)

1 Sinopsis
Cualquier dispositivo (distinto de la memoria RAM) que intercambie datos con el sistema lo hace a
travs de un "puerto", por esto se denominan tambin puertos de E/S ("I/O ports"). Desde el
punto de vista del software, un puerto es una interfaz con ciertas caractersticas; se trata por tanto
de una abstraccin (no nos referimos al enchufe con el que se conecta fsicamente un dispositivo al
sistema), aunque desde el punto de vista del hardware, esta abstraccin se corresponde con un
dispositivo fsico capaz de intercambiar informacin (E/S) con el bus.
Como los dispositivos E/S tienen algn tipo de conexin con el bus externo (
H2), deben tener
una direccin (o conjunto de ellas) que los identifique. Los hemos comparado con un telfono, un
dispositivo con el que se puede enviar/recibir informacin mediante una direccin. Hablar de un
puerto E/S es casi siempre sinnimo de una direccin, y es costumbre informtica referirse a estas
direcciones en hexadecimal ( 2.2.4b). De modo que, por ejemplo, un puerto puede ser 0x21 en
un fuente o 21h en un texto informtico.
Nota: Al tratar de las E/S ( H2.1) hemos indicado que puerto es sinnimo de perifrico; un
dispositivo externo que comunica con el sistema a travs de una direccin. Sin embargo no
todos son dispositivos externos a la placa-base, de hecho algunos dispositivos hardware
incluidos en ella tienen la caracterstica de "Puertos". Por ejemplo, durante mucho tiempo
algunos PC's disponan de un botn frontal sealado "Turbo", con el que se poda cambiar la
velocidad de funcionamiento. Este cambio de la velocidad del reloj tambin puede realizarse
por software. Basta para ello cambiar un par de bits en un "Puerto" instalado en la propia
placa-base (generalmente en el rango 62-6Fh).

2 Direcciones de puertos
El modelo de direccionamiento del PC ha adoptado dos modelos, segn la naturaleza del
dispositivo a conectar: Direccionamiento dedicado para dispositivos de media/baja velocidad.
Por ejemplo, puertos serie y paralelo (impresora), teclado, Etc. y direccionamiento mapeado en
memoria para dispositivos rpidos (tpicamente los adaptadores grficos). En el apartado
dedicado a E/S se explican las diferencias entre ambas modalidades (
H2.1)
2.1 Respecto a los dispositivos de direccionamiento dedicado, desde la introduccin del IBMPC, es costumbre que determinados dispositivos muy comunes se conecten mediante puertos de
direcciones determinadas.

Agunas direcciones (hex) de puertos


en el PC XT/AT
En la tabla adjunta se muestran algunas de estas
direcciones tpicas para dispositivos de E/S [3]. Las
referencias a los chips se refieren a los utilizados en
los primeros PCs. Actualmente han sido sustituidos
por uno o dos integrados (Chipset) que realizan todas
las funciones.
Puede observarse que para un mismo perifrico se
tienen varias direcciones (un "rango"). La razn es
que estos dispositivos tienen varios registros y/o son
programables, para lo que disponen de registros
especiales (cada registro de un Byte tiene una
direccin, y estas son correlativas). Por ejemplo, el
controlador de puerto serie de los primeros PCs era
un circuito integrado 8250 de National
Semiconductor; que dispone de 8 registros, aunque
los datos se reciben y transmiten por uno de ellos, el
resto sirve para programar y controlar el
funcionamiento del chip.

Dispositivo

Controlador DMAC#1
primario 8237A

Direccin

000-00F

Controlador de
020-021
interrupciones PIC#1 8259A

Temporizador
programable PIT 8253 y
8254

040-043

2.1a Respecto a las asignaciones "Estandar" de


algunos puertos, es pertinente hacer algunas
observaciones:

Controlador
perifricos PPI 8255 (XT)

060-063

En realidad IBM defini de forma distinta las


direcciones de puerto de las interfaces de impresora
en los PC monocromo y en los de color. Las
asignaciones fueron las siguientes:

Controlador 8742 (AT)

060-064

Altavoz del sistema

061-061

CMOS RAM & NMI Mask


Reg (AT)

070-071

Registros de pgina DMA

081-08F

Controlador de
interrupciones PIC#2 (AT)

0A0-0A1

NMI Mask register (XT)

0A2-0AF

Controlador DMAC#2
secundario (AT)

0C0-0DF

Clear / Reset del


coprocesador matemtico

0F0-0F1

Coprocesador matemtico

0F8-0FF

Puerto
LPT1
LPT2

Monocromo
3BC-3BFh
378-37Fh

LPT3

278-27Fh

Color
378-37Fh
278-27Fh
---

En lo referente a los puertos serie, durante la


secuencia inicial de identificacin del hardware (
4.2), la BIOS realiza una bsqueda de dispositivos de
E/S por direcciones en un orden determinado, y les
asigna un nombre lgico segn el orden de
aparicin. En el caso de los puertos serie el orden
suele ser el siguiente:

Puerto
COM1
COM2
COM3
COM4

Direccin
3F8-3FFh
2F8-2FFh
3E8-3EFh
2E8-2EFh

2.1b Los usuarios de Windows 98 pueden comprobar la asignacin de puertos del sistema
mediante la utilidad msinfo032.exe(genralmente en el directorio C:\Archivosde
programa\Archivoscomunes\MicrosoftShared). Los usuarios de Linux pueden
consultarse en el fichero /proc/ioportsmediante el comando
cat /proc/ioports
(lad direcciones de memoria estn expresadas en hexadecimal). En la pgina adjunta se muestra
el resultado de ambas utilidades en un caso concreto (
Ejemplo).:
2.2 Las direcciones mapeadas en memoria se eligieron para algunos dispositivos como los
adaptadores grficos, que requeran mover grandes cantidades de datos muy rpidamente.
Con objeto de no causar conflictos con la RAM general, algunas de estas direcciones fueron
mapeadas desde el principio por los diseadores de IBM, fuera de la denominada memoria
convencional ( H5.1). Es decir, fuera del espacio de los 640 KB que podan utilizarse en los
primeros PC's para Sistema y programas de aplicacin. Por ejemplo, el adaptador de video utiliza
un rea de memoria de 128 KB mapeada entre las direcciones A0000-BFFFFh.
Sin embargo, los decodificadores de direcciones de perifricos de los primitivos PC's solo podan
utilizar direcciones de 10 bits para tales accesos, por lo que las direcciones de puertos estaban
constreidas a 210 (1 KB 0000-0400h). En realidad el espacio era an ms pequeo, puesto que
los primeros 256 Bytes estaban copados por algunos dispositivos de la placa-base, resultando que
los dispositivos E/S deban ser mapeados en 768 Bytes. Generalmente se utilizaron fragmentos de
256 Bytes en la forma xxF0-xxFFh, organizados de forma bastante desordenada.
La introduccin del AT ampli estas direcciones a 16 [2]. Sin embargo, incluso los 64 KB
resultantes eran un espacio pequeo y de organizacin catica, dado que los nuevos dispositivos
se construan de forma que fueran compatibles con las antiguas placas ISA que solo reconocan
direcciones de 10 bits. Incluso las placas para buses posteriores que fueron desarrollados
pensando en 64 KB porque deban ser compatibles hacia atrs con las antiguas placas ISA (que
coexistan en las nuevas). El resultado de todo esto es que, incluso los sistemas actuales con
muchos MB. de RAM, deben seguir lidiando con los puertos a travs de pequeas ventanas de
memoria con localizaciones absurdas.

3 Comunicar con los puertos


Nos detendremos brevemente en analizar los aspectos involucrados en las operaciones E/S con
los puertos desde una doble vertiente: Lgica y fsica; esta ltima relativa a los mecanismos
involucrados en el intercambio.

3.1 Aspectos lgicos


El software utilizado depende de la modalidad de direccionamiento (dedicado o mapeado) que se
elija. En el segundo caso, se dispone un amplio repertorio de recursos para mover datos entre los
registros y la memoria (la mayora de las instrucciones del procesador operan de esta forma), as
como de los mecanismos auxiliares de transferencia, como el acceso directo a memoria DMA.
El panorama es distinto cuando se trata de puertos de direccionamiento dedicado. En este caso,
para realizar las operaciones E/S en los procesadores 8088 y descendientes, solo se dispone de
dos instrucciones especficas: IN y OUT. La primera lee un byte del registro de salida del puerto y

lo sita en un registro del procesador; la segunda escribe el contenido de un registro del


procesador en un registro del puerto. Ambas instrucciones permiten dos variaciones sintcticas:
IN acumulador-destino, direccion-de-puerto-origen
IN acumulador-destino, acumulador-origen
OUT direccin-de-puerto-destino, acumulador-origen
OUT acumulador-destino, acumulador-origen
Las dos primeras sitan el dato contenido en el puerto origen en elacumulador-destino, que
puede ser AX o AL. Observe que el puerto puede ser expresado directamente mediante una
direccin (hexadecimal) o mediante un acumulador-origen, que debe serDX; en este caso, su
contenido se toma como direccin del puerto que se lee.
Las instrucciones OUT sitan el valor contenido en el acumulador-origen, que puede
ser AX o AL, en el puerto destino, que puede ser identificado directamente mediante su direccin
hexadecimal, o por el valor sealado por el acumulador-destino, que debe ser DX.
En el IBM-PC, las direcciones-de-puerto utilizadas en estas instrucciones estan en el rango
00-FFh, aunque en la prctica solo 00-F7h, porque Intel reserva las direcciones F8-FFh para el
coprocesador metemtico ( 0.3.2). En cambio, si se utiliza la direccin contenida en el
registro DX el rango de direcciones puede moverse en el rango 0000-FFFFh.
Por supuesto, cualquier programa que quiera utilizar puertos deber emplear directa o
indirectamente estas dos instrucciones ensamblador, aunque en muchos casos no es
imprescindible enredarse en demasiados detalles.
Los usuarios de DOS pueden utilizar servicios del Sistema; concretamente la interrupcin 21h que
realiza operaciones de E/S con puertos (utilizando IN y OUT por supuesto). Por ejemplo, las
instrucciones:
MOVDL,7
MOVAH,2
INT21
provocan un pitido en el sistema bajo DOS. La explicacin es la siguiente: La ltima instruccin
invoca una interrupcin software ( H2.4) nmero 33 (21h) que, como hemos indicado,
corresponde a los servicios del DOS. Cuando esto ocurre, se comprueba el contenido del registro
AH ( H3.2), que en este caso es 2 (valor previamente establecido en la segunda instruccin), lo
que indica que debe escribirse un carcter en pantalla (un dispositivo de salida); en este caso, el
carcter que se enva al puerto es el contenido del registro DL, que previamente se ha establecido
en el valor 7 con la primera instruccin. El 7 es el valor BELL ASCII ( 2.2.1a); cuando se intenta
mostrar este carcter, se produce un pitido en el altavoz del sistema.
Los dems Sistemas disponen de utilidades anlogas. Por ejemplo, los sistemas Windows
disponen de una DLL especfica para este tipo de servicios.

3.2 Aspectos fsicos


El procedimiento que se sigue el procesador para las E/S hacia puertos, es siempre el mismo:
Poner el dato en el bus de datos y la direccin en el de direcciones. Como indicamos a
continuacin, el sistema sabe que se trata de una direccin de memoria (real o de puerto

mapeado) o de un puerto de direccin dedicada, y cual es la accin esperada (lectura o escritura)


porque se dispone de 4 lneas especficas en el bus de control (
H2):

IOR
Orden de lectura para dispositivo E/S conectado al bus, que debe colocar un dato
en el bus de datos.
IOW
Orden de escritura para dispositivo E/S, que debe leer el dato situado en el bus.
MEMR Esta seal indica a los dispositivos de memoria que deben colocar un dato en el
bus de datos.
MEMW Seal que indica a los dispositivos de memoria que deben almacenar el dato
colocado en el bus de datos.

Una cuestin adicional es que cuando la comunicacin debe establecerse desde el lado del puerto
(es el puerto el que desea establecer comunicacin con el sistema), primero debe anunciarlo al
procesador, para lo que se utiliza un sistema de interrupciones cuyo mecanismo de funcionamiento
se ha detallado en el captulo correspondiente (
H2.4). La consecuencia es que la mayora de
los puertos disponen de lneas IRQ asignadas para este menester.

También podría gustarte