Práctica 1. Manejo de recursos y elementos básicos

(Este enunciado será explicado en la primera clase que corresponda a cada grupo)



Objetivos didácticos:

- Realizar un primer programa COMPLEJO en ensamblador
- Aprender el uso de librerías
- Acceso tanto a servicios del S.O. y BIOS como a servicios propios
- Manejo del teclado, captura de teclas pulsadas
- Creación de ficheros Makefiles (PERO MAKEFILES DE VERDAD)
 

Objetivo de la Práctica:

Realizar un programa en ensamblador y dotarle de un mecanismo de comunicación con un módulo hardware a través de un driver.

Descripción:
El alumno realizará un programa complejo en ensamblador, dividido en varias librerías (al menos deberá haber dos librerías diferentes). Este programa será el clásico juego del tenis.

Al comienzo se preguntará sobre el modo de juego, que puede ser:

La pantalla se dividirá en dos partes, izquierda y derecha, representando el campo de cada jugador. En la opción de "Un jugador" habrá una barra en la parte izquierda, representando la raqueta, que se desplazará de arriba-abajo utilizando dos teclas y una "pelota" que chocará contra la parte derecha de la pantalla. En la parte superior de la pantalla se deberá presentar el nombre del jugador, la puntuación actual y la máxima puntuación obtenida por ese jugador.

En la opción "Dos jugadores" la pantalla se divide en dos campos, con dos raquetas. En este caso, en la parte superior de la pantalla se deberá presentar el nombre del jugador 1, su puntuación actual y la máxima puntuación obtenida por ese jugador. Todos estos datos estarán grabados en la memoria I2C que se encuentra conectada en el puerto paralelo.

La temporización, en esta práctica, se puede realizar utilizando bucles. Se valorará el uso de la interrupción 1Ch o del RTC, que sí se deberán utilizar en las siguientes prácticas.

El juego terminará cuando se haya llegado a la máxima puntuación predefinida. Si durante el juego se pulsa la tecla "P" el programa se detiene y si se pulsa "S" sigue en el mismo punto donde se detuvo. Se puede realizar utilizando el modo de texto.

Se deja a elección del alumno la forma de presentación en pantalla, así como la funcionalidad en el desarrollo del juego.

OPCIONES PARA SUBIR NOTA

Para simplificar el desarrollo del proyecto, en esta primera práctica no se dispone aún del hardware, por lo que se entregará un Simulador de la memoria. El interfaz con dicho simulador será idéntico al que se utilizará cuando se disponga de la memoria, por lo que cualquier aplicación desarrollada será válida para la segunda práctica, momento en el que se contará con la memoria real. Dicho simulador será un programa residente cuyas funciones, descritas en el punto siguiente, serán accesibles a través de la INT 61h. El contenido real de la memoria estará en un fichero binario, de 128 posiciones, que se corresponde con el tamaño de la memoria. Este fichero deberá ser editado y modificado por el alumno, de manera que pueda editar el contenido que elija para su aplicación. Fichero binario vacío: descarga (descargar utilizando el botón derecho del ratón). NOTA: para su modificación se deberá utilizar un editor binario, los editores de texto tipo EDIT no valen. El fichero de memoria (que se deberá renombrar como el resto de ficheros a entregar, es decir, tipo 3a04p1.bin, por ejemplo) deberá estar en el mismo directorio donde se encuentre la aplicación.

                                                                                                                                                                       PC


 

DESCRIPCIÓN DE LAS FUNCIONES DEL SIMULADOR
 

Las funciones del Simulador de Memoria están accesibles a través de la INT 61h. Para acceder a cada uno de sus servicios se deberán inicializar los registros correspondientes. A continuación se describen dichos servicios:
 

Valores de Constantes:
            ERR   EQU 0FFH
            OK    EQU 00H
 

Función STATUS: Devuelve ID de driver

            Entrada: AH=0
            Respuesta: AX=ID (EE01)

Función UNINSTALL. Desinstala el programa y actualiza fichero binario

               Entrada: AH=1
            Respuesta: AH=OK


Función READ. Lee byte

            Entrada: AH=2 DI=Posición
            Respuesta: AH=OK Se pudo, AH=ERR Fuera de tamaño o datos aún no disponibles
                            AL=Dato leído
Función WRITE. Escribe byte

            Entrada: AH=3 AL=Contenido DI=Posición
            Respuesta: AH=OK Se pudo, AH=ERR Fuera de tamaño o escritura aún no disponibles
                           

