Una pregunta es lo mismo...??

Hola a todos.
UNa pregunta, no se si es algo tonta.

Yo me instalé Ubuntú y vengo de windows.
Despues de instalarlme las psp toolchain, instale mas librerias, entre ellas SDL y lo hice siguiendo un manual, y lo hice con svn:..... y luego compilandolas.

luego mirando en paquetes synaptics vi una libreria instalada SDL.

preguntas:


1) es lo mismo instalar librerias desde //SVN.ps2de.org con el cliente svn que desvcargarla e instalarlas de packages.ubuntu.com.... y son iguales?
2) Si instalo desde packages.ubuntu.com las librerias SDL me interfiere con las sdl que ya tengo instaladas, las machaca o las actualiza,?
3) de que manera es mejor instalar las librerias?
4) cuales librerias son las mas actuales.
5) si descargo las librerias SDL desde packages.ubuntu.com/ me sirven para la PSP?

perdonad mi ignrancia pero procedo del mundo windows, que quiero borrar si puedo.
Pues a ver, creo que que no sirven, y digo creo. Mira a ver si dentro del package está un readme.psp si está es que sirve sino pues no jeje. En principio puedes tener conviviendo las dos ya que la sdl de psp se suele instalar en el directorio donde tienes el sdk de psp y al linkar le pasas la ruta así que no hay problema.
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.... XD) 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;
}
vaya lo siento pero yo aún no me he puesto a hacer nada en 3.71 :(
por partes:

lo que veas en synaptic es para linux, usea que de psp nada de nada.

por otra parte:
para compilar sdl en firm 3.x necesitas quitar el sdlmain puesto que utiliza el acceso al kernel mode que esta capado en dichos firms
eskematico, muchas gracias.
Como quito el SDlmain, te refieres en el makefile?
Pruebo y te digo

Muchas gracias de nuevoo, un saludoo.

Le quité el -lSDLmain del la linea de LIBS en el make y me hace lo mismo.
una cosa... es c++ o c?

a veces para c++ me daba problemas así que acabé por crear por mi cuenta el fichero sdl main... bueno uno parecido si tengo tiempo le hecharé un vistazo.
yo uso ubuntu, y lo edito con gedit.
luego desde un terminal, make.


muchas gracias, porfa a ver si puedes ayudarme.
si quitas sdlmain del makefile, has de asegurarte que al compilar no se le llama por otro sitio. Veo que tb has de eliminar la siguiente linea

MORE_CFLAGS = -O2 -G0 -Wall -DPSPFW3X

y dejarla tal que asi

MORE_CFLAGS = -O2 -G0 -Wall
Gracias por vuestra pronta contestacion.
Mira, consigo compilar y sin errores.
Luego copio el eboot.pbp y las imagenes y sonidos dentro de la psp (psp/game, tambien he probado en psp/game371).
En principio me sale la imagen de presentacio, pero al darle a la X me sale pantalla negra y luego el error de que no puede ejecutarse el juego.

Yo tengo la psp fat con el firmaware 3.71 m33-2 y en el recovery el kernel 3.71.

Ya no sé si es fallo de la configuracion de la psp o fallo al compilarlo.


Muchas gracias por vuestra desinteresada ayuda amigos.
( y por aguantar mi pesadez)
veo q tienes comentadas unas lineas q necesitas para el firm 3.x

PSP_MODULE_INFO("juego", 0, 1, 0);
PSP_HEAP_SIZE_MAX();
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);

Luego tambien has de ir jugando con los modos de video para ver cuales son los soportados, usea SDL_HWSURFACE, SDL_SWSURFACE, etc,etc, la psp no funciona bien con todos
Es que si descomento esas lineas, al compilar me da error.
He leido en esta pagina algo como si no hiciera falta poner esas lineas
Pone textualmente: "no hace falta ponerlo, puesto que en SDL.h ya existe un MODULE_INFO configuradito"

mira te la pongo ..
http://crysol.inf-cr.uclm.es/node/746

Gracias de nuevo por vuestra ayuda (eskematico y saulotomalo)Sigo atascaoo.
edelpuerto escribió:Es que si descomento esas lineas, al compilar me da error.
He leido en esta pagina algo como si no hiciera falta poner esas lineas
Pone textualmente: "no hace falta ponerlo, puesto que en SDL.h ya existe un MODULE_INFO configuradito"

