ZEsarUX debugger para DAAD

English readers click here .

ZEsarUX es un emulador de Spectrum y Amstrad CPC con innumerables ventajas, pero hoy quiero contaros una que afecta a los programadores de DAAD: el debugger de DAAD.

Normalmente, los que programamos aventuras con DAAD nos enfrentamos a retos sencillos, pero a veces queremos hacer una rutina complicada y no nos sale, o algo no está funcionando como esperábamos y no entendemos por qué. Para esas ocasiones no hay nada como utilizar un debugger que nos permita ejecutar el código DAAD condacto a condacto, y así poder vigilar cuando nuestro código no hace lo que esperábamos, y corregirlo.

Para usar el debugger de ZEsarUX solo tenéis que generar vuestro juego en formato Spectrum o CPC, y cargarlo en el emulador. Si vais a usar CPC tened en cuenta que ZesarUX no soporta disqueteta, por lo que tendréis que generar un snapshot o una carga de cinta. Para Spectrum vale con un .TAP, pero también podréis cargar .DSK o incluso SD con el juego para ESXDOS.

¿Y que podemos hacer con el debugger?

Esta imagen que veis a abajo es del debugger. Lo que estamos viendo en la zona superior izquierda “Not in condacts” indica que el juego en ese momento no está en una zona de condactos (si os fijáis está esperando una tecla para continuar, cuando eso ocurra sí irá al siguiente condacto). A la derecha podéis ver los watches, y abajo las opciones que tenemos (en video inverso la tecla que las activa).

Watches

Ahora, si la rutina que queremos depurar depende mucho de un flag, por ejemplo el flag 100, podemos cambiar los watches para que salga el flag 100 ahí en lugar de alguno de los presentes. Para ello pulsamos la W (watch) y eso nos lleva a que el emulador nos pregunte primero por que linea queremos cambiar (si os fijáis hay 7 lineas de watches, de la 1 a la 7).

Después nos preguntará si queremos poner en ese watch el contenido de un flag o la localidad actual de un objeto.

Y finalmente nos pedirá el número de flag u objeto, y si por ejemplo introducimos un 100, podremos ver a partir de ese momento el valor del flag 100 en pantalla.

En esta imagen hemos cambiado la linea 2 para que tenga el valor del flag 100, y la linea 1 para que tenga la localidad del objeto 1 (por la fila empieza por una ‘O’ de objeto en lugar de una ‘F’ de flag).

Además de poder ver los flags y la localidad de objetos, el debugger nos permite cambiar su valor, para lo cual usamos la tecla i (wrIte), que primero nos preguntará si queremos cambiar un flag o la localidad de un objeto, luego el número de flag u objeto y finalmente el valor que queremos darle al flag, o qué localidad queremos enviar el objeto.

Si cambiamos el valor el flag 100 al valor 128 lo podremos ver en el watch que pusimos:

Ejecutando paso a paso

En este caso podéis ver arriba EX BOSQU (la entrada en la que hemos entrado tras escribir EX SELVA, y los condactos que hay dentro. El siguiente condacto a ejecutarse es un EQ, que si se cumple nos dejará en el PLUS 32 1 que hay detrás, pero si no se cumple probablemente nos llevará a otra entrada, como realmente pasa (ese PLUS 31 1 que veis abajo es otra entrada).

Ahora si os fijáis estamos en otra entrada, que es la que va a llamar al process 5 (tabla de respuestas):

Y ya dentro del proceso 5, hay mas entradas de EX BOSQUE. El debugger irá pasando una por una por todas ellas según lo hace DAAD al ejecutar.

Esta es la que finalmente se ejecuta completa hasta el final:

Cabe decir que en este caso, según vamos dando a enter vamos viendo como avanza ejecutando primero el ATGT, luego el ATLT y cuando llega al MESSAGE 3 aparece una nueva opción en el menú:

Esa opción (condMessage), nos permite pulsando la tecla M ver de qué mensaje se trata. Solo aparecerá si el siguiente condacto a ejecutar es un MESSAGE, MES, SYSMES o DESC.

Run to parse

DAAD Breakpoint

Esto obviamente sirve para evitar tener que ejecutar paso a paso hasta el punto que queremos revisar. Simplemente ponemos un condacto DEBUG en nuestro fuente, activamos el DAAD Breakpoint, y salimos del debugger pulsando escape. El debugger se activará al llegar al ese condacto DEBUG y a partir de ahí ya ejecutamos paso a paso o lo que queramos.

No olvides quitar el #debug al principio del código antes de generar la versión final del juego, o este se grabará con los condactos DEBUG.

Es posible también usar el este sistema DAAD breakpoint compilando con el compilador original de DAAD (el DC), aunque es un poco más incómodo. Para ello debéis poner “#DEFB 240” en lugar de poner el condacto DEBUG, y acordaros de quitar todos esos #DEFB antes de crear la copia final del juego. Con DRC es más fácil porque aparte de no tener que acordarse del #DEFB 240, al quitar el #debug del principio, todos los DEBUG que haya son ignorados, por lo que podéis dejarlos en vuestro fuente para futuras pruebas.

Mensajes

Elige la que prefieras y verás una lista de lo que contiene:

No te extrañes por los interrogantes, podrían ser códigos de control (retornos de carro y otros caracters usados por DC o DRC (#k o \k, #b o \b, etc.), o bien ser el signo de interrogación de apertura, el de cierre o las cedillas mayúscula y mnúscula. Por otro lado, ZEsarUX tampoco puede escribir vocales acentuadas o eñes, por lo que las veréis sin acentuar y las eñes como enes.

Descargar ZEsarUX

https://github.com/chernandezba/zesarux/releases/tag/7.3-15052019

Epílogo

Podéis seguirme en twitter en @uto_dev, para más información sobre DAAD.

Developing indie interactive fiction and IF engines since 1984

Developing indie interactive fiction and IF engines since 1984