Tutorial para programar en Dreamcast con la versión de BennuGD de Indiket

Tutorial para programar en Dreamcast con la versión de BennuGD de Indiket
Artículo
Mensaje Re: Tutorial BennuGD de Indiket para Dreamcast 
 
Le pongo este pequeño sample para el amigo Keidash aquí.

Me preguntaba como usar el mod_file en Dreamcast.

http://wiki.bennugd.org/index.php?title=Mod_file

Un pequeño ejemplo funcional de cómo lo hago para sacar datos de un archivo texto::

import "mod_file"
import "mod_say"
import "mod_video"
import "mod_text"
import "mod_ttf"
import "mod_map"



Process Main()
Private
    int handle;   // handle for the loaded file
    string first_line; // here's where the first line of the file will go
    int fuente;    // Variable contenedora, creo
    
Begin

set_mode(640,480,16);


set_text_color(rgb(255,255,255));

    // Open the file "file.txt"
    if (os_id == 5); // si es Dreamcast
     handle=fopen("/cd/file.txt",O_READ);
    else // de lo contrario cambia la ruta
     handle=fopen("file.txt",O_READ);
     end
    
    

    if (handle == 0)
        say( "Could not open file" );
        return;
    end

    // Read the first line form the file
    first_line = fgets(handle);

    // Output the read line
    say( "Read from file:" );
    say('"' + first_line + '"'); // Lo printea mal, no saca ñ y demas tema... :

    write(0,20,30,0, "Esto es lo que saca del txt:");
    write(0,21,42,0,'' + first_line + '    ');
    
    
    
    
    // Close the file (important!)
    fclose(handle);

    loop
    frame;
    end
    
End


Solo hay una cosa, el archivo de texto tiene que tener una codificación específica que es con la que trabaja internamente BennuGD para poder mostrar acentos y demás, luego la especifico que ahora no recuerdo.

Lo pongo aquí por si le sirve a alguien más...



 
 Ryo Suzuki [ 24 Abril 2018, 05:54 PM ]


Tutorial para programar en Dreamcast con la versión de BennuGD de Indiket
Comentarios
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
Más tutoriales para quién le interese!

 bennugd_dreamcast_sound

Estoy publicando una serie de tutoriales basados en mi aprendizaje de BennuGD para Dreamcast. Entre las curiosidades técnicas que me he encontrado y la falta de documentación para Dreamcast, me he decantado por hacer una serie de mini tutoriales que creo que pueden ayudar a alguien. De momento, he publicado los siguientes:

· TUTORIAL DEL APARTADO SONORO EN BENNUGD PARA DREAMCAST

· TUTORIAL PARA LA ADMINISTRACIÓN DE RAM EN BENNUGD PARA DREAMCAST

El siguiente tutorial en el que estoy trabajando es el de la creación de assets de 8bits para reducir la carga de la RAM en la Dreamcast.

Saludos! Espero que se a de ayuda  



 
 KeiDash [ 31 May 2018, 11:05 AM ]
Mensaje Re: Tutorial BennuGD de Indiket para Dreamcast 
 
Muy buen trabajo, tío.

Lo de la RAM, creo que tengo un pequeño truco que te contaré y si funciona bien lo introduces ;)



 
 Ryo Suzuki [ 31 May 2018, 12:08 PM ]
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
Ryo Suzuki escribió: [Ver mensaje]
Muy buen trabajo, tío.

Lo de la RAM, creo que tengo un pequeño truco que te contaré y si funciona bien lo introduces ;)


Entonces ya te voy a deber dos cañas jajaja, pero espero esa información con ansias.



 
 KeiDash [ 31 May 2018, 02:01 PM ]
Mensaje Re: Tutorial BennuGD de Indiket para Dreamcast 
 
Pues se ve que es una cosa heredada de la mala gestión de la RAM que se ve que ya tiene KOS, creo recordar que me comentó Indiket, pero yo lo que hago aunque es un poco chapuzas es reutilizar variables y recargar assets en la misma después de su correspondiente descarga y parece que me funciona mejor.

Ya me dirás si te funciona. Ya sé que parece una tontería...



 
 Ryo Suzuki [ 31 May 2018, 06:17 PM ]
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
Ryo Suzuki escribió: [Ver mensaje]
Pues se ve que es una cosa heredada de la mala gestión de la RAM que se ve que ya tiene KOS, creo recordar que me comentó Indiket, pero yo lo que hago aunque es un poco chapuzas es reutilizar variables y recargar assets en la misma después de su correspondiente descarga y parece que me funciona mejor.

Ya me dirás si te funciona. Ya sé que parece una tontería...


Gracias por tu contesta amigo Ryo.

Esa solución que comentas es una "posible solución" y nótese las comillas, que explico en el tuto que tengo publicado. Realmente no es una solución. Lamentablemente eso que comentas no funciona, me explico.

Realmente cuando cargas un FPG, el valor devuelto que almacenas en la misma variable como tu comentas, es solo el identificador del FPG cargado en memoria, no es el fpg en si mismo. En este caso, los dos FPG se quedan en memoria y no se pueden borrar o el indicador de memoria ram libre no funciona, te pongo un ejemplo real:

