UNIDAD IV
Programacin de Dispositivos
NDICE
4. Programacin de dispositivos.....2 4.1 El buffer de video en modo texto......2 4.1.1 Escritura directa en el bfer de vdeo.......4 4.1.2. Ejemplos completos en modo texto.5 4.2 Acceso a discos en lenguaje ensamblador.5 4.2.1. Particiones del DOS...6 4.2.2. Parmetros absolutos de un Disco Duro6 4.2.3. Acceso a dispositivos de almacenamiento.7 4.2.4. Acceso a disco usando lenguaje ensamblador..7 4.3 Programacin del puerto serial10 4.3.1. Explicacin de los registros..11 4.3.2. Abrir un canal asociado a un puerto serie..12 4.3.3. Modificar los parmetros de transmisin........13 4.3.4. Monitorizacin de eventos.13 4.3.5. Escribir en el puerto serie..14 4.3.6. Esperar a que haya algo para leer...15 4.3.7. Leer desde el puerto serie.16 4.4 Programacin del paralelo.17 4.4.1. Conector Paralelo...18 4.5 hbrida..20 puerto Puerto Programacin
Bibliografa......24
4. Programacin de dispositivos
4.1 El buffer de video en modo texto
Se llama modo texto a cualquier modo de vdeo de un ordenador en el que el contenido de la pantalla se representa internamente en trminos de caracteres textuales en lugar de pxeles individuales. Las aplicaciones en modo texto se comunican con el usuario mediante lneas de comandos (CLIs) e interfaces textuales de usuario (TUIs). Muchos juegos de caracteres usados en aplicaciones en modo texto tambin incluyen un conjunto limitado de caracteres semi -grficos predefinidos que pueden usarse para dibujar cajas y otros grficos rudimentarios usados para destacar el contenido o simular widgets u controles como los presentes en las aplicaciones escritas para interfaces grficas (GUIs). Las ventajas de los modos de texto respecto a los grficos incluyen el menor consumo de memoria y la ms rpida manipulacin de pantalla. Adems, las aplicaciones en modo texto tienen unos requisitos de ancho de banda relativamente bajos en uso remoto. Una desventaja obvia del modo texto es la restriccin del contenido de pantalla, que lo hace inviable para muchos tipos de aplicaciones. Una caracterstica importante de los programas en modo texto es que asumen un ancho constante de las fuentes, donde cada carcter tiene la misma anchura en pantalla, lo que permite mantener fcilmente la alineacin vertical cuando se muestran caracteres semi-grficos. Segn el entorno, el buffer de pantalla puede ser directamente accesible, como memoria convencional, para los programas locales. Los programas que muestran salidas en una terminal remota deben enviar secuencias de control especiales para manipular el buffer de pantalla. Los estndares ms populares de dichas secuencias de control son ANSI y VT100. Los programas que acceder al buffer de pantalla mediante secuencias de control pueden perder la sincronizacin con la pantalla real, por lo que muchos programas en modo texto tienen un comando para refrescar toda la pantalla, a menudo asociado con la combinacin de teclas Ctrl+L. La distincin entre los programas en modo texto y grfico puede a veces ser difusa, especialmente en ordenadores con tarjetas VGA, debido a que muchos programas en modo texto recientes llevaron al extremo las posibilidades de dicho hardware manipulando la controladora de vdeo. Por ejemplo, redefinan el juego de caracteres para crear caracteres semi-grficos a medida, e DAVID MONTIEL RAMIREZ
3
incluso simulaban un cursor de ratn grfico redefiniendo la apariencia de los caracteres sobre los que dicho cursor quedaba en cada momento. Tambin pueden usarse estas tcnicas para videojuegos 2D que necesiten aprovechar la mayor velocidad de manipulacin de los modos de texto respecto a los grficos. Muchos programas modernos con interfaz grfica simulan el estilo de los programas en modo texto, especialmente cuando es importante preservar la alineacin vertical del texto, por ejemplo, durante la programacin. Existen tambin componentes software que emulan modos de texto, tales como los emuladores de terminal o la consola de Windows. Bfer de vdeo. Fsicamente se encuentra ubicada en la tarjeta de vdeo, pero forma parte de la memoria RAM del PC, aunque su acceso es mucho ms lento que sta. Aqu se almacenan los datos que posteriormente sern visualizados en el monitor.
En la memoria RAM de vdeo en modo texto, dada una pgina determinada, la primera posicin la ocupa el primer carcter de la primera posicin de la pantalla (esquina superior izquierda: fila 0, columna 0), a continuacin viene el byte del atributo, luego el siguiente carcter de la lnea seguido de su byte de atributo y as sucesivamente. Cuando termina la primera lnea el siguiente carcter se corresponde con la primera posicin a la izquierda de la siguiente
fila y as sucesivamente. Podramos calcular la posicin en memoria de vdeo RAM de cualquier posicin de la pantalla mediante la siguiente frmula: Posicin en memoria = Lnea * 160 + Columna * 2. En el modo de texto slo se puede trabajar con los 256 (de 0 a 255) caracteres ASCII que podemos ver en el Apndice A, cada carcter ocupa una columna de las 80 que caben en cada una de las 25 filas posibles. Un pixel en modo grfico es el menor puntito que podemos iluminar en la pantalla, en el modo 13h es de 320 puntitos por cada una de las 200 lneas posibles. En ambos casos empezamos a contar desde la esquina superior izquierda, avanzando hacia la derecha y cuando llegamos al extremo derecho bajamos a la fila inmediatamente inferior en su extremo izquierdo.
La ventaja que obtenemos escribiendo directamente en la memoria de vdeo es mucha mayor rapidez, puesto que las interrupciones son muy lentas, en cuanto a un programa crtico en tiempo, como puede ser un juego. Por contra saltarse el mtodo estndar, como son las interrupciones, supone un riesgo de encontrarse un hardware que no soporte nuestro mtodo de acceso a la memoria de vdeo, en este caso los resultados pueden ser impredecibles. Veamos ahora un ejemplo muy interesante de escritura directa al bfer de vdeo para escribir en cada pgina de vdeo:
Controlador de Disco. Dispositivo electrnico que establece la conexin entre el procesador y el disco. Por una parte, enlaza fsicamente la unidad de disco con el bus de datos (camino por el que fluyen los datos dentro del ordenador). Y por otro lado, transforma las peticiones del sistema operativo en instrucciones especiales que actan directamente sobre la unidad de disco. Disco. Dispositivo magntico que almacena la informacin. Normalmente, los discos se componen de una superficie circular plana de plstico (disquete) o metal (disco duro) recubierta de algn xido magnetizable. La informacin se graba sobre el disco mediante alteraciones de su superficie con un campo magntico.
Si se trata de una particin extendida, los datos de la entrada corresponden al total de las unidades lgicas que almacena. La particin extendida posee su propia tabla de particiones, pero slo se usan las dos primeras entradas. La primera entrada corresponde a la primera unidad lgica de la particin extendida, y la segunda indica si hay otra unidad lgica. En caso afirmativo, sta contiene de nuevo una tabla de particiones. Con ello se crea una especie de lista enlazada que permite acceder a la informacin de las diferentes particiones.
Para leer o escribir en un disco, no se realiza byte a byte, sino ms bien en bloque de bytes, debido a que el acceso a disco implica movimientos mecnicos adems de que el acceso se da por sectores; en este proceso no intervienen el CPU, puesto que solo enva los comandos a la interface que maneja la unidad de disco y est es la que se encarga de leer o escribir informacin de un rea en especial de memoria, llamada DMA; en este proceso es conocido acceso directo a memoria. Rutinas que permiten lectura y escritura absoluta de sectores, as como la determinacin del espacio libre disponible en un disco. Rutina_AbsolutedRead: Transfiere el contenido de uno o ms sectores del disco al buffer especificado, accesando directamente a los sectores lgicos. En caso de error, se enciende el bit de acarreo y AX contiene el cdigo del error. Rutina_AbsoluteWrite: Transfiere el contenido del buffer especificado a uno o ms sectores de disco, accesando directamente a los sectores lgicos. En caso de error, se enciende el bit de acarreo y AX contiene el cdigo del error.
Rutina_FreeDiskSpace: Devuelven en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de acarreo.
10
Registro base+1: Tiene 2 funciones Baud Rate Divisor High (BRDH): Velocidad del canal, parte alta. Interrupt Enable Register (IER): Activar o desactivar las interrupciones para el puerto COM.
Registro base+2: Interrupt ID Register (IIR): Controla la prioridad de las interrupciones. Registro Base+3: Line Control Register (LCR): Controla los parmetros de configuracin del canal serie (velocidad).
Registro base+4: Modem Control Register (MCR): Activa las seales del MODEM.
Registro base+5: Line Status Register (MSR): Muestra el estado del modem.
Registro base+6:
11
Debemos configurar correctamente el puerto serial antes de trabajar con l. Y para configurarlo hacemos lo siguiente: Primero configuramos el LCR, pero poniendo el bit DLAB a 1. Luego configuro el DRDL, seguidamente el BRDH y finalmente vuelvo a configurar el LCR con los mismos bits que antes, pero esta vez el bit DLAB a 0.
Stop: Indica el nmero de bits de stop que enviar (o esperar) del puerto. Lo normal es poner un 0 en este bit para conseguir un bit de stop. Pero si ponemos un 1, el canal usar 1.5 bits de stop si el nmero de bits de la palabra (configurada en Num) es de 5. En caso de que sean ms de 5, se usaran 2 stop bits. Puede que en determinados momentos nos sea de utilidad, pero yo lo nico que veo es que enva 10 bits en lugar de 9, cosa que implica ms tiempo en l envi, as que siempre ponemos un 0 (1 stop bit). Paridad: Indica si hay paridad en la comunicacin serial. Con un 0 le diremos que nos queremos paridad, y con un 1 que s. La paridad es una manera de detectar errores, pero debemos programar nuestro programa para que lo detecte. As que de momento ponemos un 0. Tipo: Este bit nos indicar el tipo de paridad que vamos a usar. Con un 0 le indicaremos que vamos a mirar la paridad de modo impar, mientras que con 1 miraremos la paridad de modo par. Stick: Indica el nivel que usaremos para la paridad, si ponemos un 0, contaremos el nmero de 1 para la paridad. Y si ponemos un 1 contaremos el nmero de 0 para la paridad. Break: Fuerza un corte de la comunicacin. Si lo dejamos a 0 no pasar nada, pero si lo ponemos a i cortamos la comunicacin y forzamos la salida a 0.
12
DLAB: Bit interno, de uso no es decisivo. Lo que hace es configurar una vez el puerto poniendo a 1 este bit, configurar la velocidad (los 2 registros) y luego volver a configurar el puerto poniendo un 0.
13
1. EV_RXCHAR: se ha recibido un carcter y se a colocado en el buffer de entrada. 2. EV_TXEMPTY: de ha enviado el ltimo carcter del buffer de salida. Para nuestro ejemplo slo monitorizaremos el evento EV_RXCHAR.
l -= n; p += n; } }
16
return 0; } Esta funcin coloca la funcin WaitCommEvent en un bucle infinito, y cuando detecta el evento EV_RXCHAR, hace una llamada a la funcin LeeSerie(), que procesa los datos recibidos. Por supuesto, en algn lugar del programa, debemos lanzar el hilo, esto se hace con la funcin CreateThread. hHilo = CreateThread(NULL, 0, Hilo, ¶m, 0, &id);
17
18
Podemos localizar la direccin precisa de cada puerto paralelo en una PC de las siguientes formas: Desde DEBUG: Mediante el comando d 0:408 40d Desde Windows: Inicio / Configuracin / Panel de Control / Sistema / Administrador de Dispositivos / Puertos (COM y LPT) / Puerto de Impresora / Recursos. Programando el Puerto Paralelo Control de Impresora: Se envan datos comandos seguidos de una seal strobe que ocasiona que la impresora lea el puerto y responda por las lneas de status cuando est lista para recibir ms informacin (not bussy) en su defecto, indica si hay algn error Opciones para Controlar el Puerto Paralelo [4]: Acceso Directo: Usando ensamblador o un lenguaje de programacin, leyendo variables del sistema, manipulando bits y leyendo/escribiendo puertos Via BIOS: La INT 17H del BIOS prove 3 servicios: inicializar, imprimir y status (slo trabajan para LPT1)Via DOS: La INT 21H servicio 05h escribe un caracter y el servicio 40h que trabaja con archivos.
El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y seales utilizadas podemos ver en la siguiente figura:
19
Caractersticas del puerto paralelo LPT En el mbito de la electrnica comercial se le denomina como conector DB25 ("Dsubminiature type B, 25 pin"), esto es D-subminiatura tipo B, con 25 huecos para pines. Se utilizaba principalmente para la conexin de impresoras, unidades de lectura para discos ZIP y escneres. Para conectar y desconectar los dispositivos, as como para que la computadora los reconozca de manera correcta, es necesario apagar y reiniciar la computadora. Modos del puerto paralelo LPT a) Modo SPP: significa ("Standar Parallel Port") "puerto paralelo estndar". Es el estndar con que se identific al puerto paralelo inicialmente, es el mas compatible y actualmente este modo hay que activarlo desde el BIOSSETUP de la computadora para que el sistema reconozca impresoras antiguas. Permite una velocidad de transferencia entre 150KiloBytes/segundo (KB/s) a 500 KB/s. b) Modo EPP: significa ("Enhanced Parallel Port") su traduccin al espaol es puerto paralelo mejorado. Se dise para leer y escribir a la velocidad del bus ISA alcanzando velocidades de transferencia de hasta 1 MB/s. Permite la comunicacin bi-direccional entre la computadora y el dispositivo (IEEE1284) y es compatible con SPP. Permite una velocidad de transferencia entre 500 KiloBytes/segundo (KB/s) a 2 MegaBytes/segundo (MB/s). c) Modo ECP: significa ("Enhanced Capabilities Port") su traduccin al espaol es puerto de capacidad mejorada. Posee capacidad DMA (Direct Memory Access) capacidad directa para envo de datos hacia la memoria RAM, lo que reduce el tiempo de respuesta; supera la DAVID MONTIEL RAMIREZ
20
transferencia de 1 MegaByte/segundo (MB/s) y permiten la emulacin de otros modos cuando sea necesario. Permite la comunicacin bi-direccional entre la computadora y el dispositivo (IEEE1284), adems es compatible con SPP y EPP.
4.5.1 Operadores
Operadores Aritmticos: Pueden
21
emplearse libremente (+), (-), (*) y (/). En este ltimo caso la divisin es siempre entera. Tambin se admiten los operadores MOD (resto de la divisin) y SHL/SHR (desplazar a la izquierda/derecha cierto nmero de bits). Operadores Lgicos: Pueden ser el AND, OR, XOR y NOT. Realizan las operaciones lgicas en las expresiones. Operadores relacionales: Devuelven condiciones de cierto (0FFFFh o 0FFh) o falso (0) evaluando una expresin. Pueden ser: EQ (igual), NE (no igual), LT (menor que), GT (mayor que), LE (menor o igual que), GE (mayor o igual que). Operadores de retorno de valores: Operador SEG: devuelve el valor del segmento de la variable o etiqueta, silo se puede emplear en programas de tipo EXE: Operador OFFSET: devuelve el desplazamiento de la variable o etiqueta en su segmento:
Si se desea obtener el offset de una variable respecto al grupo (directiva GROUP) de segmentos en que est definida y no respecto al segmento concreto en que est definida:
Operador .TYPE: Devuelve el modo de la expresin indicada en un byte. El bit 0 indica modo relativo al cdigo y el 1 modo relativo a datos, si ambos bits estn inactivos significa modo absoluto. El bit 5 indica si la expresin es local (0 si est definida externamente o indefinida); el bit 7 indica si la expresin contiene una referencia externa. El TASM utiliza tambin el bit 3 para indicar algo que desconozco. Este operador es til sobre todo en las macros para determinar el tipo de los parmetros:
22
Operador TYPE: devuelve el tamao (bytes) de la variable indicada. No valido en variables DUP:
Operadores MASK y WIDTH: Informan de los campos de un registro de bits (base RECORD). Operadores de Atributos: Operador PTR: redefine el atributo QWORD, TBYTE) o el de distancia de tipo (BYTE, WORD, DWORD,
(NEAR o FAR) de un operando de memoria. Por ejemplo, si se tiene una tabla definida de la siguiente manera: Para colocar en AL el primer byte de la misma, la instruccin MOV AL, tabla es incorrecta, ya que tabla (una cadena 10 palabras) no cabe en el registro AL. Lo que desea el programador es indicrselo en este caso explcitamente al ensamblador de la siguiente manera:
Trabajando con varios segmentos, PTR puede redefinir una etiqueta NEAR de uno de ellos para convertirla en FAR desde el otro, con objeto de poder llamarla. Operadores CS:, DS:, ES: y SS: El ensamblador genera un prefijo de un byte que indica al microprocesador el segmento que debe emplear para acceder a los datos en memoria. Por defecto, se supone DS para los registros BX, DI o SI (o sin registros de base o ndice) y SS para SP y BP. Si al acceder a un dato este no se encuentra en el segmento por defecto, el ensamblador aadir el byte adicional de manera automtica. Sin embargo, el programador puede forzar tambin esta circunstancia:
23
24
Bibliografa
http://www.abreojosensamblador.net/Productos/AOE/html/Pags/Cap08.html http://expo.itch.edu.mx/view.php?f=asm_31 http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r86275.PDF Ensamblador del 80/86.Facultad de informtica. Universidad Apuntes realizados por Juan Fernndez Peinador. de Murcia.
25