BennuGD de Dreamcast sí que libera la RAM

Started by Ryo Suzuki, January 02, 2020, 01:11:43 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Ryo Suzuki

Bueno pues uno de los problemas que parecíamos tener los que estabamos trasteando con el port para Dreamcast es que no se podía gestionar la Ram y cargar y descargar recursos que ibamos usando en nuestros desarrollos, por lo que parecíamos estar limitados a los 16mb que tiene la consola.

He confirmado, o al menos eso creo a menos que me demostréis lo contrario, que no es así. Que al menos con la última versión de mi colega Indiket se pueden cargar recursos de forma ilimitada.



Lo he probado en consola real dejándolo ahí en bucle y he llegado a ver que carga y descarga más de 1 giga de datos. Y sigue...

Os dejo el código fuente y el archivo CDI si lo queréis probar directamente en el emulador.

Tenéis ahí también el binario, o sea el 1st_read.bin que es la última versión de Dreamcast de abril del año pasado. Está actualizada a KOS de esa fecha y BennuGD también de ese momento. Tiene varios updates y mejoras que Indiket podría detallaros mejor...

Aquí lo tenéis:

https://filebin.net/f5s15xtrr2jpsw4a (se cayó, mirror: https://mirrorace.org/m/3LfrF )


Yo es que ya con mi juego había llegado al límite de la RAM de la Dreamcast y ya el propio juego prueba y que funciona. Aunque KOS tampoco parece tener una gestión de la RAM para tirar cohetes lo importante es que en el port de Bennu parece funcionar ya de manera similar (y que en SDL, que pasa por ahí tb)

Un saludo.


P.D. Luego lo pongo en un server más "seguro".
P.D2. No asustéis de mi código. Da miedo, pero... funciona xD

SplinterGU

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

Ryo Suzuki

De nada, todo lo contrario.

Me puse en plan paranóico e hice otra versión que en la primera tanda a movía más que la RAM de la consola (unos 30 megas).

También funciona.

En todo caso lo probaré también con fpgs que me lo comentaba el otro día Amelian.

Una cosa sí que quiero avisaros. SplinterGU y demás ya supongo que lo dan por hecho. No es lo mismo lo que pesan los assets que usemos a nosotros que lo que le pesan a BennuGD internamente cuando los tiene en memoria, al menos las imágenes.

Quiero decir, no penséis que podéis cargar 16 megas de imágenes, audios y demás contenido hasta limpiar de nuevo la RAM. En realidad es menos.

Las imágenes creo que internamente cuando BennuGD las carga las pasa a map interno o algo y deben pesar más. Es decir, podéis tener vosotros 4 megas de imágenes que habéis optimizado pero en RAM interna a Bennu y a la Dreamcast le están ocupando el doble de RAM aprox...

Yo por lo que he visto se pueden tener unos 8 megas casi todo en imágenes reales que llenan los 16 megas de la DC cuando las ha importado BennuGD. Tenedlo en cuenta porque ya veréis que cuando empecéis a cargar muchas cosas si os pasáis se colgará.

Aún así es perfectamente factible hacer cosas ya que estamos hablando de 640x480 y da mucho lugar a la optimización.

Y siempre podemos ir cargando y descargando cosas de RAM en cuanto la necesitemos.

Un saludo!!

Drumpi

Sí, vamos lo normal de Bennu, las imágenes en RAM usan el formato MAP descomprimido.
Me alegra saber que el tema de la memoria se ha arreglado, espero que lo de la música también, si no se ha hecho ya :D

Ahora mismo estoy centrado en sacar una nueva versión del Echo para el aniversario, pero no sé si ponerme con el port a DC es viable, dadas las malas experiencias anteriores :D
De todas formas, por curiosidad ¿Has comprobado qué valor devuelve la variable global del sistema OS_ID cuando se ejecuta un programa? Empiezo a sospechar que los problemas que tuvimos están relacionados con algo de eso :P
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)

blostec

Quote from: Ryo Suzuki on January 02, 2020, 01:11:43 PM

Os dejo el código fuente y el archivo CDI si lo queréis probar directamente en el emulador.

Tenéis ahí también el binario, o sea el 1st_read.bin que es la última versión de Dreamcast de abril del año pasado. Está actualizada a KOS de esa fecha y BennuGD también de ese momento. Tiene varios updates y mejoras que Indiket podría detallaros mejor...

Aquí lo tenéis:

https://filebin.net/f5s15xtrr2jpsw4a




