Sei sulla pagina 1di 8

Perifricos Acceso a las rutinas BIOS del teclado y video I Objetivo: Implementar la biblioteca de funciones conio.

h a partir de las subfunciones BIOS para la gestin del teclado y video.

Bibliografa: Tischer, PC Interno, apndice A. Marcombo, 1993. Ayuda de Borland C. Nmero de sesiones: 2 Fundamento terico La memoria BIOS de cualquier PC contiene un conjunto de rutinas software para gestionar distintos dispositivos a nivel bsico, tales como el teclado, el video, el ratn o las unidades de disco magntico. Estas rutinas son, de hecho, independientes del SO y se ejecutan a partir de interrupciones. Una interrupcin es un evento que provoca que la CPU detenga su tarea actual y pase a ejecutar inmediatamente una determinada rutina. La comunicacin entre la unidad bsica y los perifricos se realiza frecuentemente por medio de estas interrupciones. Las rutinas de interrupcin de la BIOS pueden ser activadas desde un programa. Para ello, es preciso especificar qu rutina debe ejecutarse y los parmetros que sta precise. Cada interrupcin tiene asociada un nmero de rutina, bajo el cual se aglutinan a su vez a diversas subrutinas o subfunciones. As pues, para ejecutar una rutina de interrupcin especfica hay que indicar, por un lado, un nmero de interrupcin y, por otro, el nmero de subfuncin. Adems, una subfuncin suele necesitar unos determinados parmetros de entrada y quizs devuelva una serie de valores al terminar de ejecutarse. Para pasar los parmetros de entrada se utilizan algunos de los registros internos de la CPU, a los que es necesario asignarle los distintos parmetros de entrada antes de invocar a la rutina de servicio de interrupcin. Si la subfuncin devuelve valores, stos se encuentran en los registros internos justo al acabar de ejecutarse la subfuncin. Las llamadas a las interrupciones por software se pueden realizar en un lenguaje de alto nivel mediante funciones ya implementadas para ello, no es necesario recurrir al lenguaje ensamblador. En esta primera prctica vamos a utilizar la funcin int86() , que viene definida en el fichero dos.h de varios compiladores de C1. La sintaxis de dicha funcin (usando Turbo C o Borland C) es la siguiente: #include <dos.h> int int86(int intno, union REGS *inregs, union REGS *outregs); donde intno indica el nmero de interrupcin que se desea ejecutar; en inregs se especifican los
1 Para hacer esta prctica se necesita un compilador que contenga esta biblioteca, como Turbo C, Borland C o djgpp. El entorno Dev-Cpp no puede utilizarse por no disponer de ella. Prcticas de Perifricos 1 de 8 Teclado y Vdeo I

valores de los registros antes de la llamada, y en outregs se obtienen los valores de los registros tras ser ejecutada la rutina correspondiente. Tanto inregs como outregs se declaran como una union de tipo REGS que est definida como sigue: union REGS { struct WORDREGS x; struct BYTEREGS h; }; es decir, se puede acceder a los registros internos bien como registros de 16 bits, bien como registros de 8 bits. Las estructuras BYTEREGS y WORDREGS estn tambin definidas: struct BYTEREGS { unsigned char al, ah, bl, bh; unsigned char cl, ch, dl, dh; }; struct WORDREGS { unsigned int ax, bx, cx, dx; unsigned int si, di, cflag, flags; }; Ejemplo: funcin en C que permite modificar el modo de video actual #define BYTE unsigned char /* Selecciona el modo de video deseado */ void selecciona_modo_video(BYTE modo) { union REGS inregs, outregs; inregs.h.ah = 0x00; inregs.h.al = modo; int86(0x10,&inregs,&outregs); return;

Como se puede apreciar en este ejemplo, se llama a la interrupcin de video (10h). Se debe asignar al registro AH de la unin inregs el valor de la subfuncin que se va a ejecutar (0x00). Esta subfuncin admite como parmetro de entrada el modo de video que se desea activar y dicho valor se pasa a travs del registro AL. En este caso, no es preciso devolver ningn valor, as que los valores que tengan los registros de la unin outregs tras ejecutarse esta interrupcin no son relevantes.

Prcticas de Perifricos

2 de 8

Teclado y Vdeo I

La interrupcin BIOS de teclado Las subfunciones para gestionar el teclado usan la interrupcin de la BIOS 16h. En esta primera prctica slo haremos uso de la subfuncin 1, que permite detectar la pulsacin de una tecla. - Deteccin de tecla pulsada Nmero de interrupcin: 16h Nmero de funcin: 1 Entrada: AH = 1 Salida: Zero-flag = 0 si hay una tecla en el buffer Zero-flag = 1 el buffer est vaco

Nota: El flag del cero es el bit 6 del registro flags (el primer bit es el bit 0!).
Bit: Flag: 15 14 13 12 11 10 9 8 O D I 7 6 5 4 A 3 2 P 1 0 C

T S Z

