BennuGD PSP

Started by DCelso, January 12, 2011, 12:01:56 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Se me olvidaba decir que también van adjuntos los scrips de generación del EBOOT.pbp de los ejemplos para mostrar como crear tu propio EBOOT.pbp con imágen, texto y sonido en la selección de juegos (las herramientas necesarias adjuntas son solo para linux).
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

De momento te llevas otro karma por el esfuerzo.

Sobre mis pruebas y png's, mañana me pongo con ello que esta semana entre cambio de curro no he tenido tiempo.

Sobre los botones de la psp, lo mejor era que mapearas de una vez los botones de PSP de modo que sepamos que botones usar, y así dejar de una vez los problemas con los controles (a lo mejor Splinter te hecha una mano con la libjoy).

Que pongas ejemplos me parece bien, pero al final sólo sirven para crear falsas expectativas, ya que cosas con pocas funcionalidades ya pueden funcionar pero lo que nos interesa es que todo funcione.

De todos modos lo que mas me preocupa es la velocidad, ya daria prioridad a esto, todo va muy muy lento, en las cargas y demás.

DCelso

Quote from: FreeYourMind on February 03, 2011, 06:32:15 PM
De momento te llevas otro karma por el esfuerzo.
Asias :D.
Quote from: FreeYourMind on February 03, 2011, 06:32:15 PM
Sobre mis pruebas y png's, mañana me pongo con ello que esta semana entre cambio de curro no he tenido tiempo.
Ok, perfes
Quote from: FreeYourMind on February 03, 2011, 06:32:15 PM

Sobre los botones de la psp, lo mejor era que mapearas de una vez los botones de PSP de modo que sepamos que botones usar, y así dejar de una vez los problemas con los controles (a lo mejor Splinter te hecha una mano con la libjoy).
Pues esto ya lo hice yo desde la primera demo que colgué. Es un fichero .inc en el que puse unos cuantos defines para ponerle nombre a todos los botones y de camino una función para usar get_joy_button y key a la vez mapeando a un teclado para poder probarlo tanto en pc como en psp.

#define PSP_TRIANGLE_BUTTON 0
#define PSP_CIRCLE_BUTTON 1
#define PSP_X_BUTTON 2
#define PSP_SQUARE_BUTTON 3
#define PSP_L_BUTTON 4
#define PSP_R_BUTTON 5
#define PSP_DOWN_BUTTON 6
#define PSP_LEFT_BUTTON 7
#define PSP_UP_BUTTON 8
#define PSP_RIGHT_BUTTON 9
#define PSP_SELECT_BUTTON 10
#define PSP_START_BUTTON 11
#define PSP_LEFT_RIGHT_AXIS 0
#define PSP_UP_DOWN_AXIS 1
function keyjoy(int keyid)
begin
if (key(keyid))
return 1;
end
if (NUMBER_JOY()>0)
if (keyid==_UP && get_joy_button(0,PSP_UP_BUTTON))
return 1;
end
if (keyid==_DOWN && get_joy_button(0,PSP_DOWN_BUTTON))
return 1;
end
if (keyid==_LEFT && get_joy_button(0,PSP_LEFT_BUTTON))
return 1;
end
if (keyid==_RIGHT && get_joy_button(0,PSP_RIGHT_BUTTON))
return 1;
end

if (keyid==_esc && get_joy_button(0,PSP_SELECT_BUTTON))
return 1;
end

if (keyid==_enter && get_joy_button(0,PSP_START_BUTTON))
return 1;
end
end

return 0;
end


Quote from: FreeYourMind on February 03, 2011, 06:32:15 PM

Que pongas ejemplos me parece bien, pero al final sólo sirven para crear falsas expectativas, ya que cosas con pocas funcionalidades ya pueden funcionar pero lo que nos interesa es que todo funcione.
Pues no pongo ejemplos que no hagan nada, son juegos completos y estoy en ello el problema de que no funcionen algunas funciones no es culpa del port sino de quien haya programado las toolchain para psp, tampoco es plan de reprogramarlas, tendremos que adaptarnos a ellas, (a no ser que sea más dificil la adaptacion que reprogramar algo ):D.
Quote from: FreeYourMind on February 03, 2011, 06:32:15 PM

De todos modos lo que mas me preocupa es la velocidad, ya daria prioridad a esto, todo va muy muy lento, en las cargas y demás.
Esto de la velocidad de carga es también culpa de la lectura de archivos de la psp desde la toolchain, he probado algunos juegos portados de SDL PC a SDL psp y les pasa lo mismo, tardan taco en cargar pero luego van bien, como no lo arreglen los que hicieron el porl de SDL psp la llevamos clara también.

En cuanto a lo de que el "set_fps(loquesea,0)" vaya tan lento en psp en vez de ir como en pc, para esto no tengo explicación, creo que sí tiene que ser culpa de bennu, tengo que analizar el código de esta función para intentar detectar el problema, pero bueno, se arregla con poner set_fps(loquesea,3). Un simple if en tu código prg lo arreglaría.

