La librería newlib es una implementación orientada a sistemas embebidos de la libc de GNU y tal y como viene configurada por defecto es una librería muy buena para utilizarla en la Gameboy Advance, ya que permite el uso de rutinas estándar como memcpy, memset, etc; y, al mismo tiempo, contiene una implementación completa y compatible IEEE de la librería matemática de C, la famosa libm. Al ser una configuración por defecto, ésta tiene, como se puede intuir, muchas limitaciones.
Ayer estuve leyendo un artículo sobre cómo portar la newlib completamente a cualquier plataforma embebida y el resultado de la lectura y posterior aplicación de ese artículo puede verse en mi página de Gameboy Advance: una implementación parcial de la entrada/salida estándar así como una implementación de las funciones de acceso a ficheros utilizando el sistema de archivos romfs.
Ahora es posible hacer printf, puts, open, close, read y demás utilizando las llamadas compatibles POSIX con algunas limitaciones:
1. No existe entrada estándar. El handle de fichero 0 no es usable aún. Lo he hecho así ya que el pad de la Gameboy Advance sólo posee 10 botones (cuatro direcciones, A, B, L, R, start y select) que se acceden leyendo bits directamente de una posición de memoria.
2. El handle 1 (salida estándar) dirije el flujo a la pantalla, mientras que el handle 2 (salida de error estándar) dirije el flujo de datos a la SRAM no volátil del cartucho flash.
3. Es posible manipular mediante las llamadas POSIX estándar open, close, read, lseek y fstat ficheros alojados en una imagen de sistema de archivos romfs contatenada a la imagen ROM de la aplicación principal (ver página sobre GBA para más detalles).
Lo sentimos. No se permiten nuevos comentarios después de 90 días.