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.

Drumpi

Pues yo he compilado con estas definiciones de variables:

Firm Open2X:
#!/bin/sh

## -- OPEN2X USER SETTINGS

## OPEN2X - This should point to the root of your tool-chain {i.e. folder above the BIN dir}

OPEN2X=/opt/open2x/gcc-4.1.1-glibc-2.3.6

## HOST and TARGET - These should be the canonical tool names of your tool.
## For the sake of this script HOST and TARGET should be the same.
## Defaults would be 'arm-open2x-linux' for a normal Open2x tool-chain.

HOST=arm-open2x-linux
TARGET=arm-open2x-linux
BUILD=`uname -m`
PKG_CONFIG_PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/lib/pkgconfig

## -- END OPEN2X USER SETTINGS

export OPEN2X
export HOST
export TARGET
export PKG_CONFIG_PATH

PREFIX=$OPEN2X
export PREFIX

PATH=$PATH:$OPEN2X/bin
export PATH

#ln -s `whereis -b pkg-config | sed 's/pkg-config\: //g'` /opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/bin/pkg-config

# Do not edit below here
CC="${OPEN2X}/bin/${HOST}-gcc"
CXX="${OPEN2X}/bin/${HOST}-g++"
AR="${OPEN2X}/bin/${HOST}-ar"
STRIP="${OPEN2X}/bin/${HOST}-strip"
RANLIB="${OPEN2X}/bin/${HOST}-ranlib"

CFLAGS="-DTARGET_GP2X_WIZ -O2 -ffast-math -fomit-frame-pointer -mcpu=arm920t -DARM -D_ARM_ASSEM_ -I${OPEN2X}/include -I${OPEN2X}/include/libxml2 -I${OPEN2X}/include/SDL"
LDFLAGS="-L${OPEN2X}/lib"
PKG_CONFIG="${OPEN2X}/bin/pkg-config"

export CC
export CXX
export AR
export STRIP
export RANLIB
export CFLAGS
export LDFLAGS
export PKG_CONFIG

echo Current settings.
echo
echo Install root/Working dir = $OPEN2X
echo Tool locations = $OPEN2X/bin
echo Host/Target = $HOST / $TARGET
echo

echo CC         = $CC
echo CXX        = $CXX
echo AR         = $AR
echo STRIP      = $STRIP
echo RANLIB     = $RANLIB

echo CFLAGS     = $CFLAGS
echo LDFLAGS    = $LDFLAGS
echo PKG_CONFIG = $PKG_CONFIG

#cd vendor/des-4.04b; make -f Makefile.openwiz clean all install; cd -
#cd core; ./configure --prefix=${PREFIX} --target=${TARGET} --host=${HOST} --build=${BUILD} --enable-shared ; make -f Makefile; cd -

echo ""
echo "Now do:"
echo "cd project"
echo './configure --prefix=${PREFIX} --target=${TARGET} --host=${HOST} --build=${BUILD} --enable-shared'


Firm oficial
#!/bin/sh

## -- OPEN2X USER SETTINGS

## OPEN2X - This should point to the root of your tool-chain {i.e. folder above the BIN dir}

OPEN2X=/opt/sdkoficial2
#OPEN2X=/opt/sdkoficial

## HOST and TARGET - These should be the canonical tool names of your tool.
## For the sake of this script HOST and TARGET should be the same.
## Defaults would be 'arm-open2x-linux' for a normal Open2x tool-chain.

HOST=arm-gp2x-linux
TARGET=arm-gp2x-linux
BUILD=`uname -m`
PKG_CONFIG_PATH=/opt/sdkoficial2/arm-gp2x-linux/lib/pkgconfig
#HOST=arm-linux
#TARGET=arm-linux
#BUILD=`uname -m`
#PKG_CONFIG_PATH=/opt/sdkoficial/arm-linux/lib/pkgconfig

## -- END OPEN2X USER SETTINGS

export OPEN2X
export HOST
export TARGET
export PKG_CONFIG_PATH

PREFIX=$OPEN2X
export PREFIX

PATH=$PATH:$OPEN2X/bin
export PATH

#ln -s `whereis -b pkg-config | sed 's/pkg-config\: //g'` /opt/openwiz/toolchain/arm-openwiz-linux-gnu/bin/pkg-config

# Do not edit below here
CC="${OPEN2X}/bin/${HOST}-gcc"
CXX="${OPEN2X}/bin/${HOST}-g++"
AR="${OPEN2X}/bin/${HOST}-ar"
STRIP="${OPEN2X}/bin/${HOST}-strip"
RANLIB="${OPEN2X}/bin/${HOST}-ranlib"

CFLAGS="-DTARGET_GP2X_WIZ -O2 -ffast-math -fomit-frame-pointer -mcpu=arm920t -DARM -D_ARM_ASSEM_ -I${OPEN2X}/include -I${OPEN2X}/include/libxml2 -I${OPEN2X}/include/SDL"
LDFLAGS="-L${OPEN2X}/lib"
PKG_CONFIG="${OPEN2X}/bin/pkg-config"