frameskip=0;
if (OS_ID==OS_PSP)
   frameskip=3;
end
set_fps(25,frameskip);

Para lo del ensanchado de resoluciones distintas a la nativa de la psp,( también problema de SDL PSP) se puede arreglar también por código prg.

if (OS_ID==OS_PSP)
  scale_resolution = 04800240;
end


Tenemos que pensar que ningún .prg que no esté pensado para correr en psp va a ser portado directamente a psp, tenemos que tocar algo de código .prg debido a las características técnicas de la psp, pero bueno esto es como siempre ha pasado para otros ports de nuevas plataformas de bennu.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

Vale, este finde intentaré adaptar alguna demo a psp con tu port para ver si ya tira perfecto con lo que tengas ahora mismo  ;)

DCelso

Quote from: FreeYourMind on February 03, 2011, 11:16:11 PM
Vale, este finde intentaré adaptar alguna demo a psp con tu port para ver si ya tira perfecto con lo que tengas ahora mismo  ;)
ah, guais, estoy intentando depurar echo, pero está to complejo, este Drumpi, no veas como complica las cosas, con signals y variables globales :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Jajaja ¿Echo complicado? :D
Bueno, sí, un poco sí que lo es, pero dentro del desastre está bastante bien organizado ^^U
Puedes empezar probando el motor de tiles v3 que andaba en un hilo por ahí, que es el que uso en Echo. Si eso funciona, puedes descartar los ficheros add_tile, tscroll y tmap (con extensión .h y .inc). Por lo general, las variables globales están en los .h y sólo las usan sus respectivos.inc, salvo que sean genéricos del juego.
SBTime es algo más sencillo, pero necesitas un ratón para hacerlo funcionar :D

Respecto a ficheros de test, en Bennu tengo muy pocos, la mayoría los hice en Fenix para ver cómo iban algunas funciones y hacer algunas conversiones, pero son un caos, no sé si te iban a servir (son programas cortos, para probar una función o dos, generalmente usando un fichero externo).

De paso, un nuevo karma al esfuerzo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

#126
Callejón sin salida.
A ver si alguno tiene idea del por qué

type t_mapa
    //datos del mapa
    int version;
    int filas;
    int columnas;
    int capas;
    int tipo_dato;
    int ancho_tile;
    int alto_tile;
    int desplaz_tile;           //para scroll normal, desplazamiento vertical de cada capa
                                //para scroll isom�trico, altura hacia arriba
    string fpg;
    word tipo_mapa;
    //contenido del mapa
    byte pointer b_mapa;
    word pointer w_mapa;
<b>     int pointer i_mapa; </b>
    int fpg_mapa;
    //gestion de mapas (por si se almacenan los datos en lista enlazada)
    int id;
    t_mapa pointer sig;
    byte null2;
end
process load_tmf (string tmf_carga, t_mapa pointer tmf_mapa)
private
      id_tmf;
      cont;
      cont2;
      byte dato;
      word dato2;
      int  dato3;
      string magic;

      filas;
      columnas;
      capas;
      tam_dato;
      guardado_correcto;
<b>   int *puntero_datos;</b>
     int tamanio =3800;
     
     
begin
    [tmf_mapa].tipo_mapa=1;
    guardado_correcto=false;
    if (file_exists(tmf_carga))
       id_tmf=fopen(tmf_carga,o_read);
   if (id_tmf==0) return 0; end;
       //LECTURA CAMPO MAGIC
       cont=0;
       for (cont=0;cont<16;cont++)
           fread(id_tmf,dato);
           magic=magic+chr(dato);
       end
       if (magic=="TileMapFile "+chr(26)+chr(13)+"\n")
               
          //LECTURA DE LA VERSION
          fread(id_tmf,dato3);
          [tmf_mapa].version=dato3;
          //LECTURA DE FILAS, COLUMNAS Y CAPAS
          fread(id_tmf,dato3);
          columnas=dato3;
          [tmf_mapa].columnas=dato3;
          fread(id_tmf,dato3);
          filas=dato3;
          [tmf_mapa].filas=dato3;
          fread(id_tmf,dato3);
          capas=dato3;
          [tmf_mapa].capas=dato3;

          cont2=columnas*filas*capas;

          //LECTURA DE TIPO DE DATO
          fread(id_tmf,dato3);
          tam_dato=dato3;
          [tmf_mapa].tipo_dato=dato3;
          //LECTURA DE ANIMACIONES (temporalmente disabled)
          fread(id_tmf,dato3);

          //ZONA DE DATOS
          switch (tam_dato)
                 case 0:
          print_debug("CASE O");
                      [tmf_mapa].b_mapa=alloc(cont2);
                      print_debug("ALLOC 0");
                 end
                 case 1:
          print_debug("CASE 1");
                      [tmf_mapa].w_mapa=alloc(cont2*sizeof(word));
                      print_debug("ALLOC 1");
                 end
                 case 2:
          print_debug("CASE 2");                  
