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?

Pues como decía, ejecutar paso a paso el juego. Si pulsamos, con un juego de DAAD cargado, las teclas F5, E, D,8 en ese orden, llegaremos al debugger de DAAD (F5=Menu, E=dEbug, Debug CPU, vista 8).

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).

Image for post
Image for post

Watches

Los watches nos permiten ver el contenido de determinados flags o la localidad donde están determinados objetos. Por defecto solo está el valor de los flags del sistema 0, 1, 33, 34, 35, 38 y 51.

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).

Image for post
Image for post

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

Image for post
Image for post

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).

Image for post
Image for post

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.

Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post

Ejecutando paso a paso

En principio, para ir avanzando condacto a condacto tenemos que usar la tecla Enter (que si estamos en el caso actual sin condacto será “runTO Condact”-> ejecutar hasta un condacto, o bien si estamos en un condacto será “Step condacts” ->ejecución paso a paso). En cualquier caso nos llevará a pararnos cuando se ejecute el primer condacto:

Image for post
Image for post

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).

Image for post
Image for post

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

Image for post
Image for post

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:

Image for post
Image for post

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ú:

Image for post
Image for post

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.

Image for post
Image for post

Run to parse

La opción que se ejecuta pulsando la tecla P, le dice al debugger “ok, ya no quiero seguir paso a paso, continua hasta que se le pida una nueva orden al jugador”. Esto permite revisar la parte que nos interesa pero no tener que ejecutar paso a paso todo el juego para seguir probando otra cosa.

DAAD Breakpoint

Con esta opción le decimos a DAAD que se pare al encontrar un condacto concreto, uno que en realidad no existe, y que se puede incorporar usando el compilador DRC (https://github.com/Utodev/DRC). Para ello ponemos #debug al principio de nuestro fuente en formato DSF, y después podemos poner donde queramos un condacto nuevo llamado “DEBUG”. El debugger de ZEsarUX se parará en ese condacto.

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

Una utilidad de ZEsarUX adicional es poder ver desde el emulador todas las tablas de texto de DAAD. Para ello pulsamos la tecla e desde el debugger, y nos saldrá una lista de tablas:

Image for post
Image for post

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

Image for post
Image for post

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

Esta funcionalidad esta disponible a partir de la versión beta 7.3 de ZEsarUX, podéis descargarla aqui para Windows, Linux y MacOS:

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

Epílogo

Pues bien, esto es todo, ya sabéis como usar el debugger de ZEsarUX, así que preparaos para evolucionar vuestro código DAAD hasta otro nivel :-)

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

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store