Desarrollar un juego para Game Boy Advance no obliga a renunciar a las funciones de registro por consola que sí están disponibles en otros entornos. El emulador mGBA incorpora varios registros mapeados en memoria específicos para logging que permanecen inactivos fuera del emulador, lo que permite integrar mensajes de depuración directamente desde el código del juego sin afectar al hardware real.
El mecanismo es similar al de registros clásicos como REG_DISPCNT: el programador escribe en direcciones concretas del mapa de memoria de la GBA y el hardware responde. Para logging, mGBA añade direcciones como REG_LOG_ENABLE, REG_LOG_BUFFER y REG_LOG_SEND. El flujo consiste en activar el registro enviando un valor especial a REG_LOG_ENABLE, escribir los datos en REG_LOG_BUFFER y, al terminar, volcar el nivel de log en REG_LOG_SEND para que mGBA procese y muestre el mensaje en su ventana de logs (Tools > View logs).
El artículo detalla la implementación en C con la biblioteca tonc, incluyendo una función mgbalog() que encapsula la escritura en estos registros. El sistema admite niveles de log diferenciados: fatal (1), error (2), warning (4), info (8), debug (16), stub (32) e in-game errors (64), combinables mediante suma binaria al lanzar mGBA con el parámetro --log-level. También explica cómo redirigir los mensajes al terminal al iniciar el emulador desde la línea de comandos y cómo añadir formato tipo printf() con vsnprintf y va_list.
Dado que el logging añade tamaño al binario y consume memoria y CPU, recursos escasos en la GBA, se recomienda compilarlo solo en modo depuración. Para ello se utilizan directivas de preprocesador: un archivo mgbalog.h que define la macro mgbalog() para que, si MGBALOG no está definido, la llamada no genere código ni errores de compilación. El texto menciona que motores como Butano ya integran logging para mGBA, aunque implementar la versión propia ayuda a entender qué ocurre bajo el capó.