<b>                        //[tmf_mapa].i_mapa=alloc(cont2*sizeof(int)); </b>  <-- esto cuelga la PSP, pero en PC va
<b>                         puntero_datos=alloc(tamanio*sizeof(int));</b>  <-- esto no cuelga la PSP
          print_debug("Despues de ALLOC");                  
<b>                        (*tmf_mapa).i_mapa=puntero_datos; </b>  <-- esto cuelga la PSP, pero en PC va
<b>                       //tmf_mapa.i_mapa=puntero_datos; </b>  <-- esto cuelga la PSP, pero en PC va
<b>                       //[tmf_mapa].i_mapa=puntero_datos; </b>  <-- esto cuelga la PSP, pero en PC va

                 end
          end
          print_debug("despues de ALLOC");

          cont=1;
          for (cont;cont<=cont2;cont++)
              switch (tam_dato)
                     case 0:
                          fread(id_tmf,dato);
                          [tmf_mapa].b_mapa[cont-1]=dato;
                     end
                     case 1:
                          fread(id_tmf,dato2);
                          [tmf_mapa].w_mapa[cont-1]=dato2;
                     end
                     case 2:
                          fread(id_tmf,dato3);
                          [tmf_mapa].i_mapa[cont-1]=dato3;
                     end
              end
          end
          print_debug("despues for CONT");
         
          guardado_correcto=true;
       end
       print_debug("ANTES FCLOSE");
       fclose(id_tmf);
    end
    print_debug("ANTES RETURN");
    return (guardado_correcto);
    frame;
end



Creía que fallaba la función alloc en psp, pero no es así, parece que falla la asignacion de un puntero con otro.
Me tiene todo escamao, ¿será problema de ámbito?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

No he tenido tiempo de probarte nada.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

pues la llamo así

.....
      //VARIABLES DINAMICAS PARA CARGA DE NIVEL Y DUREZAS
      //word pointer nivel;
      //byte pointer durezas;
      t_mapa nivel;
      t_mapa durezas;
...
...
...
     load_tmf("IFenixD.tmf",&nivel);
     print_debug("**despues de tmf IFenixD");
     
     load_tmf("IFenix2.tmf",&durezas);
     print_debug("**despues de tmf IFenix2");
....
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

lo mosqueante es que funciona en el PC perfectamente y en la psp el mismo dcb la cuelga.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

en pc va bien, y da los resultados esperados? o solo no se cuelga?

puede ser alguna de las cosas que le has puesto valores por default en el compilador, no se que tan diferente es la version psp de la oficial.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

ya pensé eso, y probé la version monolítica de linux para ver si fallaba y nada, no falla,
también pensé en los parámetros y probé unos cuantos bgdis compilados con parámetros distintos, como -00, -02 -fno-strict-aliasing, -0S -fno-strict-aliasing, -03 -fno-strict-aliasing, y nada.

Una cosa que me escama es que tengo que compilar con -G1, o -G2, o -G3, si no pongo ninguno o pongo un g superior a 3 falla el linkado con el siguiente problema:

build_psp/src/strings.o: En la función `string_format':
strings.c:(.text+0x554): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
build_psp/src/sysprocs.o: En la función `get_var_info':
sysprocs.c:(.text+0x1444): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x15ec): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x1b44): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x1cf4): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x2194): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x23ec): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
sysprocs.c:(.text+0x2504): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
build_psp/src/dirs.o: En la función `dir_open':
dirs.c:(.text+0x354): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
build_psp/src/mod_debug.o: En la función `get_token':
mod_debug.c:(.text+0x4b8): reubicación truncada para ajustar: R_MIPS_GPREL16 contra `__ctype_ptr'
build_psp/src/regex.o: En la función `regex_compile':
regex.c:(.text+0xa48): se omitieron desbordamientos de reubicación adicionales de la salida
collect2: ld devolvió el estado de salida 1
make: *** [bgdi.elf] Error 1

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

los parámetros con los que compilo son:

-Wall -Os -fno-strict-aliasing  -DTARGET_PSP -D__STATIC__ -DDISABLE_X11 -D__BGDRTM__ -DVERSION=\"1.0.0\" -D__LITE__=$(LITTLE_VERSION) \
         -I$(BUILD_DIR)/src -DJOY_YES $(shell $(PSPBIN)/sdl-config --cflags) -DSTDC_HEADERS

y linko con:

-lz -lpng -lSDL_mixer -logg -lvorbis -lvorbisidec  -lsmpeg -lstdc++ -L$(OSSL_INSTALL_DIR) -lcrypto  -L/SDKs/pspdev/psp/lib -lSDLmain -lSDL -lm -lGL -lpspvfpu -L/SDKs/pspdev/psp/sdk/lib -lpspdebug -lpspgu -lpspctrl -lpspge -lpspdisplay -lpsphprm -lpspsdk -lpsprtc -lpspaudio -lc -lpspuser -lpsputility -lpspkernel -lpspnet_inet -lpspirkeyb -lpsppower
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

ni idea... que loco eso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2