Bennupack Dreamcast DEVKIT 2017

Started by l1nk3rn3l, April 17, 2017, 12:40:20 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Ryo Suzuki

l1nk3rn3l, te quiero informar de un importante bug que he descubierto.

No se pueden descargar recursos de la RAM en el port de Dreamcast. Es decir en cuanto intentamos un Unload wav, map_del, unload_fpg, etc... o cualquier cosa para eliminar recursos de la memoria no lo hace.

Esto es bastante importante creo yo ya que solo contamos con unos 10 megas de RAM reales y si no podemos andar cargando y descargando assets la cosa se complica bastante...

Lo acabo de comprobar tanto en tu versión como la de Indiket (que partía de la tuya) no funciona. Con el mod_mem se ve claramente que no libera ese espacio de la ram cuando descargamos algo. A ver si puedes echarle un ojo, creo que es muy importante.

Gracias, un saludo.

folken

Hola, yo también sufri lo mismo ahora que pasé mi juego al port, tuve problemas con el unload_fpg(), no lograba liberar los ficheros, al hacer un nuevo load_fpg(), hace cosas raras como mezclarlos o mostrar el fpg anterior, lo que yo tuve que hacer fue cargar todos mis fpg de un solo golpe en el begin-end de la sección PROGRAM.

Un dato curioso el unload_wav() si me funciona puedo cargar y descargar archivos wav a mi gusto, solo de esa manera logré ponerle diferentes sonidos de fondo a los 10 niveles de mi juego.

Referente a la función delete_text(variable), me borraba todos los textos, sin importar que le pasara el nombre de la variable a borrar de la pantalla.

Saludos!  :)
Where reality ends, life begins!

l1nk3rn3l

#17
No hemos vuelto a mirar el port DC, como todos andamos ocupados en labores...

Si ya habiamos notado ese problema .. y se deriva directamente del port de la SDL  que segun recuerdo
la ram se fragmenta tanto que ya no se puede alojar mas...
por eso es que los dos port que mencionas
tienen el mismo problema..

La solución que se encontro en ese entonces  (y no se implemento ) fue:

1. usar modulos compartidos (mod_....dll)  en dreamcast al estilo del port fenix de los rusos..
2. la mas facil .. implementar una llamada a una funcion  "ejecutar_dcb()" y reiniciar los recursos  de DC (INIT MALLOCSTATS)

3. La otra es investigar por que malloc y free no funcionan correctamente en DC .. y se llevaria mas tiempo en eso...
y posiblemente sea que bennu este compilandose en una version debug , como lo dice en el manual
que malloc de la version debug nunca libera memoria  (4.6 Memory Allocation System) Pag.17

http://www.sega-dc.de/dateien/programmierung/kos.pdf

4. Ponerme de acuerdo con splinter para crear un recolector de basura para bennu, y gestionar la memoria
   como lo hace java, lua o c#,   pero eso deberia hacerlo el sistema operativo automaticamente en este caso KOS o el WinCE... 

Toca revisar
   


folken

Gracias por responder l1nk, se ve que hay que revisar varios puntos respecto a liberar memoria en la DC, usando el kos, jejeje por mientras seguiré pasando mis juegos al port, tal y como se encuentra ahora, con unos sencillos trucos aun me funciona bien, como cargar de un solo golpe todos los FPG que requiere mi juego y cargar por demanda los WAV, esa parte me funciona bien.

Como lo mostré en el video de Youtube, mi juego logró correr en consola física DC sin ningún problema, mi hijo y yo lo jugamos varias horas y nunca se colgó o tronó, en resumen funcionó bien y a una excelente velocidad.

Como lo prometí ya esta lista la web para descargar mi juego, también está el código fuente de Bennu por si alguien quiere ampliarlo, modificarlo o trastearle, jejeje...


http://cowboy.totalh.net


¿Oye L1nk crees que te pueda servir mi juego para agregarlo a tu BennuPack de Dreamcast? , me sentiría feliz si lo agregan.

Saludos!!!  ;D ;D ;D

Where reality ends, life begins!

l1nk3rn3l

#19
 ;D

Bien arreglemos el port lo subiremos en el proximo pack de DC con tu juego +

Recuerda que hay un pack similar para PSP y PS2 para facilmente portar el juego...
https://sourceforge.net/projects/coldev/files