mira te la pongo ..
http://crysol.inf-cr.uclm.es/node/746

Gracias de nuevo por vuestra ayuda (eskematico y saulotomalo)Sigo atascaoo.


busca en los fuentes de la sdl y encontrarás el sdl_main.h o algo parecido, este fichero se encarga de configurar la psp para ejecutar el software, es algo como si dijeramos las instrucciones especiales que debes de realizar antes de ejecutar código.

pues el sdl_main no lo conseguí hacer funcionar, por lo que yo me configuré mi propio main para poder compilar, lo que tu dices, y me configuré las callbacks de PSP. Así no tuve ningún problema. De todas formas si puedo cuando acabe de currar buscaré entre mis códigos algún ejemplo de esto para que puedas probar.

Por cierto esto solo me fallaba cuando programaba en C++ porque no pruebas un hola mundo en C usando SDL? así sabremos si es el mismo fallo o no.
Hola.
He hecho las pruebas.
He creado un hello mundo en C
Pruebas:
------------------------------------------------
1º prueba
main:(sin la linea de PSP_MODULE)
#include
#include
#include

//PSP_MODULE_INFO("Hola Mundo", 0, 1, 1);
#define printf pspDebugScreenPrintf

int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}

int CallbackThread(SceSize args, void *argp) {
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}

int SetupCallbacks(void) {
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}

int main() {
pspDebugScreenInit();
SetupCallbacks();
printf("Hola Mundo");
sceKernelSleepThread();
return 0;
}

makefile:
TARGET = hola
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)
PSP_FW_VERSION=371
MORE_CFLAGS = $(DEFAULT_CFLAGS) -O3 -Wall -DPSP -DPSPFW30X

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)

BUILD_PRX=1

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = hola
#PSP_EBOOT_ICON = ./imagenes/iconoinicio.png
#PSP_EBOOT_PIC1 = ./imagenes/background.png

include $(PSPSDK)/lib/build.mak

Resultado:
Compilacion: correcta
En la PSP: Tanto en recovery kernel 1.50 como 3.71 funciona bien.
------------------------------------------------
2ª prueba
main:(inluyo la linea de PSP_MODULE)
#include
#include


PSP_MODULE_INFO("Hola Mundo", 0, 1, 1);
#define printf pspDebugScreenPrintf

int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}

int CallbackThread(SceSize args, void *argp) {
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}

int SetupCallbacks(void) {
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}

int main() {
pspDebugScreenInit();
SetupCallbacks();
printf("Hola Mundo");
sceKernelSleepThread();
return 0;
}

makefile (sin nada de SDL)
TARGET = hola
PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin

OBJS = main.o

PSP_FW_VERSION=371
MORE_CFLAGS = $(DEFAULT_CFLAGS) -O3 -Wall -DPSP -DPSPFW30X

CFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS)
CXXFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS) -fno-exceptions -fno-rtti

LIBS =

BUILD_PRX=1

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = hola
#PSP_EBOOT_ICON = ./imagenes/iconoinicio.png
#PSP_EBOOT_PIC1 = ./imagenes/background.png

include $(PSPSDK)/lib/build.mak

Resultado:
Compilacion: correcta
En la PSP: Tanto en recovery kernel 1.50 como 3.71 funciona bien.
-----------------------------------------------------------

sigo con mas pruebas..
como te dije, en C no estás teniendo problemas porque seguramente estarás linkando el sdl main o deberías.

A mi el makefile que te viene de casa con la sdl me daba problemas ya que me intentaba compilar con el psp-gcc y claro cuando veía un new o algo de c++ se volvía loco. Comprueba que al compilar para psp estes usando el psp-g++ en mi caso a la hora de enlazar intentaba enlazarlos con el psp-gcc y claro... las funciones no están igual en los objetos.

Resumiendo esta noche intentaré pasarte mi makefile y mi fichero main a ver si podemos arreglar este problemilla que así seguro que harás grandes homebrews :).
tio que grande eres!!
te esperaré.
muchas gracias amigo.
15 respuestas