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

¿pero dices de modificar algun fichero c de bennu para ello?

Dos pruebas mas

Esta funciona perfectamente, la ejecuté unas 10 veces

import "mod_say"
import "mod_video"
private
int a = 12345678h;
byte * p;
begin
p = &a;
set_mode(320,280,16);
say(p[0]);
say(p[1]);
say(p[2]);
say(p[3]);
frame;
frame;
frame;
frame;
frame;
end


Esta cuelga la psp

import "mod_say"
import "mod_video"
private
int a = 12345678h;
byte * p;
begin
p = &a;
set_mode(320,280,16);
say(p[0]);
say(p[1]);
say(p[2]);
say(p[3]);
frame;
frame;
frame;
frame;
frame;
frame;
frame;
frame;
frame;
frame;
end
la ejecuté 5 veces, de las cuales 4 colgaron la psp y una no.
Monstruos Diabólicos

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

SplinterGU

Dcelso, los load_wav te funcionan? a mi en dingux, revienta al hacer load_wav.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

pues a mi sí que me van, depende del wav (al igual que el song) revienta la psp o no, pero el problema es que es aleatoriamente, si fuera siempre en el mismo sitio podría pensar que es algun dato fuera de rango pero como es aleatoriamente tiene que ser algo de gestion de prioridades que varíe dependiendo de la ejecución.
De todas formas el load_wav me funciona siempre bien en todos los wavs, es al hacer play_wav cuando me revienta. Así que dudo que sea el mismo problema.
Yo ya dudo de todo lo que le hice a la psp, quizás sea la gestión monolítica que le hice lo que hace que reviente aleatoriamente, como uso punteros a tutiplen y encima en vectores estáticos fijo que la lio sin querer en algún momento, así que estaba esperando tu versión monolítica que seguro que es más estable para ver si es problema de esto o no :D. La cosa es que en linux la versión monolítica mía va perfect, pero claro son infinitos más recuros de los que dispongo que en la psp :D.
Monstruos Diabólicos

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

SplinterGU

olvidate de las prioridades, no tiene absolutamente nada que ver... las prioridades en bennugd son solamente el orden dentro de una lista...

si te crashea con un simple while frame, me parece que las prioridades no tienen nada que ver.

para mi tiene que ver con los LOC_*, PUB_*, etc... que en la version monolitica no deberian usarse como se usa en la version modular.

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

DCelso

pues tienes que estar muy muy cerca de la tecla, mira mis dos úlitimos tests
este se bloquea en al mostrar frame8, a veces si, a veces no.

import "mod_say"
import "mod_video"
private
int a = 12345678h;
begin
set_mode(320,280,16);
x=1;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
end

Y simplemnte quitando la sección private, ya no se crashea nunca, almenos lo ejecuté 11 veces sin colgarse.

import "mod_say"
import "mod_video"
begin
set_mode(320,280,16);
x=1;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
end
Monstruos Diabólicos

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

SplinterGU

te recomiendo analices el codigo en la parte de las prioridades, asi entenderas que lo que dices no tiene nada que ver.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#231
ok, asias por la recomendación, eso haré.
Siguiente test sin problemas en psp.

import "mod_say"
import "mod_video"
local
int a = 12345678h;
begin
set_mode(320,280,16);
x=1;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
frame;
say("frame"+x++);
end


Osea con local no pasa, parece problema de la private, voy a ver public, que se parece más a private :D. Realizado,
ups, no puedo poner public si no es dentro de un proceso, en cambio private sí, voy a crear el proceso main. Realizado
tambíen la jiere la variable public, es decir, private y public hacen cosas raras en psp.
Monstruos Diabólicos

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

SplinterGU

DCelso, no hagas mas pruebas... o sea, no tiene sentido tirar pruebas a diestra y siniestra si con un while frame solo se cae.

vas a tener que hacer esa prueba con while frame, y meter log en varios lugares del codigo, hasta encontrar donde cae.

log = printf + fflush.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

ok, me parece muy correcto :D. pero tb me parece que mi prueba del simple frame tenía la variable private puesta, voy a ver si un simple while frame no casca.
Monstruos Diabólicos

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

SplinterGU

#234
lo que digo es que no tiene nada que ver las variables, porque una prueba sin variables ya demostraste que cae... entonces para que seguir probando con ejemplos mas complejos si ya tenes el ejemplo mas simple que podrias probar? ya tenes el ejemplo, empeza a debuguear a ver donde casca... y luego se ve si tiene o no sentido que casque ahi o es por algun pise de memoria o lo que sea.

incluso puede ser algun mecanismo de signal que lleva psp, y no te estas enterando.

lo que digo, es que evidentemente te va a cascar en cualquier cosa compleja que hagas si ya un simple while casca.

puede tambien ser que se estan escuchando demas eventos de SDL de los que se limpian y en algun momento la queue se llena y casca.

la verdad que no se, es dificil sin la maquina, hay un monton de cosas que yo puedo testear y darme cuenta gracias a mi experiencia... pero es dificil hacerlo a traves de otros... mas cuando se desconoce internamente lo que se esta analizando.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

jajaja, pues muucha razón que tienes. pues el ejemplo más simple es el siguiente:

Process main()
begin
set_mode(320,280,16);
say(x++);
while (1)
frame;
end
end

este casca de lo lindo, pero en cambio poniendo el say dentro del while no casca

Process main()
begin
set_mode(320,280,16);
while (1)
say(x++);
frame;
end
end

Voy a quitar el set mode y el say y ejecutarlo sin ningún módulo, si casca eso, pues debugear frame pa ver donde se casca exactamente. Tiene justísimo lo que tu dices, un acceso a memoria indebido en algún momento, algo no inicializado o desinicializado.
Monstruos Diabólicos

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

DCelso

Lo raro es que la versión monolítica en PC vaya bien, porque si no lo fuera sería culpa de ella, cachis.
Y otra cosa rara es que juegos complejos vayan bien, como el vigoroth sin sonido, el tetris, o mi piedra-papel-tijera-lagarto-spock, o el wiz de prg que tiene sonido y todo y no casca.
Monstruos Diabólicos

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

DCelso

creo que ya se por donde empezar a depurar.

import "mod_joy"
Process main()
begin
loop
if (get_joy_button(0,0))
break;
end
frame;
end
end

Este código no casca ni pa atrás.
Este otro sí

import "mod_joy"
import "mod_video"
Process main()
begin
set_mode(320,480,16);
loop
if (get_joy_button(0,0))
break;
end
frame;
end
end

Así es lo mínimo que he encotrado que casque, puedo depurar los procesos de inicialización de mod_video y las funciones set_mode y frame
¿como lo ves?
Monstruos Diabólicos

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

DCelso

nota, el get_joy lo puedo quitar, pero está para que si va bien poder salir del juego rápidamente :D
Monstruos Diabólicos

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

DCelso

ostras tu, en fenix para psp, van bien los bucles, no casa ningún ejemplo de aquí, en cambio el del sonido sí que casca igual.
Monstruos Diabólicos

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