https://www.segasaturno.com/portal/viewtopic.php?f=19&t=8570&p=93748#p93748 ----------------------------------- Ryo Suzuki 07 Febrero 2016, 09:30 PM Tutorial para programar en Dreamcast con la versión de BennuGD de Indiket ----------------------------------- [UPDATE Diciembre 2021] Para demostrar que se pueden hacer hasta juegos comerciales, nada mejor que mi juego de Dreamcast: [url=https://encuentronocasual.blogspot.com][b]https://www.dreamcastencounter.com[/b] Si yo he podido hacerlo... ¡Tú también! [align=center][url=https://www.dreamcastencounter.com][img src="https://www.segasaturno.com/portal/files/images/2/encuentro_no_casual_official_site_dreamcast.jpg" width=540 /][/align] -- Esto ha pasado un poco desapercibido creo, pero me parece que tiene bastante importancia. El bueno de [b]Indiket[/b] ha hecho un port hace unos meses de este lenguaje de programación para que pueda funcionar en la 128 bits de SEGA. [align=center][img]https://www.segasaturno.com/portal/files/images/2/bennu_dreamcast.jpg[/img][/align] Empecemos por el principio, [b]Bennu GD[/b] es un lenguaje de programación sencillo pero potente bajo licencia GNU encarado a hacer videojuegos. Tal vez os suene [b]Fénix[/b], o incluso el original [b]DIV Games Studio[/b], pues este [b]Bennu Game Development [/b]podríamos decir que es el sucesor de de estos dos, hasta el punto que es capaz de correr código de los anteriores con unas mínimas modificaciones, si no me equivoco. Bennu puede ejecutarse en múltiples plataformas y se centra en la modularidad y portabilidad y es quizás ideal para principiantes que quieran comenzar a hacer sus pinitos, aunque es bastante versátil en teoría y permitirá a los versados en la materia de la programación crear juegos más que decentes (de hecho hay juegos comerciales programados con él). Bennu oficialmente es para Windows, Linux, GP2X Wiz, GP2X Caanoo y Dingux. Aunque seguramente os suena o habéis visto ports no oficiales a otras plataformas como PlayStation 2, Wii, Xbox, GP2X o (precisamente) la [b]Dreamcast[/b], por citar algunas. [align=center][url=https://www.explosivedinosaurs.com/web/][img src="https://www.segasaturno.com/portal/files/images/2/explosivedinosaurs1_1024x576.jpg" alt="explosive dinosaurs juego comercial bennu gd " width=500 /] [size=9]Uno de los juegos comerciales hechos con Bennu[/size][/align] Y ahí es donde quería yo llegar. La consola de la espiral, que ya contaba con un port de Bennu que apareció hace unos años de la mano de los [b]Colombian Developers[/b]. No estaba nada mal y era un gran esfuerzo dando otra posibilidad de desarrollo en la DC, pero tal vez necesitaba algunas mejoras... Y así, en agosto de este año pasado el colega [b]Indiket[/b], uno de los más importantes miembros de la scene de la Dreamcast en los últimos años diría yo, ha creado su propia versión basada en la de los Colombians. Lo que ha hecho con su particular port es que lo compila sobre la librería [b]SDL[/b] para la blanquita de Chui, os sea que le añade otra capa de lenguaje encima. El resultado es que funciona bastante mejor amén de incorporar varias novedades que pueden ser imprescindibles y que no tenía la anterior versión de los [b]Coldev[/b] (reproducir ogg, fuentes ttf, más velocidad, etc...). Bueno, una vez realizada la introducción vamos al grano, que es lo que queréis. Quizás nadie en su sano juicio se atrevería a publicar un tutorial de un lenguaje de programación sin tener prácticamente ni idea... Pero no será la primera vez que lo hago como ya sabéis, ni digo que vaya a ser la última xD. Así que, allá voy. [align=center][img]https://www.segasaturno.com/portal/files/images/2/sorr_inicio.png[/img] [size=9]Sí, SOR Remake fue programado con este lenguaje. Una lástima lo que hizo SEGA...[/size][/align] [b] TUTORIAL BENNU EN DREAMCAST[/b] Siendo justos diré que toqué [b]DIV Games Studio[/b] cuando salió hace años. ¿Alguno recordáis la revista oficial con CDROM que salía en los kioskos? Nunca conseguí hacer nada del otro jueves, pero por lo menos trasteé un poco con la programación con la que creo que no tonteaba desde los tiempos del vetusto BASIC de los microordenadores. Así que podríamos decir que no he empezado desde cero totalmente con Bennu, algunas cosas me sonaban y algunos os sentiréis identificados si digo que sin tener casi ni idea de programación he logrado ya hacer algunas cosillas en el tiempo que llevo cacharreando. Bennu tiene su compilador y su intérprete. Es decir, y para hacerlo fácil, nosotros vamos a trabajar con documentos de texto normales y corrientes, escribiremos nuestro código en este lenguaje y un programa se encargará de compilarlo y luego otro de interpretarlo para ejecutar el juego o lo que sea que logremos hacer. Tal vez lo estás adivinando ya, nosotros trabajaremos con el Bennu para PC (ya sea para Windows o Linux) y luego básicamente el programa compilado seremos capaz de correrlo también en la Dreamcast gracias al port de Indi. Esa es básicamente la idea. Nosotros podremos hacer la pruebas que queramos y testear ejemplos, intentar hacer cosas propias y demás en el Bennu de nuestro ordenador. Es cómodo y sencillo, programar, compilar y ejecutar para verificar el resultado y luego ya nos podemos encargar de ver cómo funciona ese mismo programa de Bennu en la consola Dreamcast, ya sea por medio del emulador de la misma o incluso en hardware real. Así que vamos a empezar, vamos al grano. Tal vez nos descargaríamos Bennu para Windows o Linux en su [url=https://www.bennugd.org/]página oficial. Esto sería a grandes rasgos el compilador y el intérprete para que lo corramos por medio de linea de comandos desde nuestro sistema operativo. Sin embargo, como intuyo que sois novatos como yo si estáis leyendo esto, vamos a hacer uso de algo que nos facilite un poco las cosas, algo así como un [b]SDK[/b] o [b]IDE[/b] para Bennu. Como un integrated development environment (de ahí IDE) o entorno de desarrollo integrado que tiene todas las herramientas necesarias desde un instalador para allanarnos un poco el camino y hacer menos tedioso todo el proceso de compilar y ejecutar nuestros primeros programas. Lo más cercano que hay en Bennu a eso que yo sepa son los [b]Bennu Packs [/b]en este caso para Windows (te funcionará también en Linux con el Wine, si lo prefieres) de los amigos que portaron por primera vez Bennu a la DC, los grandes [url=https://bennupack.blogspot.com.es/]ColombiansDEV. Ahí veréis que la última versión del pack es la 2.6 que promete cosas interesantes como: [quote]Bennupack include more 150 games with source code, docs, tutorials, and tools for Game Development. Bennu official web site: https://www.bennugd.org/[/quote] Fantástico, justo lo que necesitamos. Sin embargo yo os recomiendo que bajéis [url=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/colombiandevelopers/Tools%20R2.2%20Installer.rar]ésta (la 2.2.) algo más antigua pero que nos va a funcionar bien. A mi la última versión me hace cosas raras como que no se me ven las imágenes y alguna historia más cuando luego paso a Dreamcast :S Instalamos este pack, el 2.2, que nos va a hacer las veces de IDE o SDK, en nuestro Windows. Yo lo he instalado para este tutorial en concreto en [b]Windows 7 versión 64 bits[/b], pero creo que no hay ningún problema si lo instalaseis en XP (en este caso lo he probado), 8 o incluso 10 en versiones 32 o 64 bits a no ser que alguno me digáis lo contrario. Este pack también se puede instalar al menos en Ubuntu Linux y derivadas a través de Wine y he comprobado que funciona bien (por ejemplo en el popular Lubuntu). [img]https://www.segasaturno.com/portal/files/images/2/bennu_pack.jpg[/img] A la hora de realizar la instalación es recomendable que no le cambies la ruta que os propone, en este caso [b]c:\devBennu[/b]. Más que nada porque muchos scripts de compilado y demás creo que apuntan a esa ruta y en algunas más largas o con subdirectorios podrían dar problemas, así que más vale prevenir que curar y dejarlo en la carpeta por defecto en el disco duro que os detecte como raíz. Una vez acabada la instalación podréis comprobar que tenemos una carpeta en nuestro menú de Inicio llamada [b]Bennu Pack[/b] con todo lo que vamos a necesitar para programar con este lenguaje en PC. La madre del cordero y lo que más nos interesa ahora al principio es el [b]PRG Editor[/b] (que no es otra cosa que el [b]Notepad ++[/b] con las rutas y shortcuts para que compile y ejecute lo que hagamos en Bennu) Cuando lo abramos por primera vez es posible que nos aparezca el plugin manager de este programa sugiriendo que actualicemos. No es necesario, mejor lo cancelamos. El caso es que ya lo tenemos todo listo. Ha sido tan fácil como instalar este [b]Bennu Pack[/b] y abrir este [b]PRG Editor[/b] y vamos a comenzar con un pequeño programa para abrir el fuego. Seleccionamos [b]File--->New[/b] en el PRG Edtior y nos disponemos a crear nuestro primer y sencillo ejemplo, que será algo así: [code linenumbers=false]import "mod_video" import "mod_text" process Main() begin set_mode(320,240,16); write(0,40,69,0,"Hola PC desde Bennu Game Development!"); write(0,40,100,0,":-)"); write(0,30,200,0,"By Ryo -Alfons- de wwww.segasaturno.com"); loop frame; end end [/code] Copiamos este código de aquí, lo pegamos en el archivo nuevo que acabamos de crear en el PRG Editor y ya está hecho, vamos a guardar. Guardamos como o [b]Save as[/b] y le decimos que lo guarde en el Escritorio por ejemplo. Mejor aún, creamos una carpeta que se llame [b]Bennu Dreamcast [/b]en el escritorio y a este archivo con nuestro primer código que acabamos de pegar le llamamos [b]main.prg[/b] y lo guardamos en esa nueva carpeta para tenerlo todo centralizado, en /Bennu Dreamcast. Casi todos los programas principales en Bennu se les suele llamar así (main), también la extensión [b]prg[/b] es de Bennu pero es realmente un archivo de texto (o .txt en Windows) que podemos abrir con cualquier editor de ídem aunque es más cómodo hacerlo con este[b] Notepad ++[/b] (rebautizado aquí como[b] PRG Editor[/b]). Fijaos como se ve el código de nuestro [b]main.prg [/b]con este programa que hemos instalado con el Bennu Pack: [img]https://www.segasaturno.com/portal/files/images/2/hola_mundo_hello_world_benn.jpg[/img] Mucho más organizado y visualmente más fácil de reconocer todo ya que colorea según que cosas para que lo identifiquemos todo mejor (es lo que hacen casi todos los editores orientados a la programación). Pero vamos a lo realmente interesante. Ya hemos creado y guardado nuestro primer código con el típico "Hello World" para romper el hielo en un lenguaje de programación y ahora lo que vamos a hacer es compilarlo y ejecutarlo. Para ello algo tan fácil como ir a la opción [b]Run Videogame[/b] en el Notepad ++ que tenemos abierto o apretar directamente [b]F6[/b]. Esto es lo que veremos: [img]https://www.segasaturno.com/portal/files/images/2/bennugd_dreamcast.jpg[/img] Ya tenemos nuestro primer programa funcionando. Lo que realmente ha pasado es que el [b]Notepad ++ [/b]ha llamado al compilador y ha compilado nuestro modesto código. Luego también ha llamado al intérprete que se ha encargado de ejecutar nuestro código ya compilado y por eso lo tenemos corriendo en pantalla. Esto es la sencillez y comodidad que nos brinda usar un IDE como el [b]Bennu Pack[/b], porque si no tendríamos que haber hecho estas operaciones a mano desde la línea de comandos o haber creado un batch file o algo por el estilo, sin embargo de esta forma nos facilita la tarea, ¿no creéis? Si os fijáis en el escritorio, en la carpeta [b]Bennu Dreamcast [/b] que creamos ha aparecido lo que podría ser un misterioso archivo llamado [b]main.dcb[/b] que, sí habéis acertado de nuevo, es nuestro [b]main.prg[/b] compilado y el que acabamos de ver ejecutarse en pantalla. [b]PERO, ¿QUÉ PASA CON DREAMCAST?[/b] Sí, esto se me está haciendo un poco largo por más que intento ir al meollo del asunto. Luego os comento el código si es necesario que aunque no tiene mucho misterio es bueno tener las cosas claras cuando estamos empezando. Vale, ya tenemos nuestro primer programa pintando un mensaje en pantalla funcionando en el Bennu de PC, pero lo que realmente queríamos quizás es correrlo en la [b]Dreamcast [/b]y tratar de empezar a programar cosas para esta consola (o incluso tratar de portar juegos de Bennu que hay en PC o en otras plataformas). Así que vamos a descargar el port del gran [b]Indiket[/b]. [url=https://www.dreamcast.es/news.php?readmore=745]Aquí tenéis el enlace de cuando lo hizo público en la web hermana [b]Dreamcast.es[/b], pero os pido que no os detengáis ahora leyendo demasiado este interesante link y bajadlo [url=https://www.segasaturno.com/portal/bennugd-port-para-dreamcast-df131.html]aquí directamente. Se trata de la revision [b]090715[/b] y cuando desccomprimáis el archivo veréis bastantes cosas que os pueden parecer un auténtico galimatías :P . Id a la carpeta [b]BennuGD-KOS2 [/b]y copiad el archivo que nos interesa que no es otro que el [b]1ST_READ.bin[/b] a la carpeta de vuestro escritorio [b]Bennu Dreamcast [/b], donde tenemos nuestros recientes y modestos [b]main.prg[/b] original y el [b]main.dcb[/b] recién compilado. Seguro que te has vuelto a adelantar a la jugada y has intuido que el [b]1ST_READ.bin[/b] de Indi es el intérprete de Dreamcast de Bennu. En la consola del espiral no debemos compilar, simplemente debemos ejecutar con el intérprete de la 128 bits de SEGA el [b]main.dcb [/b]que acabamos de parir. Para ello, lo único que tenemos que hacer es crear un CD autoboot que entienda y ejecute nuestra blanquita con el [b]1ST_READ.bin[/b], que es el binario-interprete de Bennu que nos ejecutará nuestro [b]main.dcb[/b] en la malograda consola de SEGA. Pero, permitidme que modifique un poco nuestro humilde código ahora que lo vamos a correr en una de nuestras consolas preferidas. Vamos a añadirle un condicional con estas líneas: [code linenumbers=false] if (os_id == 5) write(0,40,69,0,"Hola DC desde Bennu Game Development!"); else write(0,40,69,0,"Hola PC desde Bennu Game Development!"); end[/code] Como verás, lo que estamos metiéndole es un IF para que escriba una cosa u otra dependiendo si se va a ejecutar en PC o en la última consola de SEGA. Nuestro código completo, por lo tanto, quedará así: [code linenumbers=false]import "mod_video" import "mod_text" process Main() begin set_mode(320,240,16); if (os_id == 5) write(0,40,69,0,"Hola DC desde Bennu Game Development!"); else write(0,40,69,0,"Hola PC desde Bennu Game Development!"); end write(0,40,100,0,":-)"); write(0,30,200,0,"By Ryo -Alfons- de wwww.segasaturno.com"); loop frame; end end [/code] Guardamos los cambios y volvemos a compilar y ejecutar con [b]F6 [/b]o con [b]Run Videogame[/b]. Aparentemente no habrá habido cambios ya que en PC lo vamos a ver igual que estaba al ejecutarse tal y como le hemos programado que haga, aunque nuestro main.dcb ha sido de nuevo compilado y actualizado con el condicional que le hemos puesto para que en nuestra DC muestre la otra frase que hemos añadido cuando la detecte. [b]CREANDO EL AUTOBOOT PARA DREAMCAST[/b] Ha llegado el momento de crear nuestro CD para probar nuestro primer programa de Bennu, pero en esta ocasión en la propia Dreamcast. Ya tenemos los archivos necesarios en nuestra carpeta [b]Bennu Dreamcast[/b] (1ST_READ.bin y main.dcb. O dicho de otro modo, el binario-ejecutable y nuestro código ya compilado) por lo que vamos a recurrir a [b]BootDreams[/b] para generar una imagen de CDRom que pueda correr la consola. ¿Dónde puedo bajar el BootDreams? Pues en la web que tiene más descargas de Dreamcast que no es otra que [b]Dreamcast.es[/b], la versión[b] 1.0.6c [/b]la tenéis disponible en [url=https://www.dreamcast.es/infusions/downloads/downloads.php?cat_id=4&download_id=16]este enlace. Lo instalamos y lo ejecutamos. Ahora lo configuramos de la siguiente forma: pulsamos en el botón del viejo y entrañable [b]Discjuggler[/b] para que nos cree una imagen con este formato, en [b]Selfboot Folder [/b]navegamos a nuestro directorio [b]Bennu Dreamcast[/b] del escritorio donde tenemos nuestros archivos listos, [b]CD Label[/b] dejadlo por defecto -yo como soy muy pesao pongo SSATURNO- y en [b]Disc Format[/b] voy a poner [b]Data/Data [/b]por si acaso ya que hay algunas consolas muy concretas que solo leen este tipo de autoarranque. [img]https://www.segasaturno.com/portal/files/images/2/bootdreams_dreamcast_1454868003_418707.jpg[/img] Nos pregunta si estamos seguros que vamos a crear una imagen autoboot de formato .cdi de Discjuggler, le decimos que sí. Luego nos saldrá otro mensaje que acojona en principio que nos dice el binario está [b]unscrambled [/b]que si queremos scramblearlo, le decimos también que sí. Para más pegas nos recuerda que nos falta una [b]IP.BIN[/b], que se nos ha olvidado, y te da la opción de crear una. Le decimos, por supuesto, que sí también (estos dos últimos pasos ya no tendremos que hacerlos las siguientes veces que trabajemos en ese mismo directorio). Correcto, ahora ya el [b]Bootdreams[/b] nos pide que donde guardamos el archivo [b].cdi[/b] de Discjuggler que va a crear con nuestro código de Bennu ejecutable en Dreamcast. Yo lo he dejado por defecto que pone el mismo nombre el CD Label, por lo tanto me ha quedado [b]SSATURNO.cdi[/b] y lo he guardado en el escritorio para tenerlo a mano. Fantástico, BootDreams nos avisa que ha finalizado y ha creado correctamente la imagen de CD autoarrancable. Ya podemos al fin probarla en nuestro emulador preferido. Yo voy a hacer uso del [b]Null DC[/b], la última versión oficial 104_r136, en concreto. Lo tendréis ya, pero podéis bajarlo [url=https://code.google.com/archive/p/nulldc/downloads]aquí si lo estimáis oportuno. Necesitáis la BIOS de la DC y demás, pero eso no voy a explicarlo aquí ya que estoy seguro que todos habéis corrido alguna vez este u otros emus de la Dreamcast. Abrimos el NullDC, vamos a [b]File->Normal Boot[/b] y seleccionamos la imagen que acabamos de crear: SSATURNO.cdi El emulador arranca y aquí tenemos el resultado pertinente: [align=center][img src="https://www.segasaturno.com/portal/files/images/2/dreamcast_bennu_nulldc.jpg" alt="bennu bennu gd sega dreamcast port programacion hello world sample ejemplo iniciacion lenguaje" width=658 /][/align] Como comprobaréis ha funcionado además el condicional que le hemos metido ya que ahora pone DC en lugar de PC al haber detectado que corre sobre ese hardware ahora. Podéis probarlo en hardware real, ya que os aseguro que en la propia Dreamcast funcionará también. Si queréis gastar un CD para tan magna obra, adelante :P Fuera de coñas, quien tenga disco duro, adaptador de SD o lo que sea puede certificar si lo desea que funcione bien en la propia máquina. Aunque los emuladores suelen ser bastante fiables a día de hoy, no está de más ir probando en la consola si vamos a hacer cosas más elaboradas para evitarnos luego sorpresas desagradables. Yo personalmente uso el BBA para lanzar a la Dreamcast y probarlo en hard real, más adelante si me animo os explicaré cómo se hace. [b]¿Y AHORA QUÉ HAGO?[/b] Pues es el momento de empezar a investigar sobre el propio lenguaje Bennu y comenzar a estudiar ejemplos, comandos, procesos y demás para ver cómo funciona todo y animarse a hacer nuestros pequeños proyectos. Ahora ya sabemos que en principio lo que corramos en el PC con Bennu podemos ejecutarlo también luego en Dreamcast. Eso sí, ya os imaginaréis que en la DC no va a funcionar como en un PC pasado de vueltas de última generación que tengáis hoy en día en casa. La Dreamcast no podéis ponerla a resoluciones muy altas para que todo vaya fino, ni podéis hacer mucho uso de RAM y demás historias, ya que recordad que se trata de un hardware del 98. Además como dije al principio este Bennu está corriendo sobre SDL, así que algo de rendimiento también tiene que perder, por no decir que el port puede tener todavía algunos pequeños bugs o cosas concretas sin implementar (eso a Indiket :twisted: ) Sin embargo, creo que se pueden hacer juegos 2D de bastante calidad y dignos que corran en la 128 bits de SEGA sin demasiados problemas. Aunque no soy el más indicado para corroborarlo sospecho que es así, por el tiempo que llevo tocándolo y las pruebas que he hecho en la propia consola. En resumen. [b]BennuGD [/b]para [b]Dreamcast[/b], con este port de [b]Indiket[/b] en concreto, es con casi toda seguridad la forma más sencilla de programar en Dreamcast para las personas que no tienen mucha idea y se están iniciando en este mundillo. Además se pueden conseguir resultados bastante buenos con tiempo y dedicación. Para continuar investigando, podéis visitar la [url=https://www.bennugd.org/]web oficial de [b]Bennu[/b] y su [url=https://wiki.bennugd.org/index.php?title=Bennu_Wiki][b]documentación[/b]. De la misma forma podéis echar un ojo a alguno de los [url=https://www.bennugd.org/downloads/ManualBennuGD_Osk.pdf]tutoriales que hay en la web y/o probar y estudiar los ejemplos que [url=https://code.google.com/archive/p/colombiandevelopers/downloads]encontraréis sin demasiada dificultad. Si os gusta el tema quizás pueda continuar haciendo tutoriales para profundizar un poco más. Cosas como manejo de sprites y scrolls, reproducción de música, etc. Un saludo a todos y recordad... Dreamcast nunca muere!! [i]-Ryo "Alfonso" Suzuki[/i] P.D. Update: Una versión para Dreamcast algo más actualizada (diciembre de 2017) que colgué en el hilo: [url=https://www.segasaturno.com/Minerva-238/archivos/BennuGD_Dreamcast_Indiket-dic2017.7z]Descarga