Hola Ryo Suzuki, quería probarlo pero veo que el link ya no funciona. Hay otro sitio donde pueda descargarlo, tengo curiosidad por ver el código. Muchas gracias.


Ryo Suzuki

#5
Drumpi, lo de la música sigue igual. Se puede solventar usando CDDA para música y WAV para los FX, de momento bien...

Lo del port, tienes que echarle bastante valor :P

Blostec, disculpa:

https://filebin.net/ls268rhsor7i3568

No lo vi. Otra vez enviadme un privado o un e-mail, please.


P.D. Drumpi, lo olvidé. Es os_id = 5 Dreamcast


l1nk3rn3l

Excelente aporte,

por si acaso tienes el codigo fuente del port de Indiket

Gracias

Ryo Suzuki

Gracias.

No, no lo tengo porque él es quien se encarga, yo de eso ni idea.

Se lo pido, ¿qué tienes en mente hacer?

l1nk3rn3l

es interesante estudiar el codigo, obviamente  seguirlo mejorando como meterle un motor3d
decente. por el momento estamos copados de trabajo .
si tienes la oportunidad de compartirlo o subirlo algun repositorio seria ideal.

Ryo Suzuki

De acuerdo, se lo pido a ver si puede subirlo.

También Ian Micheal está haciendo su propio port. No es público aún pero me pasará una versión de test en la que dice que va bien la reproducción de ogg.

Por cierto, tú que hiciste el port inicial e implementaste el save a la Visual Memory, ¿es posible que cuando grabe pueda editar lo que pone como nombre de archivo? Aparecen varias cosas que no puedo quitar...

Gracias.

l1nk3rn3l

#10
Claro todo es posible, pero en el momento estamos haciendo la parte de admob de bennu en android
y probar la integracion de un motor3D q tenemos en el horno .....
y en breve nos pondremos a revisar el dreamcast de nuevo a ver q se puede mejorar

deja aqui las sugerencias , propuestas a ver si podemos ayudar

Ryo Suzuki

De acuerdo, gracias.

A ver qué se me ocurre...

Gabysantof

Chicos, perdón que retome este tema.
Estuve tomando el código de Ryu y la verdad no entiendo como logra que se libere la ram... jajaja.
Tomé parte de su código y trate de hacer algo mucho mas simple pero a la vez mas determinante y es cargar mas de 50 imágenes diferentes una por una.
se toma una imagen... se carga... se muestra... se descarga... y pasamos a la siguiente.... no sé que estoy haciendo mal... pero poco a poco la memoria se me va acabando y en la imagen 50 páfate, se cuelga... y es que justo al llegar ahi llegamos a los 16mb de imágenes.

Estoy dejando en este repositorio todo el código y un compilado también por si lo quieren ver.
https://easyupload.io/z0vbry

Les agradecería mucho si puedo entender porque no me realiza la liberación de ram.
Abrazos!
Gracias

Ryo Suzuki

#13
Sí que te la estaba realizando la liberación de RAM.

Que te cargara 16 megas de imágenes ya era una demostración clara, porque BennuGD cuando carga en Dreamcast creo que no cuenta con 16 megas libres (eso es lo que tiene la consola)

El problema porque se te cuelga he estado mirándolo y es porque cargas la fuente y cambias el modo de video en tantas ocasiones.

Eso causa el freeze.

Mira, aquí tienes tu ejemplo retocado y ahora funciona bien, ya verás:

https://mirrorace.org/m/57u4w

Hay 59 imágenes ahora y pesan unos 24 megas. Todas las carga y las muestra en pantalla, como comprobarás.

O sea libera RAM, está demostrado.

Un saludo.

P.D. Yo hice otro ejemplo que no subi con imágenes más pesadas. No me acuerdo si de 3 o 4 megas cada una y lo probé hasta más de un giga y sigue descargando imágenes. Con esa versión del binario de Indiket funciona

P.D2. Gracias por la actualización del código porque de esa forma lo hace más sencillo y yo lo no sabía!

P.D3. Pongo el código suelto por si acaso:
https://codeshare.io/Lw3D6N
mirror: https://www.codepile.net/pile/EqgEoAyO

Gabysantof

Ryo!! Sos un genio!!
Mil gracias!!. Claro. En mí afán de reducir el código no me di cuenta que al llamar de nuevo al main() iba a cargar la fuente y el modo de video.
Que emoción! Ahora solo queda por ver si funciona con fpg. Voy a tomar tu código y hacer la misma prueba usando load y unload fpg. Crucemos los dedos. Pero que bueno esto! Un abrazo grande!