Idioma

Ver el código de Depurando tus programas en ensamblador

{{toc numerate=1}}

===Introducción===

Para ello escribiremos un hola mundo en ensamblador usando ((https://mads.atari8.info/ MADS)), a continuación el código fuente del programa:
%%(code)
        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
%%

===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 :
%%(code)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.
%%(code)"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.
((https://www.atariware.cl/archivos/altirra/debuglabel.jpg align=center))

===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 :
%%(code)
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.
((https://www.atariware.cl/archivos/altirra/debugerror.jpg align=center))
Haz clic en el botón **Debug** y Altirra te mostrará con colores rojo los puntos de interrupción.

((https://www.atariware.cl/archivos/altirra/debugbp.jpg align=center))

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

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

===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%%