La interrupcin BIOS de vdeo La comunicacin con la tarjeta de vdeo se puede realizar a travs de la interrupcin nmero 10h. Asignando distintos valores al registro AH, es posible acceder a diversas subfunciones que afectan a la salida de caracteres por pantalla. - Seleccionar el modo de vdeo Nmero de interrupcin: 10h Nmero de funcin: 0 Entrada: Salida: AH = 0 AL = modo No tiene

Nota: Algunos posibles modos se listan en la Tabla I.


- Averiguar el modo de vdeo actual Nmero de interrupcin: 10h Nmero de funcin: Fh Entrada: AH = Fh Salida: AL = modo actual AH = nmero de columnas (slo en los modos de texto)

Prcticas de Perifricos

3 de 8

Teclado y Vdeo I

Modo 0h 1h 2h 3h 4h 5h 6h 7h dh eh fh 10h 11h 12h 13h

Tipo

Resolucin

Colores 16 tonos de gris 16 colores 16 tonos de gris 16 colores 4 colores 4 colores 2 colores monocromo 16 colores 16 colores monocromo 16 colores 2 colores 16 colores 256 colores

texto 40x25 texto 40x25 texto 80x25 texto 80x25 grfico 320x200 grfico 320x200 grfico 640x200 texto 80x25 grfico 320x200 grfico 640x200 grfico 640x350 grfico 640x350 grfico 640x480 grfico 640x480 grfico 320x200 Tabla I. Modos de vdeo.

- Fijar el tamao del cursor en modo texto Nmero de interrupcin: 10h Nmero de funcin: 1 Entrada: AH = 1 CH = nmero de lnea inicial (los 4 bits menos significativos) CL = nmero de lnea final (los 4 bits menos significativos) Salida: No tiene

Nota: Los 4 bits ms significativos de CL y CH deben estar a 0, salvo cuando se quiera hacer desaparecer el cursor, en cuyo caso los bits 5 y 6 de CH se deben poner a 01, valiendo 0 el resto de los bits.
- Colocar el cursor en una posicin determinada Nmero de interrupcin: 10h Nmero de funcin: 2 Entrada: AH = 2 DH = nmero de fila (00h indica arriba del todo) DL = nmero de columna (00h indica izquierda del todo) BH = 0 No tiene

Salida:

Prcticas de Perifricos

4 de 8

Teclado y Vdeo I

- Obtener tamao y posicin del cursor Nmero de interrupcin: 10h Nmero de funcin: 3 Entrada: Salida: AH = 3 BH = 0 CH = tamao/nmero de lnea inicial CL = tamao/nmero de lnea final DH = posicin/fila (00h indica arriba del todo) DL = posicin/columna (00h indica izquierda del todo)

- Escribir un carcter en pantalla Nmero de interrupcin: 10h Nmero de funcin: 9 Entrada: AH = 9 AL = cdigo ASCII del carcter BL = color BH = 0 CX = nmero de repeticiones No tiene

Salida:

Nota: Escribe un carcter en la posicin actual del cursor. En cuanto al byte del color, el primer cuarteto fija el color de fondo y el segundo cuarteto el color del carcter (ver ayuda de Borland C sobre textattr)
- Desplazar zona de pantalla hacia arriba (scroll vertical) Nmero de interrupcin: 10h Nmero de funcin: 6 Entrada: AH = 6 AL = nmero de lneas a desplazar BH = color para los espacios en blanco CH = lnea de la esquina superior izquierda CL = columna de la esquina superior izquierda DH = lnea de la esquina inferior derecha DL = columna de la esquina inferior derecha No tiene

Salida:

Nota: Desplaza una zona de la pantalla delimitada por los valores de los registros CH, CL, DH y DL tantas lneas hacia arriba como indique el registro AL. Si AL=0 entonces no se desplaza, sino que borra esa zona.
Prcticas de Perifricos 5 de 8 Teclado y Vdeo I

- Desplazar zona de pantalla hacia abajo (scroll vertical) Nmero de interrupcin: 10h Nmero de funcin: 7

Nota: Es anloga a la anterior variando nicamente el sentido del desplazamiento vertical.


Realizacin prctica Usando las subfunciones expuestas en este guin, debe implementar en C/C++ un conjunto de funciones similares a las que ofrece la biblioteca conio.lib (Console Input Output Library), que permiten realizar tareas tales como cambiar la posicin del cursor, borrar la pantalla, cambiar el color del texto, etc. Los requisitos mnimos se valorarn sobre 7 puntos como mximo, los ampliados se valorarn con 3 puntos ms como mximo. Requisitos mnimos: 1. Realizar las siguientes funciones: a. b. c. d. e. f. g. h. i. j. k. l.

misma

kbhit(): indica si se ha pulsado alguna tecla gotoxy(): coloca el cursor en una posicin determinada wherex(): indica la posicin x actual del cursor wherey(): indica la posicin y actual del cursor clrscr(): borra toda la pantalla clreol(): borra una lnea desde la posicin actual del cursor hasta el final de la textcolor(): modifica el color de primer plano con que se mostrarn los caracteres textbackground(): modifica el color de fondo con que se mostrarn los caracteres cputchar(): escribe un carcter en pantalla con el color indicado actualmente scrollup(): desplazar toda la pantalla una lnea hacia arriba scrolldown(): desplazar toda la pantalla una lnea hacia abajo setcursortype(): fijar el aspecto del cursor, debe admitir tres valores: INVISIBLE,