Código: [Descargar] [Ocultar]
  1. Process Main() 
  2. Private 
  3.     int fpgid = 0; 
  4. End 
  5. Begin 
  6.  
  7.     define_region(1, 0, 0, 640, 480); 
  8.     set_mode(640,480, MODE_8BITS); 
  9.  
  10.     fpgid = set_FPG("/cd/files/graphs/screen3.fpg"); 
  11.      
  12.     p_sMemFree = format((memory_free()MB),0); 
  13.  
  14.     write(0, 500, 60, ALIGN_TOP_RIGHT, "Free Mem:"); 
  15.     write_var(0, 580, 60, ALIGN_TOP_RIGHT, p_sMemFree); 
  16.  
  17.     write(0, 640/2, 480/2, ALIGN_CENTER, "PRESS SPACE"); 
  18.      
  19.     Repeat 
  20.         frame; 
  21.     Until(key(_space)) 
  22.      
  23.     UNLOAD_FPG(fpgid); 
  24.      
  25.     CLEAR_SCREEN(); 
  26.     DELETE_TEXT(ALL_TEXT); 
  27.      
  28.     fpgid = set_FPG("/cd/files/graphs/screen4.fpg"); 
  29.      
  30.     p_sMemFree = format((memory_free()MB),0); 
  31.          
  32.     write(0, 500, 60, ALIGN_TOP_RIGHT, "Free Mem:"); 
  33.     write_var(0, 580, 60, ALIGN_TOP_RIGHT, p_sMemFree); 
  34.  
  35.     write(0, 640/2, 480/2 - 10, ALIGN_CENTER, "CARGA FINALIZADA"); 
  36.     write(0, 640/2, 480/2, ALIGN_CENTER, "PRESS SPACE"); 
  37.      
  38.     Repeat 
  39.         frame; 
  40.     Until(key(_space)) 
  41.      
  42. End 
  43.  


Si te fijas, hago lo que tu comentas, reasigno el valor devuelto por load_fpg() a la misma variable, pero los dos siguen en memoria ¿Cómo se que siguen en memoria? Pues fácil, comprobando la memoria libre en cada caso, antes y depués de cargar y descargar. Este mismo ejemplo exportado a el emulador, muestra como la memoria RAM a pesar de hacer un UNLOAD_FPG() sigue teniendo la misma RAM ocupada.


 image_001_1527837263_192211
 image_002_1527837275_345746


Esto indica que:

1. O el UNLOAD_FPG() no funciona, por lo que más me decanto ya que el juego me da cuelgues de out of memory cuando tengo varias cosas cargadas y hago UNLOADS de los mismos y vuelvo a cargar más.

2. Que el muestreo de la memoria RAM libre tampoco funciona, cosa que no se que pensar, ya que con el punto 1 que indico es muy evidente que la RAM se satura.

Si te fijas en las imágenes, la RAM es la misma tanto al cargar como al descargar los elementos de la RAM, por eso me decanto más por el primer punto.

No se si se me está pasando algo la verdad ¿Tú qué opinas?



 
 KeiDash [ 01 Junio 2018, 09:47 AM ]
Mensaje Re: Tutorial BennuGD de Indiket para Dreamcast 
 
Bien comprobado.

Prueba con load_png.


P.D: También te digo una que una cosa es lo que pone y otra cosa es lo que sucede en realidad...



 
 Ryo Suzuki [ 01 Junio 2018, 06:49 PM ]
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
EDITO: acabo de arreglarlo, tenia una linea de codigo a medio escribir y se solucionaba si la quitaba. Aunque sigo sin saber como usar el configurador del mando--
EDITO 2: Me vuelve a dar el mismo error da igual donde use lo de os_id, el segundo proceso me da error. SI lo quito, sin embargo, me compila. Y si vuelvo a otra version anterior del prg donde lo tenia funcionando, funciona tambien

Pues estooo... perdon si molesto a alguien, pero el bennu no me deja compilar una cosa. Los problemas empezaron cuando intente hacer funciones especificas para dreamcast (usando if (os_id)), pero no entiendo que relacion pueda tener con el problema

Adjunto imagenes:

18n_zh_8

Me da este error, que en la linea 55 hay un proceso no definido, excepto que...

dq_9vyic

d_ic1ylf

Si alguien pudiese echar un cable lo agradeceria (y si me explica tambien como usar el configurador del mando de keidash pues...)



 
 Keewan [ 02 Junio 2018, 03:38 PM ]
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
Ryo Suzuki escribió: [Ver mensaje]
Bien comprobado.

Prueba con load_png.


P.D: También te digo una que una cosa es lo que pone y otra cosa es lo que sucede en realidad...


LOAD_PNG() es la misma pesca, pero con diferente caña. Obtienes el ID identificador, pero nunca acceso al recurso en memoria del mismo. En versiónes anteriores de BennuGD se podía obtener el puntero en memoria como segundo parámetro, y esto permitiría luego trabajar con esa sección en memoria, pero en versiones más recientes lo eliminaron. Ni idea de porqué.

A parte de que LOAD_PNG() no tiene el método de descarga del mismo, es decir, no existe un UNLOAD_PNG().



 
 KeiDash [ 02 Junio 2018, 05:07 PM ]
Mensaje Re: Tutorial BennuGD De Indiket Para Dreamcast 
 
Una pregunta: ¿como consigo que no se me vea todo en negro cuando uso el emulador para probar mi código? En pc me va, pero cuando lo ejecuto en dreamcast solo consigo música cdda en loop.

Puedo adjuntar código y assets si es necesario... Los gráficos están todos en un mismo archivo FPG de 16 bits, y la profundidad de color de la pantalla también es 16 bits.

Perdón si molesto-



 
 Keewan [ 02 Junio 2018, 09:50 PM ]
Mostrar mensajes anteriores:    
Ocultar¿Este tema fue útil?
Compartir este tema
Correo a un amigo Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net
Página 5 de 7
Ir a la página Anterior  1, 2, 3, 4, 5, 6, 7  Siguiente