RYG: árbol de juego – tableros de 88 bytes

El primer intento de depurar el programa debe consistir en ir a la zona de memoria donde están el tablero actual y el árbol de juego, y revisar su contenido. Más concretamente, en la versión 7 del proyecto:

  • El tablero actual está en $14e9.
  • El puntero a la memoria libre está en $153e – $153f.
  • La raíz del árbol está en $1540.

Pues bien, si depuramos el programa con el debugger de CMB prg Studio (menú Debugger > Debug Project), y más concretamente abrimos el visor de memoria y nos vamos al tablero actual (dirección $14e9), veremos algo así:

Visor memoria

Es decir:

  • En la dirección $14e9 comienza el tablero actual, que ocupa 85 bytes.
  • En las direcciones $153e – $153f está el puntero a la memoria libre, que toma el valor $15ea, es decir, a partir de la dirección $15ea ya no hay tableros.
  • En la dirección $1540, que actualmente toma el valor $00, empieza la raíz del árbol.

La primera conclusión al ver esto es que es muy difícil depurar nada. Si los tableros ocuparan 88 bytes, en vez de 85, ocuparían un número entero de filas en el visor de memoria (88 = 11 x 8), lo que facilitaría mucho la depuración de la memoria.

Por ello, la primera medida que vamos a tomar es ampliar la estructura de datos del tablero para hacerla pasar de 85 a 88 bytes. De este modo los tableros nos saldrán alineados en el visor.

No necesitamos guardar más variables. Se trata, simplemente, de alinear los datos. Por ello, si además metemos un patrón fácilmente reconocible, por ejemplo, el prefijo $aa – $aa – $aa, no sólo conseguimos alinear los datos en el visor, sino que además metemos un patrón que es fácilmente reconocible visualmente, lo que nos facilita identificar donde termina un tablero y empieza el siguiente.

Por todo lo dicho, finalmente la estructura de datos para manejar tableros queda así (ver prefijo $aa – $aa – $aa):

Tablero 88 bytes

Lógicamente, también hay que actualizar todas las rutinas que manejan tableros (fichero “Tableros.asm”), ya que las posiciones (offsets) de las variables respecto del comienzo del tablero se incrementan en 3 bytes.

Para que el puntero a la memoria libre (libreLo – libreHi) no estropee el alineamiento entre el tablero actual y los tableros del árbol, también se introducen algunos bytes extra en “Arbol.asm”:

Bytes extra

De este modo, en la versión 8 del proyecto los tableros ya aparecen alineados en el visor de memoria, lo que facilita mucho la depuración:

Memoria tras 88

En esta imagen ya es más fácil identificar el tablero actual ($16b4), el puntero a la memoria libre ($170c – $170d), seis bytes $bb de relleno ($170e – $1713), y la primera parte de la raíz del árbol de juego ($1714), que es copia del tablero actual.


Código del proyecto: RYG08

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s