Idioma

Depurando tus programas en ensamblador


1. Introducción


Para ello escribiremos un hola mundo en ensamblador usando MADS, a continuación el código fuente del programa:

        org $600

inicio
	lda #0
	sta 710
	lda #15
	sta 709
	ldx # < mensaje
	ldy # > mensaje
	jsr $c642
ciclo
	jmp ciclo
	
mensaje
	dta c"Hola Mundo",$9b
	
	run inicio	

2. Ensamblando con depuración


Lo ensamblamos usando unos parámetros necesarios para generar 2 archivos más que son tabla de etiquetas .lab y el listado del ensamblador .lst usando el siguiente comando :

mads holamundo.asm -o:holamundo.xex -l:holamundo.lst -t:holamundo.lab	

Veras que ahora se crearan los archivos desde el código fuente que ensamblaste, ahora usaremos Altirra para abrir automáticamente en modo depurador e poder detectar más fácil nuestras etiquetas programadas.

"C:\Program Files\Altirra-4.10\altirra64.exe" /singleinstance /run holamundo.xex /debug /debugcmd:.loadsym	

Importante que los 3 archivos .xex, .lab y .lst estén en el mismo directorio y además tener el mismo nombre (pero con distinta extensión), al presionar F8 y ver el debugger veras tus etiquetas en él.

3. Comandos automáticos para depurador


En Altirra puedes configurar de forma automática algún punto de interrupción en el programa al iniciar este. Para eso debes crear un archivo con extensión .atdbg para este ejemplo se debe llamarse holamundo.atdbg.


En este archivo debes agregar las siguientes instrucciones :

bp $602
bp $60A	

Eso hará que al ejecutar holamundo.xex aparezca un mensaje de error en Altirra lo cual es normal porque tiene punto de interrupción al inicio del programa.

Haz clic en el botón Debug y Altirra te mostrará con colores rojo los puntos de interrupción.



  • F8 : Es para reanudar la ejecución. (hasta el siguiente breakpoint)
  • F10 : Continua con la siguiente instrucción, pero si encuentra un JSR lo ignora.
  • F11 : Continua con la siguiente instrucción, pero si encuentra un JSR se va a la subrutina hasta encontrar un RTS. (a veces llega hasta el OS)

4. Uso del punto de interrupción


Es importante saber entender el punto de interrupción cuando quieres hacer un análisis de un programa ya existente o para los propios. Existen varios comandos que puede usar directo desde la consola de Altirra.


  • bp $(direción de memoria) : Esto establece un punto de interrupción en dicha dirección, por ejemplo bp $602.

  • bl : Esto lista todos los puntos de interrupción que hemos realizado. veras que la lista se enumeraran con un numero y este lo usaremos con la siguiente instrucción.

  • bc numero o *: Borra una interrupción o todas, por ejemplo bc 1 borra la numero 1 de la lista mostrada con el comando bl y bc * borra todas.

  • bx "condición" : Esto establece un punto de interrupción con una condición, ejemplos :

bx "write=$9eb5 and value<$13" esto hará que el programa se pare cuando la posición $9eb5 de memoria se escriba un valor menor a $13.


bx "read=$27c" se detendrá el programa cuando lea el botón del joystick como no es muy exacto se marcará más de una vez si el programa tiene más lecturas del botón.

  • g : Volver a la ejecución del programa.

5. Desactivar PM


Para desactivar los PM por un momento hasta el próximo VBlank de la pantalla. Escriba en la consola lo siguiente :

e d000 0 0 0 0 0 0 0 0