Función WORKING. ¿El dispositivo responde?

            Entrada: AH=4
            Respuesta: AH=0 El dispositivo responde, no tiene trabajo pendiente, AH=ERR El dispositivo no responde
           
Función EESIZE. Tamaño del dispositivo

            Entrada: AH=5
            Respuesta: AL= Tamaño del dispositivo, en bytes.
                           AH=OK
Función LED. Encender / Apagar LED. En el simulador no tiene sentido, pero en la placa de la práctica 2 hay un diodo LED conectado a un pin del puerto paralelo.

            Entrada: AH=6 AL=0 ó 1
            Respuesta: AH=>OK
Función CNAME. Indica el nombre del fichero binario que contiene los datos de la memoria. El nombre debe estar en formato ASCII-Z (terminar con el valor 0) y    puede incluir la ruta completa de acceso, por ejemplo "fichero db D:\datos\binarios\memoria\3a07p1.bin",0

            Entrada: AH=A DS:DI=Nombre Fichero
            Respuesta: AH=>OK
 

 


Modo de vídeo gráfico MCGA

Para inicializar el modo de vídeo MCGA (320x200x256) se utiliza una llamada a la interrupción 10h. Ahora hemos de comprender como gestiona el ordenador esos pixels que escribimos en pantalla.

La dirección A000:0000 es el principio del segmento de VideoRAM, es decir, es donde la MCGA guarda los datos de las imágenes gráficas que dibuja en el monitor. Si escribimos algún valor en este segmento, la próxima vez que la tarjeta gráfica redibuje la pantalla (lo hace entre 50 y 70 veces por segundo) el valor que hemos escrito aparecerá en pantalla en forma de punto.

Para pintar un pixel basta con escribir en la posición de memoria correspondiente, el índice de color que queremos para que la tarjeta gráfica lo represente durante el próximo retrazado. El modo MCGA es el modo gráfico más sencillo en este sentido pues es un modo de 8 bits por pixel.

Esto quiere decir que cada número del 0 al 255 se corresponde con un color. Por defecto, el 0 es el negro, el 1 el azul, y así hasta llegar al 255. Entre el 0 y el 255 disponemos de gamas de azules, verdes, amarillos, etc..., que componen la paleta por defecto de la MCGA.

Que este modo gráfico sea de un byte por pixel significa que al escribir un byte en este segmento de memoria, su equivalente en pantalla será un pixel, que aparecerá automáticamente en cuanto el haz de electrones pase por esa posición al refrescar la imagen. En la figura adjunta tenemos una representación de cómo está organizada la VideoRAM en el modo 13h (MCGA).

Como puede verse, al byte 0 le corresponde el pixel (0,0) (el primero de la pantalla); al byte 1 le corresponde el pixel (1,0), al byte número 320 le correspondería el pixel (0,1), (primer pixel de la línea 1, porque hay 320 pixels de resolución horizontal) y así hasta el byte 63.999 del segmento, que corresponde a la posición (319,199). Depende del offset en que coloquemos el byte, el punto aparecerá en distinta posición en el monitor (cada byte es un pixel individual en la pantalla).

El segmento de la VideoRAM se comporta en este modo de video como si fuera una larga línea de pixels de manera que al llegar al final de una línea horizontal de pantalla, el siguiente byte de la VideoMemoria es el que continúa en la siguiente línea de pantalla. De ahí el término direccionamiento lineal: es como si la pantalla fuera un array unidimensional desde 0 a 64.000 donde cada 320 bytes estamos situados en una nueva línea de pantalla (el byte 320 es el primer pixel de la segunda línea). Así, durante el retrazado la tarjeta únicamente tiene que dedicarse a leer bytes (todos ellos consecutivos) y representarlos en pantalla.

Algunos links sobre el modo MCGA (hay muchos más por la web, buscar "programacion grafica PC msdos" o algo similar)

Curso de Programación gráfica. Santiago Romero

Modos gráficos. El Universo Digital 


Plazo de entrega : La presentación y evaluación de esta práctica será la indicada en el calendario, según el grupo (ver calendario ). El nombre del fichero o ficheros a entregar será de la forma parejap1.asm, por ejemplo 3a28p1.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un .bat que los ensamble y linke.(3a28p11.asm, 3a28p12.asm,... 3a28p1.bat)



Ejercicios previos opcionales.

Estos ejercicios se proponen como un "entrenamiento" a la programación en ensamblador. La realización de estas rutinas será provechosa para la primer
a práctica, pues permitirá conocer  de forma sencilla como manejar ciertos dispositivos de manera independiente..


2007. Página editada y mantenida por Guillermo Glez. de Rivera
Volver
al proyecto