| Inicio | Noticias | Foros PSP | Juegos | Videos | Manuales | Buscar | Contacto | Staff | Publicidad |

Retroceder   Foros PS Vita y PSP > Comunidad > Coder's Zone: Programacion PSP y PS Vita > DUDAS DE PROGRAMACION

Respuesta
 
Herramientas
Antiguo 04/01/08, 23:23:31   #1
eldelpuerta
Junior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 8
Thanks: 0
Thanked 0 Times in 0 Posts
eldelpuerta por el buen camino
Predeterminado makefile para 3.x

[PSP] homebreaw para 3.71

Hola amigos.
Tengo instalado ubuntu+toolchain+sdk+sdl+choormil librerias mas
Para edita uso el kdevelope.
Tengo una "fat" con firmware 3.71 y le puse el parache para homebrew 1.50

Hasta ahora he estado compliando para 1.50. y cambiando en el menu recover lo de GAME FOLDER HOMBREW A (1.50 KERNEL) me ha funcionado los hombrew para 1.50 perfectamente compilados por mi.

AHora he compilado "supuestamente" para 3.71 con makefile para ello, y en principio me lo ha compilado bien. He puesto la opcion del menu recover lo de GAME FOLDER HOMBREW A (3.71 KERNEL). Pero al ejecutarlo en la psp no me funciona me da pantalla en negro y luego el error 800200D9.

Lo tengo compilado con una imagen de presentacion, y esa si me sale, lo que pasa es que luego al darle para ejecutar me sale pantalla en negro y luego el error 800200D9


Alguien me puede ayudar por favor.?
Que tengo que cambiar en mi makefile?
Pongo mi makefile para 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
eldelpuerta is offline   Responder Con Cita
Antiguo 05/01/08, 01:48:11   #2
mellon
Gusto en conocerle...
 
Avatar de mellon
 
Fecha de Ingreso: ago 2006
Ubicación: /dev/null
Mensajes: 2.577
Thanks: 1
Thanked 10 Times in 7 Posts
mellon pronto sera famoso
Predeterminado Re: makefile para 3.x

Primero de todo hay que tener el PSPSDK lo mas actualizado posible, por lo que Win32 PSPKits y paridas de estas no sirven.

Basandome en las ultimas asctualizaciones del PSPSDK:

Primero de todo hay que tener unas cuantas cosas claras:

Las homebrews (es decir el PRX que se inicie desde el EBOOT.PBP) ha de correr en User Mode.

Código:
PSP_MODULE_INFO("Homebrew", 0, VER, REV);

Para programar para 3.XX tenemos que incrementar la memoria disponible para malloc (heap size). Usando las ultimas versiones del PSPSDK podemos usar.

Código:
PSP_HEAP_SIZE_MAX();
Para asignar la maxima memoria disponible a malloc.


Podemos continuar usando un make normal y continuar corriendo el EBOOT.PBP SIN KXPLOTEAR sin ningun tipo de problema.
Si usas PSPLink has de ejecutar un archivo .PRX en vez de los .ELF los cuales no funcionan.


Si las apliaciones han de correr en User Mode, no se puede usar ninguna funcion Kernel Mode en el programa principal si no ke hay ke cargar .PRX externos al programa para poder realizar las funciones en Kernel Mode.


Por ultimo en el Makefile:

Código:
PSP_FW_VERSION = 3XX
-- Donde las XX son la version para la que deseas compilar.
y

Código:
BUILD_PRX = 1
Siempre que necesitemos cargar la funciones externas para realizar llamadas Kernel Mode. O si queremos probar nuestras aplicaciones a traves del PSPLink (repito los ELF no funcionan).


Si no me equiboco eso es todo.... Quizas me dejo algo.... Pero bueno, es cuestion de buscar ejemplos de programas para 3.XX y ver como estan implementados.


Salu2
__________________

“Hoy en día la programación es una carrera entre los ingenieros de software, afanándose por construir mejores y más grandes programas a prueba de idiotas, y el Universo, intentando producir mejores y más grandes idiotas. Hasta ahora, el Universo va ganando…”

- Rick Cook -



- Exisisten 10 tipos de personas, los que entienden código binario y las que no.

mellon is offline   Responder Con Cita
Antiguo 05/01/08, 10:45:22   #3
eldelpuerta
Junior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 8
Thanks: 0
Thanked 0 Times in 0 Posts
eldelpuerta por el buen camino
Predeterminado Re: makefile para 3.x

Muchas gracias por tu aclaracion.
Ahora me pasa esto:


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+0x30: 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL.h>
#include <SDL_ttf.h>
#include <SDL_mixer.h>
#include <SDL_image.h>
#include <pspctrl.h>
#include <pspsdk.h>
#include <pspkernel.h>

//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;
}

Última edición por eldelpuerta fecha: 05/01/08 a las 15:07:59
eldelpuerta is offline   Responder Con Cita
Respuesta

Bookmarks

Herramientas



La franja horaria es GMT +2. Ahora son las 15:53:55.


Powered by: vBulletin, Versión 3.8.5
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.
Traducción VBulletin por vbulletinhispano.com