si quieres algo mas complejo como correr el juego en navegador pues...
tienes el port de bennu de Chrome aqui algunos juegos bennu corriendo en chrome
http://coldev.webs.com/


Y si deseas espacio ilimitado para subir proyectos tienes :
https://sourceforge.net/

https://github.com/

Estas paginas te permiten crear aparte una pagina web si lo deseas...

algo parecido a esto como en sourceforge que estamos montando..   https://coldev.sourceforge.io/



folken

#20
Gracias l1nk por la info, ahora mismo le pongo las manos encima al port de PS2, creo recordar tener una guardada, es de las primeras, no es la slim, voy a probar y si tengo dudas los molestaré preguntando.


Hola ya encontré mi vieja PS2, es de las grandotas, una pregunta ¿a cuantas X debo quemar el ISO?, por ejemplo en Dreamcast lo escribo a 16X para que la consola pueda leerlo.

¿En PS2 cuantas X?

¿Puedo quemarlo en DVD o tiene que ser un CD-R?

¿Puedo quemar la ISO con cualquier software o tiene que ser con UltraISO solamente?


Voy a pasar el Cowboy-Bebop al port, continuaré con más preguntas en la sección referente a PS2, haber si pudieras sacarme de estas dudas.




Saludos  ;D
Where reality ends, life begins!

l1nk3rn3l

#21
Funciona en ambos cd y dvd .. como siempre debe grabarse a baja velocidad ...
lo menos que aguante tu dvr  .. y grabarse en cualquier software , que soporte iso..

creo que tambien funciona en memoria USB... usando ulaunch  mira los ejemplos.. este metodo ahorra tiempo..

y como siempre es mejor probarlo en emulador .. y cuando este listo lo probas en hardware real...


http://forum.bennugd.org/index.php?board=73.0

Ryo Suzuki

Quote from: l1nk3rn3l on August 23, 2017, 02:40:34 PM

2. la mas facil .. implementar una llamada a una funcion  "ejecutar_dcb()" y reiniciar los recursos  de DC (INIT MALLOCSTATS)

Eso sería genial. No solo para evitar este problema, también se podrían lanzar diferentes .dcb y crear recopilatorios.

Quote from: l1nk3rn3l on August 23, 2017, 02:40:34 PM


3. La otra es investigar por que malloc y free no funcionan correctamente en DC .. y se llevaria mas tiempo en eso...
y posiblemente sea que bennu este compilandose en una version debug , como lo dice en el manual
que malloc de la version debug nunca libera memoria  (4.6 Memory Allocation System) Pag.1

Eso descartado. Lo hemos probado a compilar sin debug y sucede lo mismo.

Quote from: l1nk3rn3l on August 23, 2017, 02:40:34 PM
4. Ponerme de acuerdo con splinter para crear un recolector de basura para bennu, y gestionar la memoria
   como lo hace java, lua o c#,   pero eso deberia hacerlo el sistema operativo automaticamente en este caso KOS o el WinCE... 

Sí, el KOS en este caso. Pero en BennuGD de PC sí que se libera bien la memoria, ¿verdad?

Quote from: l1nk3rn3l on August 23, 2017, 08:51:23 PM
Bien arreglemos el port lo subiremos en el proximo pack de DC con tu juego +

Bien, sería fantástico. Es necesario realmente poder liberar memoria de manera óptima porque de lo contrario estamos muy condicionados con la poca disponible en Dreamcast una vez que arranca BennuGD.

Realmente he estado haciendo pruebas y algo sí que hace con los Map unload y demás. No la libera, o sea la memoria no sube pero algo hace porque si no lo hago y lo meto en un bucle de prueba baja rápidamente. Es como si la reubicase como puede o algo así, pero limpiarla por desgracia, no la limpia...

folken

Como bien lo dices amigo Ryo sería genial poder liberar memoria con el unload_fpg(), l1nk comenta que el port de la DC aun está en desarrollo, me gustaría ayudar pero nunca le he trasteado al KOS ni a OpenGL  :'( , jejeje solo me queda esperar.

Aun con las limitaciones actuales en el portDC, agradezco el esfuerzo de todos ustedes por crearlo, estoy muy contento de poder usarlo en mis proyectos.

