(Este enunciado será explicado en la primera clase que corresponda a cada grupo)
- 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:
Un jugador (frontón)
Dos jugadores
Jugar contra la máquina (opcional)
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
Control de la velocidad de la pelota: diferentes niveles de juego
Control de la velocidad de la barra: diferentes niveles de juego.
Jugar contra la máquina.
Hacer que el ángulo con el que rebote la pelota en la barra sea mayor cuanto más al extremo se golpee la pelota. (Se puede dividir virtualmente la barra en 3 zonas, si golpea en la central saldrá con el mismo ángulo de entrada y si lo hace en las zonas extremas el ángulo de salida será aleatoriamente mayor que el de entrada).
Utilización del modo gráfico.
Puntos con "premio", puede extenderse un poco la raqueta de manera temporal.
Cualquier otra funcionalidad que el alumno quiera realizar.
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)
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)