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