Cuando pasé el "Cowboy-Bebop" también me las encontre dificiles, llegó un momento en que no iniciaba el juego, debido a que había superado la RAM disponible de la DC, así que tuve que cancelar 8 pantallas donde se narraba el final del juego, originalmente eran 10 pantallas al terminar el juego pero tuve que reducirlo a 8.

Pueden verlo en el código fuente, ya si más adelante se hace la mejora en el portDC, los que gusten pueden hacerle el cambio al código del  "Cowboy-Bebop".

Saludos!!!!  ;D


Where reality ends, life begins!

Ryo Suzuki

Interesante lo que comentas, eso querría decir que el Fénix de Dreamcast sí que liberaba la RAM.

Estuve hablando con Chui que fue el autor y a pesar de que hace ya muchos años a él le suena que si que hacia el free bien en Fenix de la Dreamcast. Así que quizás mirando a su port de Fenix, a su source podría darnos una pista de cómo lo hace:

http://chui.dcemu.co.uk/fenix.html#Downloads

De todas formas folken, creo que quizás tenga una solución para que tu Cowboy Bebop te entre en la RAM de la DC sin tener que quitarle contenido, en breve te mando un privado.

A ver si pudieramos solventarlo. Pudiendo descargar y cargar la ram la cosa cambiaría mucho...

FreeYourMind

Bennu lo deberia hacer de forma similar ya que es un fork de fenix, pero como ha tenido cambios a lo mejor falla por algun motivo que habria quie comparar en el src de ambos

folken

Como bien lo dice Free habría que aventarse un clavado en el source del port de fenix para ver como lo hace chui, gracias Ryo por los links, ya los bajé, haber si puedo ayudar un poco, aunque por ahora estoy muy metido con mi juego usando el Yeti3D para PS2 y la DC.

;D
Where reality ends, life begins!

Ryo Suzuki

Sí, yo le estuve echando un ojo también.

No sé si van por aquí los tiros pero en Fenix de Chui:

void free_map (MAP * map)
{
if (map->depth == 8 && map->palette) free (map->palette) ;
if (map->n_flags & F_NCPOINTS) free (map->cpoints) ;
free (map->data) ;
free (map) ;
}


Y en BennuGD:

void bitmap_destroy( GRAPH * map )
{
    if ( !map ) return ;

    if ( map->cpoints ) free( map->cpoints ) ;

    if ( map->code > 999 ) bit_clr( map_code_bmp, map->code - 1000 );

    if ( map->data && !( map->info_flags & GI_EXTERNAL_DATA ) ) free( map->data ) ;

    if ( map->format )
    {
        if ( map->format->palette ) pal_destroy( map->format->palette ) ;
        free ( map->format );
    }

    free( map ) ;
}


Ni dea, a mí todo esto se me escapa!

l1nk3rn3l

#28
El nuevo dreamcast incluira esto...  todavia en pruebas...



+ SDL 1.2.15
+ PNG  1.6.32
+ MIKMOD 3.3.11.1
+ Zlib 1.2.11
+ arreglos de memoria
+ se arreglo la funcion  exec("program.bin");   mod_sys
+ mejoras internas
+ nueva libreria fake sdl mixer del  (Author: arcadenea, https://github.com/arcadenea/fake_mixer)
+ arregladas las funciones del modulo mod_mem,  (mem_total and mem_available)
+ bootdreams 2.0 (win10 arreglos) exclusivo del pack



Por el momento seguimos en la optimizacion de la memoria...
segun los test de malloc   

+ cuando liberas memoria el sistema operativo KOS  siempre te dice que te queda la misma
memoria libre, segun veo eso en otros sistemas operativos es normal ese comportamiento .. (queda un remanente fantasma)

+ la DC tiene 16MB de RAM (incluyendo bennu y kos cargados queda en 12 MB libres) 
entonces en el test alojamos 5MB 10 veces usando malloc y free y los resultados son que si libera memoria , aunque siempre
dice que queda 7MB siempre .. mirad pantallazos




+ si el DC se pone rebelde ahora se arreglo la funcion de bennu...  exec("externo.bin") donde
puedes ejecutar un programa externo, (para resolver mas los limites de memoria) para juegos grandes...

+ y las mejoras citadas al comienzo

folken

Excelente trabajo L1nk,  ;D esas mejoras permitirán portar más juego en la DC, eres todo un maestro de Bennu y C avanzado, te ofresco mi respeto y admiración.

Saludos !  :D
Where reality ends, life begins!