export CC
export CXX
export AR
export STRIP
export RANLIB
export CFLAGS
export LDFLAGS
export PKG_CONFIG

echo Current settings.
echo
echo Install root/Working dir = $OPEN2X
echo Tool locations = $OPEN2X/bin
echo Host/Target = $HOST / $TARGET
echo

echo CC         = $CC
echo CXX        = $CXX
echo AR         = $AR
echo STRIP      = $STRIP
echo RANLIB     = $RANLIB

echo CFLAGS     = $CFLAGS
echo LDFLAGS    = $LDFLAGS
echo PKG_CONFIG = $PKG_CONFIG

#cd vendor/des-4.04b; make -f Makefile.openwiz clean all install; cd -
#cd core; ./configure --prefix=${PREFIX} --target=${TARGET} --host=${HOST} --build=${BUILD} --enable-shared ; make -f Makefile; cd -

echo ""
echo "Now do:"
echo "cd project"
echo './configure --prefix=${PREFIX} --target=${TARGET} --host=${HOST} --build=${BUILD} --enable-shared'


Aparte de eso no he cambiado ni una sóla línea de ningún código o fichero, y os digo, me funcionan ambos en mi negrita, pero eso, cuando puede, se acelera muchísimo, es la única consecuencia de usar los timers de WIZ (lo supongo, porque tengo en los CFLAGS la constante -DTARGET_GP2X_WIZ).
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)

SplinterGU

seguramente deberias ver cuales son los timers de gp2x, si encuentro info actualizo el codigo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

test de fps(0,0).
He probado el temp1.prg del scrolltileado de Drumpi adaptado para psp y solucionando el problema de bloqueo y el resultado es el siguiente:
en PC da unos 90 fps de media y en PSP da unos 35 fps de media.

El problema de bloqueo de la psp parece encontrarse al hacer alloc y guardar el contenido en un campo puntero a tipo int a un puntero de un type.
A ver si llego a un ejemplo básico que se centre en probar justo eso.

También a ver si pongo las modificaciones que hice para GP2X y que nos las valide Splinter.
Monstruos Diabólicos

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

DCelso

Problema encontrado:
Esto va perfecto en la PSP:

program demo_compatible_tiled_scroll;
type t_mapa
     <b>int tipo_mapa;     </b>
     int pointer i_mapa;
end

GLOBAL
    _jkey_UP          = 8;
    _jkey_UPLEFT     = 8;
    _jkey_LEFT        = 7;
    _jkey_DOWNLEFT   = 6;
    _jkey_DOWN        = 6;
    _jkey_DOWNRIGHT  = 6;
    _jkey_RIGHT       = 9;
    _jkey_UPRIGHT    = 9;
    _JKEY_START        = 11;
    _jkey_SELECT      = 10;
    _jkey_L    = 4;
    _jkey_R    = 5;
    _jkey_A           = 2;
    _jkey_B           = 1;
    _jkey_X           = 0;
    _jkey_Y           = 3;
    _jkey_VOLUP      = 12;
    _jkey_VOLDOWN    = 13;
     t_mapa tmapa;
END

process load_tmf (string tmf_carga)
private
       cont2=3800;       
begin
       tmapa.i_mapa=alloc(cont2*sizeof(int));
       return 1;
end

private
       string dir_mapa;
       int error2;
begin

     set_mode(480,240,16);
     set_fps(0,0);
     dir_mapa="IFenixD.tmf";
     
     error2=load_tmf(dir_mapa);
     
end



Esto bloquea la PSP

program demo_compatible_tiled_scroll;
type t_mapa
     <b>word tipo_mapa;</b>
     int pointer i_mapa;
end

GLOBAL
    _jkey_UP          = 8;
    _jkey_UPLEFT     = 8;
    _jkey_LEFT        = 7;
    _jkey_DOWNLEFT   = 6;
    _jkey_DOWN        = 6;
    _jkey_DOWNRIGHT  = 6;
    _jkey_RIGHT       = 9;
    _jkey_UPRIGHT    = 9;
    _JKEY_START        = 11;
    _jkey_SELECT      = 10;
    _jkey_L    = 4;
    _jkey_R    = 5;
    _jkey_A           = 2;
    _jkey_B           = 1;
    _jkey_X           = 0;
    _jkey_Y           = 3;
    _jkey_VOLUP      = 12;
    _jkey_VOLDOWN    = 13;
     t_mapa tmapa;
END

process load_tmf (string tmf_carga)
private
       cont2=3800;       
begin
       tmapa.i_mapa=alloc(cont2*sizeof(int));
       return 1;
end

private
       string dir_mapa;
       int error2;
begin

     set_mode(480,240,16);
     set_fps(0,0);
     dir_mapa="IFenixD.tmf";
     
     error2=load_tmf(dir_mapa);
     
end


