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

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


Funcionamiento

La prueba consiste en la realización de una serie de procedimientos en ENSAMBLADOR que van a ser llamados desde un programa en C que se proporciona. Para que los diferentes ejercicios se puedan realizar de forma independiente (sin necesidad de haber hecho otro), se proporcionan librerías donde ya están hechos. Según se realicen los distintos procedimientos por parte del alumno deben ser sustituidos los que se proporcionan en la librería por los realizados por el alumno.

Los ejercicios consisten en la creación de una serie de procedimientos que una vez realizados deberán sustituir a los existentes en la librería TECLADO.LIB y TRONLIB.LIB respectivamente compilada en modelo LARGE

Se recomienda NO usar el entorno del TurboC sino compilar el fuente en C y enlazar con el comando tcc. Las compilaciones en ensamblador se realizarán con el comando tasm y para meter y sacar módulos de la librería el comando tlib. Cualquiera de estos comandos, ejecutados sin parámetros, indican cómo deben ser usados. Las depuraciones podrán realizarse con el TurboDebugger (td) si se utilizan las banderas de compilación adecuadas. Es importante recordar el uso de las banderas -ml en C y /mx en ensamblador así como la declaración PUBLIC de los procedimientos en ensamblador.

La definición detallada de todos los procedimientos que hay que diseñar, de sus parámetros y sus valores de retorno se encuentra en teclado.h y tronlib.h.  La descripción de las funciones que realiza el driver están aquí.

Se incluye un fichero ejecutable que muestra el uso de todos los procedimientos y el resultado que se debe obtener tras cambiar todos los objetos de la librería entregadas por los  alumnos: TRON.EXE y DRIVERT.EXE. El fichero TRON.EXE es exclusivamente de ejemplo, no se debe usar para el desarrollo. El modo 1 es para usar un sólo ordenador con un jugador (el otro es el PC, aunque un poco tonto). Cuando hay dos jugadores se deben conectar dos PCs a través del puerto serie, mediante una cable "null modem" (dos conectores SubD hembra de 9 pines, conectando el pin 2 de uno con el tres del otro, el tres del uno con el 2 del otro y unir el pin 5 de ambos). Une vez conectados, ejecutar el programa en un PC y elegir el modo 2 (Maestro), entonces seleccionar el modo 3 en el otro y comenzará el juego en ambos. NO SELECCIONAR EL MODO 2 sin estar conectado con otro PC, la aplicación se queda en espera indefinida y habrá que rearrancarlo.  Se pueden hacer pruebas con un sólo PC. Para ello unir el pin 2 con el 3 del puerto serie. El movimiento del jugador vuelve como si fuera del otro y los dos gusanos tienen el mismo comportamiento. No se puede jugar pero sirve para depurar.

El control se realiza con las siguientes teclas: Q sube, A baja, O izquierda y P derecha.

El fichero TRON.C NO SE DEBE MODIFICAR.

Un ejemplo de la secuencia de comandos a ejecutar para añadir el código de una función, por ejemplo ReadKey, escrito en un fichero denominado 3a07p1rk.asm (suponer pareja 7 del turno 3a *) sería:

tasm /mx 3a07p1rk.asm                    Se ensambla el fuente y se crea el objeto, 3a07p1rk.obj, siempre que no haya errores.

tlib teclado.lib -readkey +3a07p1rk     Se extrae el objeto original ReadKey y se incluye el nuevo

tcc -ml tron.c teclado.lib tronlib.lib     Se crea el ejecutable tron.exe. Se ejecuta (recordar que el driver debe estar instalado) y si no funciona se pasa a la depuración. Para ello es necesario hacer el proceso anterior con las banderas correspondientes.

Se recuerda que en  la evaluación de la práctica será imprescindible el manejo del depurador (Turbo Debugger).

Un resumen de los procedimientos que se tienen que diseñar en ensamblador es:

Nombre del Procedimiento Fichero Fuente * Nombre del objeto  en la librería ** Comentarios
void ClearKeyBuffer(); xxxxxxk1.asm CLEARKEY Limpia el buffer del teclado
int IsKey(); xxxxxxk2.asm ISKEY Mira si hay tecla pulsada (equivalente a kbhit();)
int ReadKey(); xxxxxxk3.asm READKEY

Devuelve la tecla pulsada.

int GetKey(); xxxxxxk4.asm GETKEY Función que espera a que se pulse una tecla, momento en la que la devuelve
       

int EstadoJuego();

xxxxxxt1.asm ESTADOJU  
iint VerificaDriver(); xxxxxxt2.asm VERIFICA  

int ModoJuego(char key);

xxxxxxt3.asm MODOJUEG  
void EmpiezaJuego(); xxxxxxt4.asm EMPIEZAJ

 

void PintaTablero(); xxxxxxt5.asm PINTATAB  

char TeclaJugador1();

xxxxxxt6.asm TECLAJU1  

char TeclaJugador2();

xxxxxxt7.asm TECLAJU2  
void PintaMotos( char Tecla1, char Tecla2); xxxxxxt8.asm PINTAMOT  
int PreguntaGanador(); xxxxxxt9.asm PREGUNTA  
void TerminaJuego(); xxxxxxta.asm TERMINAJ  
int EsperaFLAG(); xxxxxxtb.asm ESPERAFL  
void RestauraFLAG(); xxxxxxtc.asm RESTAURA  

* Sustituir las xxxxxx por el nombre correspondiente a cada pareja según está descrito en las normas, es decir, grupo_pareja_práctica_orden.asm. Por ejemplo, 3a07p1k3.asm sería el nombre para el procedimiento ReadKey de la práctica 1 de la pareja 7 del turno 3a (jueves mañana)

** Para obtener el nombre de los objetos basta con ejecutar tlib nombredelalibreria.lib, nombre.lst. Con esto se crea un fichero de texto, nombre.lst  donde figura el nombre del objeto y el de los procedimientos declarados como públicos.

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