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