muchas graciass tioo. sautomalo
A ver si me puedes ayudar en una cosa.
por favor.
yo uso ubuntu+psptoolchain+sdl
he compilado sin problemas algun peuqño hombrew para 1.50 y sin problemas.
Yo tengo en mi psp el firmware 3.71 y en el recovery le pongo lo del kernel 1.50. y me rula bien el hombrew.
Dentro de este hombrew uso sdl.
en el main.c no le pongo lo de psp_module_info...
pero me funciona bien.
El hombrew solo son unas imagenes y cuando le pulso ciertas teclas hace unos ciertos sonidos. (todo con SDL)
El makefile 1.50:
TARGET = xxxxx
PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin
SDL_CONFIG = $(PSPBIN)/sdl-config
OBJS = main.o
DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags)
MORE_CFLAGS = -G0 -O2 -DPSP
CFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS)
CXXFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS) -fno-exceptions -fno-rtti
LIBS = -lSDL_gfx -lSDL_image -lSDL_mixer -lSDL_ttf -lvorbisidec -lfreetype -lpng -ljpeg -lz -lm $(shell $(SDL_CONFIG) --libs)
EXTRA_TARGETS = EBOOT.PBP
include $(PSPSDK)/lib/build.mak
-------------------------------------------------------------------------------
Ahora el problema es el siguiente:
el makefile lo puse para 3.x:
TARGET = xxxxx
PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin
SDL_CONFIG = $(PSPBIN)/sdl-config
OBJS = main.o
DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags)
MORE_CFLAGS = -O2 -G0 -Wall -DPSPFW3X
CFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS)
CXXFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS) -fno-exceptions -fno-rtti
LIBS = -lSDLmain -lSDL -lSDL_gfx -lSDL_image -lSDL_mixer -lSDL_ttf -lvorbisidec -lfreetype -lpng -ljpeg -lz -lm $(shell $(SDL_CONFIG) --libs)
BUILD_PRX=1
PSP_FW_VERSION=371
PSP_EBOOT_ICON = ./imagenes/title.png
PSP_EBOOT_PIC1 = ./imagenes/background.png
EXTRA_TARGETS = EBOOT.PBP
include $(PSPSDK)/lib/build.mak
---------------------------------------------------------------------------------
El caso es que con el mismo codigo dentro del main.c me compila perfectamente para 3.x
Si en el recovery lo dejo para 1.50 kernel ya no me funciona (cosa lógica)
Si en el recovery le pongo para 3.71 kernel tampoco me funciona, le puse una imagen de entrada y un fondo de estos para el menu y si me va, lo que luego al darle a la X para iniciar me sale pantalla negra y luego error.
Entonces leyendo..vi que habia que poner las lineas estas de
PSP_MODULE_INFO("xxxxx",0,1,1);
PSP_HEAP_SIZE_KB(6*1024);
aparte los cambios en el makefile (el que tengo expuesto mas arriba)
---------------------------------------------------------------------------
Pero al compilar me da error y no me genera el EBOOT.PBP:
psp-gcc -I. -I/usr/local/pspdev/psp/sdk/include -I/usr/local/pspdev/psp/include/SDL -Dmain=SDL_main -O2 -G0 -Wall -DPSPFW3X -D_PSP_FW_VERSION=371 -c -o main.o main.c
psp-gcc -I. -I/usr/local/pspdev/psp/sdk/include -I/usr/local/pspdev/psp/include/SDL -Dmain=SDL_main -O2 -G0 -Wall -DPSPFW3X -D_PSP_FW_VERSION=371 -L. -L/usr/local/pspdev/psp/sdk/lib -specs=/usr/local/pspdev/psp/sdk/lib/prxspecs -Wl,-q,-T/usr/local/pspdev/psp/sdk/lib/linkfile.prx main.o /usr/local/pspdev/psp/sdk/lib/prxexports.o -lSDLmain -lSDL -lSDL_gfx -lSDL_image -lSDL_mixer -lSDL_ttf -lvorbisidec -lfreetype -lpng -ljpeg -lz -lm -L/usr/local/pspdev/psp/lib -lSDLmain -lSDL -lm -lGL -lpspvfpu -L/usr/local/pspdev/psp/sdk/lib -lpspdebug -lpspgu -lpspctrl -lpspge -lpspdisplay -lpsphprm -lpspsdk -lpsprtc -lpspaudio -lc -lpspuser -lpsputility -lpspkernel -lpspnet_inet -lpspirkeyb -lpsppower -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o Barcos.elf
/usr/local/pspdev/psp/lib/libSDLmain.a(SDL_psp_main.o): En la funci�n `cleanup_output':
psp/SDL_psp_main.c:122: definiciones m�ltiples de `module_info'
main.o:(.rodata.sceModuleInfo+0x0): primero se defini� aqu
/usr/local/pspdev/psp/lib/libSDLmain.a(SDL_psp_main.o): En la funci�n `main':
psp/SDL_psp_main.c:(.text+0x308): referencia a `SDL_main' sin definir
collect2: ld devolvió el estado de salida 1
mi proposito es poder compilar para 3.x y hacerlo funcionar en la psp.
Ayudame plis que veo que tu y otros aqui controlais.
muchas gracias de antemano.
el main.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//PSP_MODULE_INFO("barco",0x0,1,1);
//PSP_HEAP_SIZE_KB(6*1024);
Mix_Chunk *dispar; //declaramos un sonido para usar
Mix_Chunk *metral; //declaramos un sonido para usar
Mix_Music *musica; //declaramos la musica de fondo
SDL_Surface *ttext;
TTF_Font *fuente;
SDL_Color bgcolor,fgcolor;
TTF_Font *fuente;
const char texto[14]="Hola Mundo..";
char msg[14];
//int engineMain(unsigned int argc, void *argv){
int Main (int argc, char *argv[]) {
SceCtrlData pad;
SDL_Event event;
SDL_Surface *screen;
SDL_Surface *fondo;
SDL_Surface *peque;
SDL_Rect destino;
int done = 0;
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
printf ("NOse puedo Inicializar SDL: %s\n", SDL_GetError());
exit (1);
}
// imagenes();
fondo = IMG_Load ("imagenes/background.png");
peque = IMG_Load ("imagenes/crysol_title.png");
screen = SDL_SetVideoMode(480,272,32, SDL_HWSURFACE );
if(!screen){
printf("No se pudo iniciar la pantalla: %s\n", SDL_GetError());
SDL_Quit();
exit(-1);
}
if (Mix_OpenAudio(44100, AUDIO_S16, 2, 1024) < 0) {
printf("No se pudo iniciar el sonido: %s\n", SDL_GetError());
SDL_Quit();
exit(-1);
}
atexit(SDL_Quit);
if (TTF_Init() < 0) {
printf("No se pudo iniciar SDL_ttf: %s\n",SDL_GetError());
SDL_Quit();
exit(-1);
}
atexit(TTF_Quit);
destino.x = 0;
destino.y = 0;
SDL_BlitSurface(fondo, NULL, screen, &destino);
SDL_FreeSurface(fondo);//liberamos esta superficie
destino.x = 100; //escribimos un sprite en una superficie
destino.y = 100;
SDL_BlitSurface(peque, NULL, screen, &destino);
SDL_FreeSurface(peque);//liberamos esta superficie
fuente = TTF_OpenFont("fuentes/arial.ttf",10); // carga la feunte de letra tamaño 10
// inicializa colores para el texto
fgcolor.r=255;
fgcolor.g=255;
fgcolor.b=255;
bgcolor.r=255;
bgcolor.g=255;
bgcolor.b=255;
sprintf(msg,"%s",texto);
ttext = TTF_RenderText_Shaded(fuente,msg,fgcolor,bgcolor);
destino.y=100;
destino.x=100;
destino.w=ttext->w;
destino.h=ttext->h;
// Usamos color rojo para la transparencia del fondo
SDL_SetColorKey(ttext,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(ttext->format,255,0,0));
// Volcamos la superficie a la pantalla
SDL_BlitSurface(ttext,NULL,screen,&destino);
// destruimos la fuente de letra
TTF_CloseFont(fuente);
// liberar superficie
SDL_FreeSurface(ttext);
//Mix_PlayMusic(musica, -1) //hacemos sonar la musica, 0 normal -1 infinito
//Mix_PlayChannel(-1,sonido,0); //-1 canal donde suena, sonido (pues.... ) 0 normal -1infinito
musica = Mix_LoadMUS("sonidos/war.mod"); //cargamos la musica
dispar = Mix_LoadWAV("sonidos/disparo.wav");//cargamos el sonido
metral = Mix_LoadWAV("sonidos/ametralladora.wav");//cargamos el sonido
// Mix_PlayMusic(musica, -1); //hacemos sonar la musica, 0 normal -1 infinito
while (done == 0) {
SDL_Flip (screen);
printf("Hola: %s\n", SDL_GetError());
// Comprobando teclas para opciones
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CROSS) { Mix_PlayChannel(-1,dispar,0);}
if(pad.Buttons & PSP_CTRL_CIRCLE) { Mix_PlayChannel(-1,metral,0);}
while (SDL_PollEvent(&event)) {
// Cerrar la ventana
if (event.type == SDL_QUIT) {
done = 1;
}
}
}
Mix_FreeChunk (dispar); //liberamos sonido
Mix_FreeChunk (metral); //liberamos sonido
Mix_FreeMusic(musica); //liberamos la musica
Mix_HaltMusic(); //paramos la musica
SDL_FreeSurface(screen); //liberamos la pantalla
SDL_Quit();
printf("\nTodo ha salido bien.\n");
return 0;
}