Parece problema de alineación.
Ahora falta corregirlo :(, a ver si lo encuentro porque esto me imagino que va a ser chungo de encontrar, por el momento, para la psp, habrá que evitar el word en types o meter dups.
Voy a probar.
Monstruos Diabólicos

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

DCelso

Efectivamente, esto no bloquea la psp.

program demo_compatible_tiled_scroll;
type t_mapa
     <b>word tipo_mapa;</b>
     <b>word dup1;</b>
     int pointer i_mapa;
end

GLOBAL
    _jkey_UP          = 8;
    _jkey_UPLEFT     = 8;
    _jkey_LEFT        = 7;
    _jkey_DOWNLEFT   = 6;
    _jkey_DOWN        = 6;
    _jkey_DOWNRIGHT  = 6;
    _jkey_RIGHT       = 9;
    _jkey_UPRIGHT    = 9;
    _JKEY_START        = 11;
    _jkey_SELECT      = 10;
    _jkey_L    = 4;
    _jkey_R    = 5;
    _jkey_A           = 2;
    _jkey_B           = 1;
    _jkey_X           = 0;
    _jkey_Y           = 3;
    _jkey_VOLUP      = 12;
    _jkey_VOLDOWN    = 13;
     t_mapa tmapa;
END

process load_tmf (string tmf_carga)
private
       cont2=3800;       
begin
       tmapa.i_mapa=alloc(cont2*sizeof(int));
       return 1;
end

private
       string dir_mapa;
       int error2;
begin

     set_mode(480,240,16);
     set_fps(0,0);
     dir_mapa="IFenixD.tmf";
     
     error2=load_tmf(dir_mapa);
     
end


Monstruos Diabólicos

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

DCelso

tooma, alineé los types del echo y va en la psp, fallan colores, y teclas, pero era de suponer, seguiré trasteando :D.

Monstruos Diabólicos

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

SplinterGU

pero no es la solucion...

psp, tiene linux?

busca en internet alineamientos, puede que tengas que setear algo como se hace en wiz/caanoo con el echo cpu algo...

con respecto a los fps, cuante te daba con la otra que le tenias que poner skip 3?

logicamente no es problema de timers, es problema de que no le da la potencia a la psp para ejecutar todo esto, quizas porque la SDL de psp no sea un buen port o tambien porque no estamos aprovechando nada de la acceleracion de video de la psp.

lamento no poder ayudar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

ya busqué, como no sea algún parámetro del compilador no hay nada, no viene con linux tampoco :(.
Monstruos Diabólicos

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

SplinterGU

puede ser del compilador, aunque por la forma de accesar de las variables en cuestion no lo es... asi que tiene que ser como el procesador alinea los accesos.

por el momento te recomiendo no usar ningun tipo de datos que sean de diferente tamaño que un int (4 bytes), pero me temo que si hay algo interno que use algun dato de tamaño menor, tambien pueda reventar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

aro, lo suyo sería hacerlo transparente al usuario e intentar alinear los types en tiempo de compilación, desde el bgdc, o en tiempo de ejecución desde el bgdi de la PSP. Estoy buscando a ver como trata los types el sistema, pero ando un poco perdido por ahora. :D
También tengo pendiente poner los cambios que le puse al código para gpx2. y subir el echo de drumpi compilado para psp :D.
Monstruos Diabólicos

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

SplinterGU

Quote from: DCelso on February 12, 2011, 09:17:39 AM
aro, lo suyo sería hacerlo transparente al usuario e intentar alinear los types en tiempo de compilación, desde el bgdc, o en tiempo de ejecución desde el bgdi de la PSP. Estoy buscando a ver como trata los types el sistema, pero ando un poco perdido por ahora. :D
También tengo pendiente poner los cambios que le puse al código para gpx2. y subir el echo de drumpi compilado para psp :D.

evidentemente tengo un problema para explicar las cosas... algunos procesadores (como ser el caso del wiz o caanoo, y me suena que tambien es el caso de la psp, por los sintomas) tienen un modo de operacion donde las direcciones de acceso se aliean automaticamente a direcciones multiplos de 32bits (o el tamaño de la palabra del procesador), y por ende, por mas que uno quiera acceder a una direccion fuera de esta caracteristica, el procesador ignorara dicha direccion y accedera a la direccion alineada... con lo cual, si el area reservada es mejor o no esta alineada (cosa logica si nosotros accedemos a un area RAW donide cada offset es una variable), entonces tendremos problemas porque se llenarian/leerian datos donde/desde no deben...

en wiz/caanoo hay una variable del kernel que se setea antes de lanzar el programa y entonces el kernel switchea el modo antes de cargar dicha aplicacion.

este alineamiento automatico se hace para ganar performance.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

quizas esta explicacion te aclare un poco que pasa...

http://www.daniweb.com/forums/thread73230.html

evidentemente si no hay forma de cambiar ese "escalado" por defecto que hace el procesador, bennugd no puede ser 100% compatible... y quizas los problemas que tenes con colores extraños en video y demas, se deba a esto... y cuando esto este solucionado, quizas tus parches dejen de funcionar... no se, cualquier cosa puede pasar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

El tema de los colores ya ha sido explicado en este foro...

DCelso

ok, gracias por la explicación, entonces desde gcc no se podría solventar la papeleta ¿no?
Buscaré info por el sdk de psp por si hay alguna función o algo para establecer ese parámetro a la cpu.
Monstruos Diabólicos

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

DCelso

Monstruos Diabólicos

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