GBFS no tiene ningún problema de "corrupciones". Esa forma de usar gbfs (concatenada) es en realidad la correcta y en la que realmente se le saca partido (la función find first file existe por esta manera de usarlo).
El problema que tienes es el que te digo, que todavía no terminas de pillar que hace bien cada cosa. Lo que tienes que tener en cuenta a la hora de poner los fonso extendidos rotacionales (que son los que estás usando, fondos 2 y 3 del modo 5) son 2:
-Configurar el registro del fondo de forma adeacuada. En éste sentido tienes 3 partes.
Primero el tipo de fondo, que en libnds incluye tanto profundidad de color como tamaño. Piensa que la información de una imagen de 16 bits, son los colores en si y la información de una de 8 bits son los indices a la paleta. Luego si tu intentas cargar una imagen de 16 bits en un fondo configurado como de 8 bits, la DS cree que le estás pasando indices a una paleta cuando en realidad le estas pasando lo colores de cada pixel.
Lo segundo es donde vas a poner la información de la imagen. Como es un fondo extendido no hay tiles y por tanto mapas. La manera en la que los registros de los fondos encuentran la información es por bloques. En la pantalla principal por ejemplo se empieza a buscar a partir de la dirección 0x06000000 (BG_GFX es un define a esta dirección) que corresponde con el bloque 0 (es por eso que cuando pones el banco A por ejemplo a a la pantalla principal, si te fijas, es a esta dirección, que como ves todo tiene su motivo). El siguiente bloque es 16 kbytes más adelante e igual para los siguientes (es decir sumas 0x4000 a la dirección por cada bloque). Con esto quiero decir que si tu pones en el registro que los datos están en el bloque 0 entonces tienes que ponerlos en la dirección 0x06000000. Si le dices que están en el bloque 1 entonces tienes que poner los datos en la dirección 0x06004000 y asi con los demás. En el caso de los fondos de tipo texto o por tiles o como les quieras llamar pues tienes que teneren cuenta que no solo pones la información de la imagen (que en este caso tiene que estar en tiles,es decir, en bloques de 8x8) si no también el mapa, que indica donde poner cada uno de los tiles (bloques de 8x8).
El tercer punto importante es el del origen de la imagen y la matriz de transformación, que eso lo pone bien (aunque no tendrás muy claro que registro es cual)
-Poner los datos en el sitio adecuado y en el formato adecuado. Sobre lo de poner los datos en el sitio adecuado, ya te lo he explicado en lo de configurar el registro para que apunte a ese sitio. Respecto a el formato adecuado te explico. Cuando usas un fondo extendido, la información se espera de forma normal, es decir los pixel están uno detrás de otro por líneas. En cambio por tiles la cosa va a así (ésta explicación es para tiles en 1 dimensión)
Si no conviertes la imagen a tile la información se la pasarias asi (Siendo cadagrupo de símbolos un tile). imagina que fueran 8 en vez de 4 tanto en vertical como en horizontal
----++++
----++++
----++++ que la DS la leera asi
::::****--------------------> ----++++----++++----++++----++++:::: etc
::::****
::::****
::::****
La DS requiere que la información esté asi
----------------
++++++++++++
:::::::::::
***********
De este modo al leer de forma lineal irá cofiendo bien los tiles. Para convertir
Luego estaría el tema de la paleta que si es de 256 colores el fondo pues tienes que generar una imagen que esté compuesta por los índices a la paleta.
Lo mejor para todo lo anterior es que use gfx2gba (
http://www.gbadev.org/tools.php?section=Graphics)
versión 0.13 con el frontend.
Espero haberte aclarado algo.