DJNZ en archivo ps2-lib.s

DJNZ en archivo ps2-lib.s

de Juan Gibert Mangarelli -
Número de respuestas: 3

Cuando llamamos a la subrutina mouse_init, todo funciona bien hasta que llega al paso

djnz wait_loop_10

Si lo corremos con Qemu + Gdb, el registro b se decrementa correctamente, sin embargo al correrlo con JtagCon + Gdb, el registro b no se decrementa, por lo que queda en un loop infinito.

Creemos que al no funcionar usando el archivo del Quartus el problema podría estar asociado con el archivo Quartus entregado. Además como esta instrucción no involucra los puertos de entrada y de salida no puede ser un problema asociado a las conexiones hechas por nosotros.

Muchas gracias

En respuesta a Juan Gibert Mangarelli

Re: DJNZ en archivo ps2-lib.s

de Leonardo Etcheverry -

Hola Juan,

Este comportamiento que observan es un bug que ya conocemos del monitor del debugger. (El monitor no se usa en QEMU, solamente en el hardware real con el T80). Actualmente es imposible hacer stepi sobre de una instrucción de la forma:

etiqueta: DJZN etiqueta  ;; notar que es un salto a la direccion de la misma instruccion

En resumen, no hagan stepi sobre esa instrucción. Simplemente pongan un breakpoint más adelante y dejen que el debugger pare ahí.

Otro detalle: noten que esas rutinas, como sus nombres e implementacion lo indican, sirven para esperar determinados periodos de tiempo requeridos por la inicializacion del dispositivo PS2. Si ustedes ejecutan esas rutinas paso a paso, los tiempos que van a estar esperando van a ser mucho mayores a los requeridos por la especificación de inicialización. Nuevamente, no ejecuten toda la inicialización paso a paso; pongan un breakpoint inmediatamente a continuación de call mouse_init y sigan desde ahí.

Saludos, Leonardo.

En respuesta a Leonardo Etcheverry

Re: DJNZ en archivo ps2-lib.s

de Juan Gibert Mangarelli -

Está bien eso se entiende pero haciendo las cosas así nos queda en loop infinito el programa

En respuesta a Juan Gibert Mangarelli

Re: DJNZ en archivo ps2-lib.s

de Leonardo Etcheverry -
Si estan probando sin el mouse conectado, no llamen a la rutina mouse_init. Esta rutina envia ciertos comandos hacia el mouse y espera ciertas respuestas. Si el mouse no esta conectado, call mouse_init no retorna nunca.

Saludos,
Leonardo