Buses y Periféricos (05/06) Práctica 3 PRACTICA 3 Pequeño entorno de edición El objetivo de esta práctica es utilizar las interrupciones de BIOS y MSDOS para presentar un pequeño entorno de edición en el monitor. Este entorno consistirá en una sección delimitada de la pantalla en la cual se irán insertando los caracteres que pulsemos por el teclado. El programa tendrá que limpiar la pantalla. Detectar una pulsación de teclado. Obtener la tecla pulsada. Escribirla en la siguiente localización de pantalla. Incrementar esta localización contemplando los límites impuestos. Etc. Cuando los caracteres escritos alcanzan el final de la última línea debe realizarse un desplazamiento de la pantalla (scroll) para seguir escribiendo. Se detectara cuándo se ha pulsado un espacio de manera que se pueda delimitar una palabra completa. Si en algún momento una palabra queda cortada por haber alcanzado el borde, deberá trasladar toda la palabra a la línea siguiente. Las mayúculas y los acentos serán contemplados, aunque el alumno no tendrá que hacer nada en particular, pues la interrupción de lectura de teclado devuelve el código ascii del carácter en mayúscula o acentuado cuando se ha pulsado una tecla acompañada de shift o inmediatamente después de la pulsación de una tilde. Consideraciones. Limpiar la pantalla y Desplazamiento. Para limpiar la pantalla, igual que para realizar el scrolling se utilizará la función 6 o 7 de la interrupción 10h de BIOS. La Interrupción 10h es la que agrupa todas las acciones de bajo nivel a realizar sobre la interfaz de vídeo. En esta práctica utilizaremos unas pocas. Las funciones 6 y 7 realizan un scrolling selectivo de la pantalla, la 6 hacia abajo y la 7 hacia arriba. Los parámetros son los siguiente. AH: número de la función AL: número de líneas a desplazar BH: atributo a usar como fondo de borrado (7h) CH: coordenada y, superior izquierda de la ventana 1 Buses y Periféricos (05/06) Práctica 3 CL: coordenada x, superior izquierda de la ventana DH: coordenada y, inferior derecha de la ventana DL: coordenada x, inferior derecha de la ventana Con un valor de AL a 0h se borra toda la ventana. Con un valor distinto de cero realiza el desplazamiento del número de líneas solicitado Detectar una pulsación de teclado. Para ello utilizaremos una interrupción de MSDOS, un nivel algo superior que las interrupciones de BIOS. La interrupción 21H función 8 espera hasta que se pulse una tecla y devuelve el código ascii asignado en AL. Ya se ha contemplado si está pulsado el bloqueo de mayúsculas o la tecla instantánea. El tratamiento de las teclas de la sección expandida es ligeramente distinto – acudir a la documentación -, pero nosotros no utilizaremos tales teclas en esta práctica. AH=8 devuelve AL= código ascii de la tecla pulsada Escribir en la siguiente localización. En primer lugar deberíamos colocar el cursor en la posición inicial de la ventana. A continuación deberíamos escribir el carácter leído en la posición del cursor y luego deberíamos actualizar el cursor. Hay que realizar las comprobaciones pertinentes para que cuando el cursor llegue al final de la fila en la ventana, se le sitúe al comienzo de la fila siguiente. Para situar el cursor en un punto de pantalla hay que acudir otra vez a la interrupción 10h de BIOS. La función 2 realiza tal acción. Son sus parámetros: AH=2h BH=0 designa la página de trabajo, habitualmente 0 DH= fila donde se colocará el cursor DL= columna donde se colocará el cursor Escribir un carácter en pantalla se puede realizar con la interrupción 21h de MSDOS. Con su función 2. Parámetros AH=2h DL= código ascii 2 Buses y Periféricos (05/06) Práctica 3 Esta función ya actualiza la posición del cursor. No obstante no tienen en cuenta la ventana que hemos determinado por lo que debemos leer la nueva posición del cursor y verificar que no alcancemos el final de una línea dentro de la ventana, en cuyo caso debemos resituar la posición del cursor al comienzo de la siguiente línea. La función 3h de Int10h lee la posición actual del cursor. AH=3h BH=0 página. devuelve CH=línea inicial del cursor CL=línea final del cursor DH=fila DL=columna Desplazar el contenido dela ventana para hacer hueco a la siguiente línea. Para ello utilizaremos la misma función que ya empleamos para borrar el contenido de la ventana. Antes de escribir los caracteres hay que inspeccionarlos en busca de códigos especiales. Tendremos en cuenta el código de espacio para delimitar palabras y el cr que implica saltar al comienzo de la línea siguiente (no se debe imprimir este último carácter porque la interrupción 21h función 2h no tiene en cuenta nuestras limitaciones de ventana y saltaría al comienzo de la siguiente línea de pantalla. Formateo de palabras Para tener en cuenta que no se corten las palabras en la edición sería conveniente que cada vez que se detecte un comienzo de palabra (primer carácter después del espacio) se se fuera almacenando la palabra en memoria, así cómo la posición donde se coloca el primer carácter de la misma en la pantalla. Si se detecta que queda cortada se borrará todo lo escrito a partir de la posición almacenada y se escribirá la palabra completa en la siguiente línea. 3 Buses y Periféricos (05/06) Práctica 3 Realización: El alumno realizará un programa en ensamblador que presentará, debidamente comentado en una memoria debidamente documentada, al profesor de la asignatura. El mínimo exigible es el expuesto arriba, pero el alumno tiene libertad para introducir cuantas variaciones desee: letras coloreadas, un borde para la zona de escritura, borrado y coloreado del entorno exterior a la zona de escritura… 4 Buses y Periféricos (05/06) Práctica 3 En la siguiente página aparece documentación sobre las interrupciones de BIOS e información sobre el lenguaje ensamblador. http://www.iro.umontreal.ca/~feeley/cours/ift2240/doc/assembly/int14.html La Rom Bios de IBM, Ray Duncan Madrid : Anaya Multimedia, 1989 INF 681.31.0 DUN rom/TEL 681.31.0 DUN rom PC interrupts : a programmer's reference to BIOS, DOS, and third-party calls / Ralf Brown and Jim Kyle. -2nd ed.. -- Reading (Massachusetts) : Addison-Wesley, 1994 TEL 681.31.0 BRO pc Assembly language programming for the IBM Personal Computer / David J. Bradley. -- Englewood Cliffs (New Jersey) : Prentice Hall, 1984 INF 800.92 BRA ass 8080/8085 assembly language programming / by Judi N. Fernandez, Ruth Ashley. -- New York : John Wiley & Sons, 1981 INF 800.92 FER int BIG S-2 80386/80286 assembly language programming / William H. Murray, Chris H: Pappas. -- Berkeley (California) : Osborne McGraw-Hill, 1986 INF 681.31.0 MUR och 80386/80286 programación en lenguaje ensamblador. -- Madrid : Osborne McGraw-Hill, 1987 INF 800.92 MUR och Guía del programador en ensamblador para IBM PC, XT, AT y compatibles / Peter Norton, John Socha ; [traducción, José Félix Rábago]. -- [1ª ed.]. -- Madrid : Anaya Multimedia, 1988 INF 681.31.0 NOR gui BIG S-2 Guía de programación en lenguaje ensamblador. -- Las Palmas de Gran Canaria : Universidad de Las Palmas de Gran Canaria, Escuela Universitaria de Informática, 1994 INF 681.31.0 PAD gui 8088-8086/8087 : programación ensamblador en entorno MS DOS / Miguel Angel Rodríguez-Roselló. -Madrid : Anaya Multimedia, 1992-1987 INF 800.92 ROD och 5