NORMAL y GRUESO. m. setvideomode(): fija el modo de video deseado n. getvideomode(): obtiene el modo de video actual

Estas funciones debe incluirlas en un fichero distinto del que contenga a la funcin principal, con objeto de poder usarlo en el futuro como una biblioteca de funciones que pueda enlazar con otros programas (miconio.c y miconio.h). 2. En un fichero aparte, realice un programa principal que utilice todas las funciones anteriores y permita comprobar su correcto funcionamiento. Requisitos ampliados:

Prcticas de Perifricos

6 de 8

Teclado y Vdeo I

1. Realice una funcin que permita dibujar un recuadro en la pantalla. Recibir como parmetros las coordenadas superior izquierda e inferior derecha del recuadro, el color de primer plano y el color de fondo. Use esta funcin en la realizacin de esta prctica para dividir la pantalla y crear una interfaz agradable. 2. Realice un men de opciones navegable mediante las teclas de flecha (u otras), iluminando la opcin correspondiente, que es la que se activar al pulsar ENTER. Use este men para la realizacin de la prctica. Consejos: 1. Trate de implementar las funciones lo ms similares posibles a las anlogas de la librera del C. En caso de duda, lea la ayuda referente a cada una de ellas para ver el nmero y tipo de parmetros que requieren, as como los valores que devuelven. Es ms, puede probar usando la funcin original para verificar que la que usted implemente la sustituye perfectamente. 2. Trate de que las funciones que implemente sean lo ms independientes del contexto posible. Por ejemplo, no use instrucciones de E/S, mensajes ni cosas similares en el cdigo de las funciones de la biblioteca miconio.c. 3. No implemente funciones complejas que sirvan para varias cosas a la vez. Implemente una funcin distinta por cada una de las que se requieren. 4. No use los mismos identificadores que los que use su compilador de C para nombrar a las funciones. 5. Recuerde que, si en vez de usar el compilador de Borland (Turbo C, Turbo C++ o Borland C++) usa djgpp, pueden existir alguna leve diferencia en las llamadas a int86(), las definiciones de BYTEREGS y WORDREGS. 6. Si tienen algn problema con la versin de Windows que usan en su ordenador personal, pueden instalarse una Mquina Virtual en su ordenador (por ejemplo, Virtual Box) con Windows 98 o MS-DOS, instalar el compilador correspondiente y hacer la prctica sobre ella.

Prcticas de Perifricos

7 de 8

Teclado y Vdeo I

Aclaraciones sobre la evaluacin de las prcticas Tanto en esta prctica como en las sucesivas, se tienen en cuenta distintos aspectos para evaluarlas, no es slo una cuestin de que ms o menos funcione lo que se pide. Por ejemplo, los requisitos mnimos que indica en esta prctica se valorarn con un mximo de 7 puntos, pero para obtenerlos no basta con codificar las funciones indicadas, sino que se tienen en cuenta los siguientes factores (lo mismo respecto de los requisitos ampliados):

Funcionalidad: deben satisfacerse los requisitos funcionales exigidos en el guin


prctica cutre, descuidada, difcil de manejar, que usa trucos y combinaciones extraas para conseguir que funcione, con errores en tiempo de ejecucin aleatorios, que deja sin probar la mitad de las cosas que se piden, ..., que otra que cuide la interfaz de usuario, sea cmoda de utilizar y permita realizar una correccin completa y gil de las funcionalidades exigidas, lo que adems demuestra que se han comprendido los conceptos desarrollados en la prctica.

Interfaz y facilidad de uso del programa desarrollado para probarla: no se valora igual una

Cdigo y estructura del programa y libreras desarrolladas: el cdigo fuente del programa debe ser legible para facilitar su correccin. Se valorar la estructura modular de dicho cdigo fuente, as como la inclusin de comentarios, la organizacin del cdigo, el uso de identificadores autocontenidos, la ausencia de avisos (warnings) de compilacin, etc. Presentacin de la memoria de prcticas: aunque slo se exija presentar el cdigo fuente
impreso, se valora obviamente el formato del mismo. Se aprecia que la documentacin est ordenada, que no haya saltos de lnea o pgina que corten el cdigo fuente impreso por la mitad, que use un tipo de letra no proporcional que indente el cdigo correctamente, que use un tamao de letra apropiado, con espaciadores adecuados, etc, que facilite la lectura del cdigo fuente, que incluya el nombre y apellidos de los estudiantes, el ttulo de la prctica, etc.

fecha acordada.

Fecha de presentacin: se penalizar el retraso de entrega de las prcticas respecto de la

Prcticas de Perifricos

8 de 8

Teclado y Vdeo I

Potrebbero piacerti anche