Este documento trata sobre la programación de dispositivos en lenguaje ensamblador. Explica el buffer de video en modo de texto y cómo funciona para mostrar caracteres ASCII en la pantalla. Luego, detalla cómo acceder a discos mediante las interrupciones INT 13h del BIOS, incluyendo funciones como leer, escribir y verificar sectores, así como parámetros de las unidades. Finalmente, proporciona tablas con los servicios y funciones soportadas por la interrupción INT 13h para operar con discos duros y disquetes.
Este documento trata sobre la programación de dispositivos en lenguaje ensamblador. Explica el buffer de video en modo de texto y cómo funciona para mostrar caracteres ASCII en la pantalla. Luego, detalla cómo acceder a discos mediante las interrupciones INT 13h del BIOS, incluyendo funciones como leer, escribir y verificar sectores, así como parámetros de las unidades. Finalmente, proporciona tablas con los servicios y funciones soportadas por la interrupción INT 13h para operar con discos duros y disquetes.
Este documento trata sobre la programación de dispositivos en lenguaje ensamblador. Explica el buffer de video en modo de texto y cómo funciona para mostrar caracteres ASCII en la pantalla. Luego, detalla cómo acceder a discos mediante las interrupciones INT 13h del BIOS, incluyendo funciones como leer, escribir y verificar sectores, así como parámetros de las unidades. Finalmente, proporciona tablas con los servicios y funciones soportadas por la interrupción INT 13h para operar con discos duros y disquetes.
Unidad 4 PROGRAMACION DE DISPOSITIVOS. CATEDRATICO. Lic. Ral Vzquez Tiscareo.
a 19 de Mayo del 2013, Cd Delicias Chihuahua.
2 INDICE. Introduccin 3
Programacin de dispositivos 4 4.1 El buffer de video en modo texto. 4 4.2 Acceso a discos en lenguaje ensamblador. 7 4.3 Programacin del puerto serial. 25 4.4 Programacin del puerto paralelo. 29 4.5 Programacin hbrida. 38 4.6 Programacin de puerto USB. 39 Conclusin 44 Bibliografas. 45
3 INTRODUCCION. En este documento se van a tratar temas de inters para el mbito de lenguajes de interfaz que se enfocan a la programacin de dispositivos las herramientas de modo de texto en este caso se utilizan para el despliegue de mensajes en lenguaje ASCII y as como este ejemplo se muestran los diferentes comandos para despliegues y las interrupciones necesarias que se usan en un ensamblador. A travs de diversas tablas se hace un desglose de cada una de las referencias de las interrupciones y se muestran parmetros.
4 PROGRAMACIN DE DISPOSITIVOS.
4.1. El buffer de video en modo texto.
Modo texto. El modo de texto se utiliza para el despliegue normal en la pantalla de caracteres ASCII. El procesamiento es semejante tanto para el monocromtico como a color, salvo que a color no permite el atributo de subrayado. El modo texto proporciona acceso a todo el conjunto de 256 caracteres ASCII extendido. La figura 10-1 muestra los modos de texto comunes, con el nmero de modo ala izquierda. Modo de texto 00(mono) 01 (color).estos modos permiten usar un formato de 40 columnas. Aunque fueron diseados originalmente para el CGA, son compatibles los siguientes y tambin operan con funciones en sistemas EGA y VGA. Modo de texto 02(mono) 03 (color). Estos modos proporcionan el formato convencional de 80 columnas. Aunque fueron diseados originalmente para el CGA, son compatibles los siguientes y tambin operan con funciones en sistemas EGA y VGA. Modo de texto 07(mono).Este modo estndar monocromtico para MDA, EGA y VGA, ofrece respetables soluciones en pantalla.
5
Despliegue monocromtico Para un monitor monocromtico, el bit 0 establece el atributo subrayado. Para especificar atributos, puede establecer combinaciones de bits como se muestra a continuacin:
6 Despliegue a color En muchos monitores a color, el fondo puede mostrar uno de 8 colores y los caracteres pueden mostrar 1 de 16 colores. La intermitencia e intensidad soplo se aplica al primer plano. Tambin puede seleccionar 1 de 16 colores para el borde (marco).Los monitores de color no permiten subrayado; en lugar de esto, al establecer un bit en cero seleccione el color azul como primer plano. El byte de atributo e sutilizado de la misma manera como se mostro con un monitor monocromtico. Los tres colores bsicos son verde rojo y azul. Puede combinarlos en el byte de atributo para formar un total de 8 colores (incluyendo blanco y negro) y puede establecer alta intensidad para un total de 16 colores.
7 4.2. ACCESO A DISCOS EN LENGUAJE ENSAMBLADOR.
En modo real de sistemas operativos, como MS-DOS , llamada INT 13h saltaban en cdigo ROM-BIOS de la computadora para los servicios de disco de bajo nivel , lo que llevar a cabo las operaciones de lectura de disco basado en el sector fsico o escribir para el programa. En MS-DOS, que sirve como interfaz de bajo nivel para los controladores de dispositivos de bloque internas para discos duros y disquetes . Esto permite a 26h y de 25h INT INT para proporcionar absoluta disco de lectura / escritura de funciones lgicas a los sectores de la FAT sistema de archivos del controlador en el kernel de DOS, que atiende las solicitudes relacionadas con los archivos a travs de MS-DOS API ( INT 21h funciones). En modo protegido sistemas operativos, como Microsoft Windows NT derivados (por ejemplo, NT4, 2000, XP y Server 2003) y Linux con dosemu , las intersecciones utilizar la llamada y pasa al disco nativo del sistema operativo mecanismo de entrada / salida. Windows 9x y Windows para Trabajo en Grupo 3.11 tambin omitir las rutinas del BIOS cuando se utiliza acceso a archivos de 32 bits . El modo real interfaz original BIOS INT 13h admite unidades de tamaos de hasta aproximadamente 504 MB, mediante lo que se conoce comnmente como CHS direccionamiento fsico. Este lmite se origina a partir de la interfaz de hardware de la PC / IBM XT hardware del disco. El BIOS usa el -sector-culata (CHS) direccin indicada en la llamada INT 13h, y se transfieren directamente a la interfaz de hardware. Esta interfaz ms tarde se ampli para admitir el direccionamiento de hasta exactamente 8064 MB utilizando lo que se conoce comnmente como CHS direccionamiento lgico. Este lmite se origina de una combinacin del valor de registro basado convencin de llamada utilizado en la interfaz INT 13h, y el objetivo de mantener la compatibilidad con versiones anteriores. Haba originalmente una serie de BIOS que ofrecan versiones incompatibles de esta interfaz, pero con el tiempo la industria informtica estandarizada en la interfaz desarrollada en la investigacin Microid ("MR BIOS") en 1989. Este lmite se utiliza 1024 cilindros, 256 cabezales, 63 sectores y bloques de 512 bytes, lo que ms o menos 7.875 GB de direccionamiento (1024 * 256 * 63 * 512). Para apoyar los modos de direccionamiento an ms grandes, una interfaz conocida como extensiones INT 13h se introdujo por Western Digital y Phoenix Technologies como parte de BIOS Enhanced Disk Drive
8 Servicios. Se utiliza 64 bits direccionamiento lgico de bloques (LBA), que permite hacer frente a 8 ZiB (la unidad tambin puede soportar LBA de 28 bits o de 48 bits que permite que hasta 128 GiB o 128 PiB respectivamente, suponiendo un sector de 512 bytes / tamao de bloque). Esta es una interfaz de paquetes, ya que utiliza un puntero a un paquete de informacin en lugar del registro basado convencin de llamada de la interfaz INT 13h originales. Este paquete es una estructura de datos que contiene una versin de la interfaz, tamao de los datos, y LBA. Todas las versiones de MS-DOS , como MS-DOS 7 y de Windows 95 contienen un error que impide que se inicie discos duros con 256 cabezas (registrarse valor 0xFF), [ 2 ] tantas mapas modernos del BIOS que las unidades tienen en la mayora de las 255 cabezas . Tambin algunos controladores de cach se lave sus reservas cuando se detecta que MS-DOS se pasa por alto por las aplicaciones que las cuestiones directamente peticiones INT 13h. BIOS AMI de alrededor de 1990-1991 basura palabra buffers no alineados. Algunos MS-DOS y TSR programas clobber interrumpir la activacin y registros para PC-DOS y MS- DOS instalan sus propios filtros para evitar esto.
CARTA DE SERVICIOS INT 13h
Tabla Drive.
DL = 00h Primero disquete ("la unidad A:") DL = 01h Segundo disco ("unidad B:") DL = 80h Primero el disco duro DL = 81h Disco duro segundo
TABLA DE FUNCIONES.
9 AH = 00h Cambiar las unidades de disco AH = 01h Ver estado de la ltima operacin Drive AH = 02h Leer Sectores de la unidad AH = 03h Escribe Sectores para conducir AH = 04h Verifique Sectores AH = 05h Formato de pista AH = 06h Formato de pista Set Flags Bad Sector AH = 07h Formato de la unidad a partir de la cancin AH = 08h Leer parmetros del variador AH = 09h HD Inicializar controlador de disco AH = 0Ah HD Leer Sectores largo de la unidad AH = 0Bh HD Escribe Sectores largo para conducir AH = 0Ch HD Mueva Head Drive al cilindro AH = 0Dh HD Cambiar las unidades de disco AH = 0Eh PS / 2 Controller Leer Ensayo AH = 0Fh PS / 2 Controlador Escribir prueba
10 AH = 10h HD Probar si la unidad est lista AH = 11h HD Vuelva a calibrar Drive AH = 12h PS / 2 Controlador de memoria RAM de prueba AH = 13h PS / 2 Test Drive AH = 14h HD Controlador de Diagnstico AH = 15h Leer Tipo de unidad AH = 16h FD Detectar Medios Change AH = 17h FD Configurar el tipo de Formato (utilizado por las versiones de DOS <= 3.1) AH = 18h FD Configurar el tipo de Formato (utilizado por DOS versiones> = 3.2) AH = 19h Parque Heads AH = 41h EXT Comprobar si las extensiones estn disponibles AH = 42h EXT Leer Sectores de la unidad AH = 43h EXT Escribe Sectores para conducir AH = 44h EXT Verifique Sectores AH = 45h EXT Bloquear / Desbloquear unidad AH = 46h EXT Expulsin de la unidad
11 AH = 47h EXT Mueva Head Drive To Sector AH = 48h EXT Leer parmetros del variador AH = 49h EXT Detectar Medios Change Si la segunda columna est vaca, entonces la funcin puede ser utilizado tanto para disquete y duro. FD: para disquete solamente. HD: de disco duro solamente. PS / 2: para el disco duro en el sistema PS / 2 solamente. EXT: parte de las extensiones INTERNAS 13H que estaban escritas en la dcada de 1990 para apoyar a los discos duros con ms de 8 GB . INT 13h AH = 00h: Restaurar la unidad de disco
Parmetros: AH 00h DL Conducir
Resultados: CF Ubicado en error
INT 13h AH = 01h: obtener el estado de la ltima operacin Drive
12 Parmetros: AH 01h DL Conduzca $ $ Bit 7 = 0 para la unidad de disquete, bit 7 = 1 para la unidad fija Resultados: Alabama Vuelva Cdigo 00h xito 01h Comando no vlido 02h No puedo encontrar la direccin Marcos 03h Escribir intentado en tu disco protegido 04h Sector no encontrado 05h Restablecer Error 06h Lnea de cambio de disco "activa" 07h Actividad parmetro Error de la unidad 08h DMA rebasamiento 09h Intento de DMA sobre 64kb lmite 0Ah Sector defectuoso detectado 0Bh Mala cilindro (pista) detecta 0Ch Tipo de medio no se encuentra 0Dh No vlido nmero de sectores 0Eh Control de marca de direccin de datos detecta 0Fh DMA fuera de rango 10h Error de datos CRC / ECC 11h ECC corrige error de datos 20h Fallo del controlador 40h Busque el fracaso 80h Conduce el tiempo de espera, que se supone no est listo AAh Drive not ready BBH Error indefinido CCh Escribe fallo E0h Error de estado FFh Operacin Sense no CF Set On Error, Borrar Si No Error INT 13h AH = 02h: leer sectores desde la unidad Parmetros:
13 AH 02h Alabama Sectores Para Leer Conde CH Rastrear CL Sector DH Cabeza DL Conducir ES: BX Tampn de direccin del puntero Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo Alabama Sectores reales Leer Conde Observaciones: Registro CX contiene tanto el nmero de cilindro (10 los bits , los valores posibles son 0 a 1023) y el nmero de sector (6 bits, los valores posibles son 1 a 63). Pedacitos del cilindro y del Sector se numeran a continuacin: CX = CH --- --- --- CL --- cilindro: 76543210 98 sector: 543210
Ejemplos de traduccin:
14 CX: = ((cilindro y 255) SHL 8) o ((cilindro y 768) SHR 2) o sector; cilindro: = ((CX y 0xFF00) shr 8) o ((CX y 0xC0) SHL 2) sector: = CX y 63; Direccionamiento de amortiguamiento debe garantizar que el buffer completo se encuentra dentro del segmento dado, es decir, (BX + size_of_buffer) <= 10000h. De lo contrario la alarma puede fallar con algunos BIOS o versiones de hardware. Ejemplo: Suponga que desea leer 16 sectores (= 2000h bytes ) y el bfer comienza en la direccin 4FF00h memoria. La utilizacin de la segmentacin de memoria , hay diferentes maneras de calcular los valores de registro, por ejemplo:
ES = segmento = 4F00h BX = offset = 0F00H Suma = direccin de memoria = 4FF00h Sera una buena opcin porque 0F00H + 2000h = 2F00h <= 10000h ES = segmento = 4000h BX = offset = FF00h Suma = direccin de memoria = 4FF00h Que no es una buena opcin porque FF00h + 2000h = 11F00h> 10000h 02h Funcin de interrupcin 13h slo pueden leer los sectores de los primeros 16.450.560 sectores de su disco duro, para leer los sectores ms all del lmite de 8 GB se debe utilizar la funcin 42h de extensiones INTERNAS 13H. Otra alternativa puede ser DOS 25h interrupcin que lee sectores dentro de una particin. INT 13h AH = 03h: Escribe Sectores para conducir
Parmetros: AH 03h Alabama Sectores de escribir Conde
15 CH Rastrear CL Sector DH Cabeza DL Conducir ES: BX Tampn de direccin del puntero Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo Alabama Sectores reales Conde Escrito
INT 13h AH = 04h: Verifique los sectores de la unidad
16 DL Conducir ES: BX Tampn de direccin del puntero Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo Alabama Sectores reales verificados Conde INT 13h AH = 05h: Formato de pista
Parmetros: AH 05h Alabama Sectores a formato Conde CH Rastrear CL Sector DH Cabeza DL Conducir ES: BX Tampn de direccin del puntero $ $ 4-byte campo de direccin (se aplica a PC / XT 286, AT, PS / 1 y PS / 2)
Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo
INT 13h AH = 06h: Formato Track Set Flags Bad Sector Parmetros: AH 06h Alabama Interleave CH Rastrear CL Sector DH Cabeza DL Conducir Resultados:
18 CF Set On Error, Borrar Si No Error AH Vuelva Cdigo
INT 13h AH = 07h: Formato A partir de la cancin Drive
Parmetros: AH 07h Alabama Interleave CH Rastrear CL Sector DH Cabeza DL Conducir Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo
INT 13h AH = 08h: lee los parmetros del variador Parmetros:
19 Registros AH 08h = nmero de funcin para read_drive_parameters DL ndice de activacin (por ejemplo, primero HDD = 80h) ES: DI [ 4 ] establecido en 0000h: 0000h a evitar algunos errores BIOS
Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo DL nmero de unidades de disco duro DH [ 4 ] lgica ltimo ndice de cabezas = number_of - 1 (porque el ndice comienza en 0) CX [07:06] [15:08] lgica ltimo ndice de cilindros = number_of - 1 (porque el ndice comienza con 0 ) [05:00]lgica ltimo ndice de sectores por pista = number_of (porque el ndice comienza con 1) BL tipo de unidad (slo AT/PS2 disquetes) ES: DI puntero a conducir tabla de parmetros (slo para disquetes) Observaciones: los valores lgicos de 08h funcin pueden / deben diferir de los valores CHS fsicas de funcin 48h. Resultado registro CX contiene dos cilindros y sectores / pista de valores, vase la observacin de 02h funciones. INT 13h AH = 09h: Caractersticas Par Drive Init
20
Parmetros: AH 09h DL Conducir Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo INT 13h AH = 0Ah: Leer Sectores largo de la unidad La nica diferencia entre esta funcin y la funcin 02h (vase ms arriba) es que la funcin 0Ah lee 516 bytes por sector en lugar de slo 512. Los ltimos 4 bytes contienen el cdigo de correccin de errores (ECC), una suma de comprobacin de los datos del sector. INT 13h AH = 41h: Llegada Extensiones Presente
Parmetros: Registros AH 41h = nmero de funcin para las extensiones de verificacin [ 5 ]
DL ndice de activacin (por ejemplo, primero HDD = 80h) BX 55AAh Resultados: CF Habilite no presente, claro si lo hay AH Cdigo de error o nmero de versin principal
21 BX AA55h CX Mscara de bits de soporte de interfaz: 1 - Acceso al dispositivo utilizando la estructura del paquete 2 - Bloqueo Drive y extraccin de 4 - Apoyo a la unidad de disco mejorada (EDD) INT 13h AH = 42h: extensin Sectores leer desde la unidad
Parmetros: Registros AH 42h = nmero de funcin para la lectura prolongada DL ndice de activacin (por ejemplo, primero HDD = 80h) DS: SI segmento: offset puntero a la DAP, ver ms abajo DAP: Disco Direccin Packet compensar gama tamao Descripcin 00h 1 byte tamao de DAP = 16 = 10h 01h 1 byte sin usar, debe ser cero
22 02h 03h .. 2 bytes nmero de sectores para ser ledo, (algunas BIOS Phoenix estn limitados a un mximo de 127 sectores) 04h 07h .. 4 bytes segmento: offset puntero al bfer de memoria a la que se transferirn los sectores (tenga en cuenta que 86 es little-endian : si se declara el segmento y el desplazamiento por separado, el desplazamiento debe ser declarado antes del segmento) 08h .. 0Fh 8 bytes nmero absoluto del inicio de los sectores que se deben leer (primera sector del disco tiene el nmero 0)
Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo INT 13h AH = 43h: Sectores Escriba ampliado para conducir Parmetros: Registros AH 43h = nmero de funcin para escribir largos Alabama bit 0 = 0: control de cerca de escritura, bit 0 = 1: Comprobacin de escritura abierto, bits 1-7: reservado, establece en 0 DL ndice de activacin (por ejemplo, primero HDD = 80h) DS: SI segmento: indicador hacia el DAP
23
Resultados: CF Set On Error, Borrar Si No Error AH Vuelva Cdigo
INT 13h AH = 48h: Extended Leer parmetros del variador
Parmetros: Registros AH 48h = nmero de funcin para extended_read_drive_parameters DL ndice de activacin (por ejemplo, primero HDD = 80h) DS: SI segmento: indicador hacia Resultado Buffer, ver ms abajo Buffer Resultado compensar gama tamao descripcin 00h 01h .. 2 bytes tamao de bfer Resultado = 30 = 1Eh 02h 03h .. 2 bytes banderas informacin 04h 07h .. 4 bytes nmero fsico de cilindros = ltimo ndice + 1 (porque el ndice comienza en 0)
24 08h .. 0Bh 4 bytes nmero fsico de los jefes = ltimo ndice + 1 (porque el ndice comienza en 0) 0Ch .. 0Fh 4 bytes nmero fsico de sectores por pista = ltimo ndice (porque el ndice comienza con 1) 10h 17h .. 8 bytes nmero absoluto de sectores = ltimo ndice + 1 (porque el ndice comienza en 0) 18h 19h .. 2 bytes bytes por sector 1Ah .. 1Dh 4 bytes puntero opcional a Unidad de disco mejorada (EDD) los parmetros de configuracin que puede ser utilizado para posteriores llamadas Extensin 13h de interrupcin (si es compatible)
Resultados:
CF Set On Error, Borrar Si No Error AH Vuelva Cdigo
4.3. PROGRAMACIN DEL PUERTO SERIAL.
Comunicacin serial en lenguaje ensamblador. En lenguaje ensamblador, se puede acudir a la interrupcin 14H de la ROM-BIOS para configurar, leer, escribir o simplemente para conocer
25
el estado del puerto; cada una de estas cuatro opciones es un servicio de la interrupcin, y se seleccionan a travs del registro AH. La figura 1 muestra los valores que debe contener el registro AH para invocar cada uno de los servicios. En todos los casos, el registro DX debe contener el nmero del puerto serie; el primero de ellos, COM1 se especifica como 00h.
Servicio Descripcin 00 Inicializar puerto serie 01 Enviar un dato 02 Recibir un dato 03 Obtener el estado del puerto
figura 1.Servicios para el puerto serial disponibles a travs de la interrupcin 14H
Para configurar o inicializar el puerto serie, bastar con utilizar el servicio 00 de la interrupcin, colocando en el registro AL los valores equivalentes a los parmetros, como se puede observar en la figura 2. Con ste mtodo es posible obtener frecuencias de transmisin que van desde los 110 hasta los 9600 baudios.
26
figura 2 Para enviar un dato por el puerto serial, bastar con colocar en el registro AH el valor 01 correspondiente a este servicio y en el registro AL el dato a ser enviado, invocando de nuevo la interrupcin 14H. La lectura de un dato que ha llegado al puerto se logra con el servicio 02, el cual devuelve en el registro AL el dato. La lectura del estado del puerto se consigue a travs del servicio 03 de esta misma interrupcin, y retorna en el registro AX el estado del puerto, el cual contendr los bits que se muestran en la figura 3.
27
figura 3 Por ejemplo, podemos utilizar el lenguaje ensamblador para configurar el puerto serial para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, realizando el siguiente programa: mov ah,0 ;servicio 00 de INT 14h: inicializar puerto mov a1,83 ;configuracin: 1200 baudios, no paridad, ;un bit de parada, 8 bits de datos mov dx,00 ;Seleccionar puerto COM1 int 14 ;interrupcin del BIOS mov ah,4c ;servicio 4ch de INT 21h: terminar int 21 ;interrupcin servicio del DOS Este programa (en donde todos las cantidades estn expresadas en hexadecimal) se puede tornar ejecutable utilizando algunos de los ensambladores para PC, o utilizando el comando DEBUG del DOS. Otra forma de seleccionar los parmetros de la comunicacin y lograr sta, es mediante la modificacin y consulta de los registros correspondientes al circuito integrado que maneja la comunicacin serial: el UART 8250 o similar. Como se sabe, este circuito integrado puede ser manejado como un puerto, en el cual es posible la escritura o lectura de sus estados. Comunicacin con el puerto paralelo en lenguaje ensamblador. En lenguaje ensamblador, se puede leer un dato del puerto mediante la instruccin IN escribir un dato en el puerto con la instruccin OUT
28 , en ambos casos el registro AL debe participar activamente en la instruccin, bien sea como fuente (en operaciones de escritura) o destino (en operaciones de lectura) del dato, como en los siguientes casos:
out DX, AL ;lleva al puerto DX el contenido del registro AL in AL,DX ;lleva al registro AL, el contenido del puerto DX Otra, exigencia, es que el nmero del puerto sobre el que se va a realizar la transferencia de datos debe estar sealado por le registro DX, a excepcin de los casos en los cuales el nmero del puerto es inferior a 255 (FFh), en cuyo caso la instruccin que lee o escribe puede sealar directamente el puerto. Como vern la utilizacin del puerto paralelo en lenguaje ensamblador es muy sencilla.
4.4. PROGRAMACIN DEL PUERTO PARALELO.
EL PUERTO DE IMPRESORA Los ordenadores PC han estandarizado un tipo de interfaz para la comunicacin con la impresora, conocida normalmente como CENTRONICS. Esta interfaz es capaz de enviar caracteres a la impresora de forma paralelo. Cada carcter est codificado en un byte, del cual cada bit se transmite por un terminal diferente. Existen otros terminales que conectan ordenador e impresora, que sirven para intercambiar informacin de control y de estado, a fin de implementar un sencillo protocolo. Para realizar esta interfaz, los PCs disponen de unos elementos hardware especficos, denominados puertos de impresora o tambin puertos paralelos. En un PC pueden instalarse varios de estos puertos que se distinguen entre s con los nombres LPT1, LPT2 y LPT3 (en algunos casos tambin LPT4). Todos ellos son idnticos, salvo que tienen asignadas diferentes direcciones en el mapa de entrada/salida. Cada uno de estos puertos ocupa tres direcciones del mapa de E/S:
29 Puerto de Datos: De 8 bits, es donde la CPU escribe los datos que se envan a la impresora (caracteres). Puerto de Estado: Registro de 8 bits de donde la CPU puede conocer diversos aspectos del estado de la impresora (apagada, sin papel, etc). Se usan slo 5 de los 8 bits. Puerto de Control: Registro de 8 bits donde la CPU puede escribir diversas seales que reconoce la impresora (validacin de datos, inicializacin, etc). Se usan 4 bits. Estos tres registros ocupan posiciones consecutivas, por lo que basta con especificar la primera de ellas. El puerto de datos ser el puerto base.La ROM-BIOS de los PCs contiene programas elementales para el manejo de estos puertos. En primer lugar, durante el proceso de arranque del ordenador, se detecta su presencia y se almacenan sus direcciones base en una zona de variables situada en el segmento 0040H (zona de variables del BIOS). En esta zona se pueden encontrar los siguientes datos: Printer_Base: En los offsets 0008H, 000AH, 000CH y 000EH, con 2 bytes cada uno de ellos, estn las direcciones de E/S en las que se encuentran los puertos base de LPT1, LPT2, LPT3 y LPT4 respectivamente. Lista de equipamiento: En el offset 0010H se encuentra una palabra que muestra de forma rudimentaria los dispositivos que se han encontrado en el arranque. Los bits 15 y 14 indican el nmero de puertos de impresora instalados. Print_Tim_Out: En los offsets 0078H, 0079H, 007AH y 007BH se encuentran los valores de TIME_OUT asociados a cada puerto. Se trata de valores que se van a utilizar para establecer cunto tiempo se va a esperar para determinar que la impresora no est disponible (est apagada, no tiene papel, etc). Las direcciones del mapa de memoria de E/S en las que se suelen colocar los puertos de impresora son:
Impresora Puerto de Datos Puerto de Estado Puerto de Control LPT1 03BCh 03BDh 03BEh LPT2 0378h 0379h 037Ah LPT3 0278h 0279h 027Ah Tabla 1
30 SEALES DE LA INTERFAZ CENTRONICS. El puerto paralelo, utilizado en general para el control de la impresin, maneja las seales que se muestran en la tabla siguiente. De todas ellas, las que normalmente intervienen en el protocolo de comunicacin entre el PC y la impresora son BUSY y STROBE#. Algunas impresoras pueden no utilizar alguna de las seales descritas en la tabla.
PUERTO NOMBRE Dir Pin DB25 DESCRIPCIN DATOS D0..D7 S 2-9 8 terminales de datos. Desde D0 a D7. ESTADO BUSY E 11 Un nivel alto indica que la impresora est ocupada y no puede recibir datos nuevos. Tambin se pone a 1 en situaciones de error. ACK# E 10 Un nivel bajo indica que la impresora ha recibido un dato y est disponible para recibir uno nuevo. PE E 12 Un nivel alto indica que la impresora no tiene papel. SLCT IN E 13 Un nivel alto indica que la impresora est on-line. ERROR# E 15 Un nivel bajo indica que se ha producido un error en la impresora. No hay papel, mal funcionamiento, etc. CONTROL IRQEN - -- Flag que habilita o inhibe la generacin de la interrupcin IRQ7 cuando se activa la seal ACK#. SELECT# S 17 Activa a nivel bajo. Indica a la impresora que se ha seleccionado la impresora. INIT# S 16 A nivel bajo, enva un RESET a la impresora. AUTOFD# S 14 A nivel bajo, la impresora se encarga de hacer un salto de lnea al recibir el carcter "retorno de carro". STROBE# S 1 Validacin de datos. Cuando la impresora detecta un nivel bajo, acepta el dato. El carcter # indica que la seal es activa a nivel bajo
31 EL PUERTO DE DATOS. Generalmente es slo de salida, pues se dise para enviar caracteres a la impresora. Actualmente este puerto es bidireccional. La correspondencia entre los bits del registro de datos y las seales presentes en el conector DB25 del exterior es:
BIT 7 6 5 4 3 2 1 0 FUNCIN D7 D6 D5 D4 D3 D2 D1 D0 Tabla 3 EL PUERTO DE ESTADO. Es un puerto de entrada. Est destinado a la lectura del estado de las lneas de interfaz con la impresora. La seal BUSY es invertida antes de llegar al registro. La correspondencia entre los bits del registro de estado y las seales presentes en el conector DB25 del exterior es:
BIT 7 6 5 4 3 2 1 0 FUNCIN BUSY (inv.) ACK# PE SLCT IN ERROR# -- -- -- Tabla 4
EL PUERTO DE CONTROL. Es un puerto de salida destinado a la escritura de comandos sobre la impresora. Las seales SLCT#, AUTOFD# y STROB# son invertidas antes de llegar a los correspondientes terminales de conector externo. El bit 4 (IRQEN) no es una seal que corresponda a alguno de los terminales de la interfaz Centronics. Se trata de un flag que habilita o prohbe la generacin de la interrupcin IRQ7 cuando se activa la seal ACK#. Las rutinas del BIOS que se ocupan de la impresora no utilizan esta interrupcin. La correspondencia entre los bits del registro de control y las seales presentes en el conector DB25 del exterior es:
32
BIT 7 6 5 4 3 2 1 0 FUNCIN -- -- -- IRQEN SELECT# (inv.) INIT# AUTOFD# (inv.) STROBE# (inv.) Tabla 5 EL PUERTO DE IMPRESORA COMO CONTROL Y ADQUISICIN DE DATOS. Un puerto es un mecanismo que conecta a un procesador con el mundo exterior. Por medio de un puerto, el procesador recibe una seal desde un dispositivo de entrada y enva una seal a un dispositivo de salida. Los puertos son identificados por sus direcciones en el intervalo 0000h- 03FFh, lo que permite el uso de 1024 puertos en total. Las direcciones no son de memoria, estn situadas en un mapa diferente de entrada/salida. Todo lo descrito en el apartado anterior define el funcionamiento del manejo de la impresora, a travs de unos puertos. Pero estos mismos puertos se pueden ver de otra forma, sencillamente como tres puertos consecutivos de E/S un poco particulares. Para la comunicacin con los puertos se utilizan las instrucciones IN y OUT de ensamblador. IN transfiere informacin desde un puerto de entrada al registro AL si es un byte, y al AX si es una palabra. El formato es: IN reg_acum, puerto OUT transfiere informacin a un puerto de salida desde el registro AL (byte) o el AX (palabra). El formato es: OUT puerto, reg_acum Si consideramos los puertos de datos, estado y control vistos anteriormente, los podemos ver de la siguiente manera:
33
D7 Dato 7 S7 Busy (inv) C7 -- -- D6 Dato 6 S6 ACK# C6 -- -- D5 Dato 5 S5 PE C5 -- -- D4 Dato 4 S4 SLCT IN C4 -- -- D3 Dato 3 S3 ERROR# C3 SELECT (inv) D2 Dato 2 S2 -- -- C2 INIT# D1 Dato 1 S1 -- -- C1 AUTOFD# (inv) D0 Dato 0 S0 -- -- C0 STROBE# (inv) Tabla 6 Es decir, disponemos de dos puertos de salida, uno de 8 bits y otro de 4 bits y un puerto de entrada de 5 bits para el propsito que nosotros decidamos, conociendo las direcciones que ocupan. Recordar el significado de las seales marcadas con "(inv)". Esto quiere decir que estn invertida por hardware. Es decir, si se ejecuta la instruccin OUT 037AH, 0FFh se estn poniendo a 1 todos los bits del registro del puerto de control, pero en el conector externo del puerto, el DB25, aparecera un 1 slo en el pin 16 (INIT#), en los pines 1, 14 y 17 aparecera un cero (STROBE#, AUTOFD# y SELECT respectivamente). La distribucin de seales en los pines del conector de salida del PC (hembra) se muestran a continuacin:
34
Figura 1. Los pines del 18 al 25 estn conectados a GND. Ejemplo de control de hardware externo a travs del puerto paralelo: control de encendido de diodos LED y lectura de pulsadores externos. En la siguiente figura se puede ver el montaje correspondiente a un grupo de 8 diodos LED conectados al puerto de datos, 4 al puerto de control y 5 pulsadores al puerto de estado. Las resistencias en serie con los LEDs sirven para limitar la corriente que circula por el puerto, que no debe ser elevada para no daarlo (del orden de 3-4 mA de salida y 12-15 mA de entrada). Las que estn conectadas a los pulsadores se denominan de pull-up y sirven para fijar un nivel lgico en ausencia de pulsacin. Los LEDs se encendrn cuando haya un cero lgico a la salida del pin correspondiente del puerto.
35 Figura 2 Nota: el bit 7 del puerto de estado y los bits 1, 14 y 17 del de control estn invertidos. Para trabajar con ellos se recomienda el uso de la instruccin OR-Exclusiva (XOR) que, a travs de una mscara, corrija lo anterior despus de leer del puerto de estado o antes de escribir en el de control. Las instrucciones siguientes encenderan los LEDs a modo de un contador binario: mov cx,0FFh ; la cuenta se repetir 256 veces mov ax,0FFh ; primer nmero de la cuenta. Recordar que con un 1 estn apagados mov dx, puerto ; se supone definida puerto=03BCh, por ejemplo cont: out dx, al ; saca al puerto de datos el contenido de al dec ax ; actualiza la cuenta loop cont ; se repite 256 veces out dx,0FFh ; apaga todos los leds
MANEJO DE LA INTERRUPCIN DEL PUERTO PARALELO. El bit 4 del puerto de control, segn la tabla 5, se denomina IRQEN. Este bit habilita o permite que se produzca la interrupcin asociada a la entrada ACK#. Cuando este bit est a 1 y la seal ACK# pasa del nivel lgico 1 al nivel 0 se produce una peticin de interrupcin, que es la IRQ7. En el diseo original del PC, IBM reserv 8 interrupciones hardware, comenzando por la interrupcin 08h, para expansin de interrupciones, que son comnmente conocidas como IRQ0 a IRQ7. As la IRQ0 se corresponde con la interrupcin 08h, la IRQ1 con la 09h, etc. La IRQ7 se corresponde pues con la 0Fh, estando sus vectores a partir de la direccin 0000:003Ch. Para que una peticin de una IRQ llegue a la CPU, sta debe estar permitida, no enmascarada. El puerto 021h est asociado con la
36 mscara de interrupciones de las IRQ. Para habilitar una determinada interrupcin se deber escribir un cero en la posicin correspondiente, sin modificar el resto. As, si lo que se quiere es permitir la IRQ7 habr que poner a cero el bit ms significativo del puerto 021h, como muestra el cdigo siguiente: in al,021h ; lee la mscara de las IRQ and al, 01111111b ; impone un 0 en el bit ms significativo, IRQ7. No modifica el resto out 021h, al ; escribe la mscara Con estas operaciones quedar habilitada la IRQ7. Una vez atendida de la forma que se haya previsto, el programa debe indicar a la CPU que la interrupcin ya ha sido procesada, para ello debe escribir un 1 en el bit 5 del puerto 020h, es decir: mov al, 020h ; carga en al 0010 0000 b out 020h, al ; lo escribe en al puerto 020h Finalmente, tan slo queda por activar el bit que permite que la seal ACK# genere una peticin de IRQ7. Para ello se deber poner a 1 el bit 4 del puerto de control , sin modificar el resto. Cuando no se quiera que se produzca una IRQ7, basta con poner a cero este bit. Al finalizar el programa, no slo se deben restablecer los vectores de interrupcin modificados, sino que tambin se debe inhibir la IRQ7, dejando la mscara del puerto 021h como estaba. Un programa que utilice la interrupcin del puerto paralelo puede tener esta estructura, en lo que se refiere al manejo de dicha interrupcin: Al comienzo: modificar vectores de la interrupcin 0Fh (IRQ7) permitir la interrupcin IRQ7, poner a 0 el bit 7 del puerto 021h Durante la ejecucin, siempre que haga falta: habilitar la interrupcin en el puerto de control, bit 4
37 repetir procesar la interrupcin escribir 020h en el puerto 020h hasta que se deba inhibir inhibir la interrupcin, poniendo un cero en el bit 4 del puerto de control Al terminar inhabilitar la IRQ7, poner a 1 el bit 7 del puerto 021h recuperar los vectores de interrupcin anteriores
4.5. PROGRAMACIN HBRIDA.
PROGRAMACION HIBRIDA LENGUAJE DE PROGRAMACION. La programacin hbrida proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel, todo esto con el fin de escribir programas ms rpidos y eficientes. Turbo Pascal permite escribir procedimientos y funciones en cdigo ensamblador e incluirlas como parte de los programas en lenguaje Pascal; para esto, Turbo Pascal cuenta con dos palabras reservadas: Assembler y Asm. Assembler permite indicarle a Turbo Pascal que la rutina o procedimiento que se est escribiendo est totalmente escrita en cdigo ensamblador. Por otro lado, Asm nos permite incluir bloques de instrucciones en lenguaje ensamblador en cualquier parte del programa sin necesidad de escribir procedimientos completos en ensamblador. En la programacin software, sistemas hbridos inteligentes denotan a los sistemas software que emplean, en paralelo, una combinacin de modelos de inteligencia artificial, mtodos y tcnicas de stos subcampos , cada sistema inteligente natural es un hbrido porque stos desarrollan operaciones mentales tanto en niveles simblicos como sub-simblicos. Desde hace pocos aos se ha ido desarrollando una discusin sobre la importancia en la inteligencia artificial de la integracin de todos stos sistemas. Basados en las nociones de que se haban ya creado simples y especficos sistemas de inteligencia artificial (como sistemas para la visin de computadores, sntesis
38 del habla, etc., o software que emplean alguno de los modelos mencionados arriba) algunos autores proponen a que es ahora el momento de la integracin para crear complejos, grandes sistemas de inteligencia artificial. Investigadores destacados sobre estas ideas son Marvin Minsky, Aaron Sloman, Deb Roy, Kristinn R.Thrisson y Michel Arbib. La metodologa de diseo Creacionista (CDM, por sus siglas en ingls) (ntese en su nombre referencias al deseo humano de ser el Arquitecto) es una filosofa de desarrollo software diseado especficamente para la creacin de grandes sistemas A.I. CDM est basado en pasos de diseo iterativos que guen hacia la creacin de una red de llamados mdulos interactivos, que se comunican por flujos tapados explcitos y mensajes discretos. La organizacin Mindmakers es un portal online para la gente que trabaja en la integracin e incremento de la colaboracin en el campo de la Inteligencia Artificial
4.6. PROGRAMACIN DE PUERTO USB.
Qu es un puerto USB y para qu sirven?
USB proviene de el ingles Universal Serial Bus que significa Bus de Serie Universal. Un puerto USB permite conectar hasta 127 dispositivos. Actualmente es un estndar en toda computadora. Incluso se incluyen al menos dos puertos USB 1.1, o puertos USB 2.0 en los ms modernos. Un puerto USB es una entrada o acceso para que el usuario pueda compartir informacin almacenada en diferentes dispositivos como una cmara de fotos, un pendrive, entre otros, con un computador. Los puertos USB estn diseados para transmitir energa elctrica al dispositivo que se encuentra conectado, de esta manera no se necesita de un cable adicional para conectarse a una toma de corriente. El puerto USB pertenece a un controlador fsico que puede ser parte de la placa base o en una tarjeta de expansin, a este conector se le denomina concentrador raz.
Que es un puerto USB. > Inicio > Computadoras e Internet Un puerto USB es una entrada o acceso para que el usuario pueda compartir informacin almacenada en diferentes dispositivos como una
39 cmara de fotos, un pendrive, entre otros, con un computador. Las siglas USB quieren decir Bus de Serie Universal en ingls. En 1996, IBM, Intel, Northern Telecom, Compaq, Microsoft, Digital Equipment Corporation y NEC, siete empresas relacionadas al mundo de la tecnologa y las comunicaciones crearon esta nueva forma de conectar diversos dispositivos a un solo servidor. De esta manera se fue dejando atrs los antiguos puertos en paralelo y serial y se aument la velocidad de trabajo de los dispositivos a 12 mbps en promedio. Los equipos de Windows se adaptaron rpidamente a esta nueva tecnologa, a lo que ms tarde se sumaron los aparatos Macintosh. Los aparatos conectados a un puerto USB estndar no necesitan estar enchufados a la corriente o disponer de bateras para funcionar. El propio puerto est diseado para transmitir energa elctrica al dispositivo conectado. Incluso puede haber varios aparatos conectados simultneamente, sin necesidad de recurrir a una fuente de alimentacin externa. Una de sus principales caractersticas es su capacidad plug & play. Este concepto se refiere a la cualidad de que con slo conectar el dispositivo al servidor central, ste sea capaz de interpretar la informacin almacenada y reproducirla inmediatamente. Es decir, que el computador y el aparato hablen el mismo idioma y se entiendan entre s. Adems, este sistema permite conectar y desconectar los diferentes dispositivos sin necesidad de reiniciar el equipo. Esta forma de conexin tambin ha ido evolucionando en el tiempo. Desde 1996 ha mejorado su velocidad de transferencia de los datos de 12 mbps a 480 mbps. Lo ltimo en esta tecnologa es una extensin llamada USB on the go que consiste en un puerto que puede actuar tanto de servidor como de dispositivo. Esto depender de la manera en que se conecta el cable. La masificacin de los puertos USB es cada da mayor. Adems de la mejora en la velocidad de transferencia y su cualidad plug & play, su capacidad de conectar los aparatos es muy simple y no requiere de instalaciones complejas ni de intervenir en el hardware de los computadores. Hoy en da, es comn que los discos duros traigan incorporados varios puertos USB para facilitar la conectividad de los aparatos.
40
CULES SON LAS DIFERENCIAS ENTRE USB 1.0, 1.1, 2.0, 3.0 Y THUNDERBOLT?
Algunas tecnologas cambian nuestra forma de trabajar con el PC. Esto es lo que ha ocurrido con el estndar USB. Gracias a l, podemos tener un cable que puede ser usado tanto para copiar pelculas o documentos a un disco duro externo como para conectar cmaras, escneres o impresoras. El estndar USB ha experimentado una gran evolucin en sus caractersticas. Lo cual ha llevado a que surjan varios estndares a lo largo de los aos: USB 1.0. El primero en aparecer. Pensado para funcionar con teclados, ratones y dispositivos que en principio necesitan de un ancho de banda pequeo. Permite trabajar a una velocidad aproximada de 1.5 Megabits por segundo. Tardara aproximadamente 6 horas en copiar una pelcula en MKV de 4 Gigas. Aparece en el ao 1996.
41 USB 1.1. Como no podra ser de otra forma no tarda mucho en disearse otro estndar que supera al anterior. En este caso su velocidad se multiplica por 8 hasta los 12 Megabits por segundo. Tardarias 45 minutos en conseguir copiar esa misma pelcula. Estamos ya en 1998. USB 2.0. Es en este en el que tenemos el mayor salto cuantitativo. Vamos a mejorar la velocidad en 40 veces y llegar a los 480 Megabits por segundo. La misma pelcula del ejemplo anterior tardara poco ms de 1 minuto en copiarse. Estamos ya en el ao 2000. Es muy comn encontrarte PCs que incorporan ambos puertos USB 1.x y 2.0 luego es muy importante conocer a cual estas conectando tus dispositivos sobre todo si vas a realizar copias de archivos muy grandes. USB 3.0. Aparece en 2008. Multiplica la velocidad hasta 4.8 Gigabits, es decir multiplicamos ahora por 10. La misma pelcula tardara apenas unos 10 o 15 segundos en copiarse. Ahora el problema, por primera vez, no es el cable si no que el disco duro o dispositivo que conectes sea tan rpido para poder funcionar a esa velocidad. Adems, como el cable USB cada vez es usado con ms asiduidad para la carga de dispositivos se aumenta la cantidad de energa que este es capaz de proporcionar. Al USB 3.0 y en el mbito de los discos duros externos le aparece un competidor, el estndarSATA 3.0. En este caso lo que se hace es poner un conector en el gabinete o caja de tu PC que conecta directamente a la placa base. La diferencia en velocidad entre un disco duro externo e interno se diluye. La interfaz SATA 3.0 es capaz de funcionar a 6 Gigabits por segundo. Thunderbolt. El estndar USB ha conseguido lo que su propio nombre indica convertirse en universal para casi cualquier tipo de dispositivo que se conecte al PC. Pero hay uno que definitivamente se resiste a esto y es el monitor. Thunderbolt es la creacin de Intel y Apple para dar respuesta a esto. Entre sus caractersticas esta la posibilidad de conectar varios monitores al mismo cable. Otro de sus avances es su capacidad de llevar internamente una lnea PCI Express. Esto te permite, entre otras cosas, que tengas una tarjeta grfica externa a tu equipo que funcione como si estuviera conectada internamente, muy til si quieres tener un laptop que utilices para jugar en tu casa y quieres la mayor autonoma posible cuando viajas con l.
42 En este caso estaramos hablando de velocidades aproximadas de 20 Gigabits por segundo.
CONCLUSION. La programacin de dispositivos es de gran importancia hoy en da para las diversas tecnologas que existen dentro de los ltimos aos los dispositivos mviles se han establecido como una parte importante del acceso a la informacin y aplicaciones estos dispositivos han dejado de ser simples agendas electrnicas o telfonos celulares para convertirse en pequeas computadoras. Se deben de tomar en cuenta las diversas interrupciones que hay con sus parmetros correspondientes. Es indispensable usar las herramientas de desarrollo y emuladores.