Duda programando la GBA

Hola a todos.

Esta noche me ha surgido una duda mientras programaba.

Estoy intentando reproducir un wav en la GBA. Ya lo he pasado a un array en C y tengo el código. El problema es que la estructura creada es demasiado grande, y parece que al enlazar el código objeto está intentando colocarlo en la zona iwram, donde no cabe.

Necesito saber cómo colocarlo en la ROM donde, en teoría, habría espacio de sobra.

¿Alguien sabe cómo hacerlo?

Gracias. Un saludo.
Lo mejor es que uses alguna librería de audio para GBA como Krawall. Además de permitirte reproducir formatos como .mod o .s3m incluyen sus propios convertidores de .wav a binario y hacen en definitiva la tarea de reproducir audio mucho más amena e intuitiva.

Yo te recomiendo el AAS, es una librería gratuita utilizada en el juego Payback que permite reproducir hasta 16 canales simultáneos de sonido a 32Khz utilizando sólo el 10 por ciento de la CPU. Además, el conversor de audio a binario es mucho más facil de usar que el de Krawall.
Hola.

El problema no lo tengo a la hora de reproducir sonido. He sido capaz de reproducir un wav pequeño. El problema lo tengo a la hora de adjuntar datos grandes al programa. Yo tenía entendido que declarando las variables como const static e inicializándolas (vamos, lo que es una zona de datos de toda la vida), las almacena en la ROM, donde no hay límite de espacio. Pero el problema es que no lo debe estar haciendo así, el enlazador debe estar intentando colocar los datos en otra zona y me da error:

/c/devkitPro/devkitARM/bin/arm-elf-gcc -o snake.elf snake.o graficos.o irq_handler.o irq.o keyboard.o sprites.o mapper.o rooms.o sounds.o -mthumb -mthumb-interwork -specs=/c/devkitPro/devkitARM/arm-elf/lib/gba_mb.specs -L/c/devkitPro/devkitARM/arm-elf/lib/interwork -L/c/devkitPro/devkitARM/lib
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: region ewram is full (snake.elf section .rodata)
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .ctors [02000000 -> 02000007] overlaps section .init [02000000 -> 02000233]
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .dtors [02000008 -> 0200000f] overlaps section .init [02000000 -> 02000233]
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .jcr [02000010 -> 02000013] overlaps section .init [02000000 -> 02000233]
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .eh_frame [02000014 -> 02000017] overlaps section .init [02000000 -> 02000233]
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .iwram [02000018 -> 02000127] overlaps section .init [02000000 -> 02000233]
/c/devkitPro/devkitARM/bin/../lib/gcc/arm-elf/3.4.4/../../../../arm-elf/bin/ld: section .data [02000128 -> 02000b37] overlaps section .init [02000000 -> 02000233]

En cuanto a las librerías, Krawall es de pago, y AAS tiene buena pinta.

Gracias. Saludos.

--------------------------------------------

Me contesto a mi mismo, el problema está en este parámetro:

-specs=/c/devkitPro/devkitARM/arm-elf/lib/gba_mb.specs

que genera una rom para multiboot, intentando meter todo el código y datos en la EWRAM. Se cambia por gba.specs y a volar.
2 respuestas