https://www.segasaturno.com/portal/viewtopic.php?f=33&t=7676&p=78025#p78025 ----------------------------------- Ryo Suzuki 09 May 2014, 11:50 PM Trasteando con el Lua Player de Saturn (Tutorial) ----------------------------------- He estado echándole un ojo a este entorno de desarrollo de la Saturn que sacó [b]Rockin'-B[/b] hace más de cinco años y que desafortunadamente creo que no ha tenido mucha repercusión. [align=center][img src="http://www.segasaturno.com/portal/files/images/2/lua_sega_saturn_dev.jpg" alt="sega saturn lua dev homebrew" width=628 /][/align] El desarrollo homebrew por parte de aficionados para la Sega Saturn prácticamente no existe, a diferencia de otras consolas clásicas que sí que tienen más proyectos y una comunidad sensiblemente activa en este campo. A parte del SDK oficial de SEGA, solo existía el [b]Saturn Orbit[/b], que es una especie de adaptación de Rockin'-B (omnipresente siempre en estos temas para la Saturn) y que ha comentado en varios [url=http://www.segasaturno.com/portal/viewtopic.php?f=4&t=3932]tutoriales nuestro amigo y compañero del foro,[b] FacundoARG[/b]. NOTA Edición: Ahora que recuerdo también existe el [b]Game Basic [/b]que era comercial, todavía no lo he investigado. NOTA Edición 2: Tambien está disponible el [b]libyaul[/b] que es totalmente open source. Saturn Orbit si no me equivoco, y disculpadme si meto la pata porque en estos temas no sé prácticamente nada, es una especie de adaptación para trabajar con lenguaje C y las librerías de SEGA con compilador gcc optimizado para los procesadores de la Saturn. Un IDE (Integrated development enviroment) que tiene especificadas las librerías para compilar para la 32 bits de SEGA. Sin embargo, este [b]Saturn Lua Player [/b]tiene la capacidad de correr aplicaciones programadas en el lenguaje de programación Lua. Esas aplicaciones pueden tener acceso a cientos de funciones API y librerías que pueden ser necesarias como SGL (SEGA Graphics Library), PCM, GFS y STM. Digamos que Lua Player para la Saturn es un intérprete del lenguaje de programación Lua, que hace buen uso de las librerías oficiales de SEGA para la Saturn. Es muy sencillo a la hora de ponerte a probar, ya que no necesita ningún tipo de configuración o setup, y solo te hace falta un editor de textos como el notepad y un emulador para empezar a programar en la Saturn. [b]¿Qué es Lua? El lenguaje del que parte este player portado a Saturn[/b] Lua es un lenguaje de programación, basado en C y en Perl, imperativo, estructurado y bastante ligero que fue diseñado como un lenguaje interpretado con una semántica extendible. El nombre significa "luna" en portugués. Más info en Wikipedia (que es de donde lo he copiado): http://es.wikipedia.org/wiki/Lua Teóricamente Lua es más accesible y sencillo que otros lenguajes de programación, así que debería resultar más fácil para los principiantes hacer sus pinitos con el Lua Player que con el Saturn Orbit... O sea que, vamos al grano. Voy a poneros un pequeño tutorial con un ejemplo por si queréis empezar a trastear con el Lua Player para Saturn. [b]NOTA: No tengo ni idea de programación. Solo hice cuatro chorradas en los tiempos de los 8 bits con el BASIC y poca cosa más. Quiero decir que teneis que coger todo esto con pinzas :mrgreen: [/b] [b]Descargar Lua Player de Saturn[/b] Como comentaba antes este entorno no tiene ningún tipo de configuración o problemas para instalarlo y demás. Es cuestión de bajarlo y empezar a picar código o liarse a probar con los ejemplos que vienen incluidos. Por lo tanto, lo primero que tenemos que hacer es descargarlo y rápidamente estaremos ya funcionando. Podéis bajarlo en esa maravillosa página llamada SEGASaturno ( :P ) siguiendo [url=http://www.segasaturno.com/portal/saturn-lua-player-para-sega-saturn-df115.html]este enlace, o en la [url=http://policeofficersmith.de/cgi-bin/weblog_basic/index.php?p=50]web donde originalmente el gran Rockin'-B lo hizo público. Bien, ya teneis el archivo comprido [b]SaturnLuaPlayer_080701_R1[/b]. Lo descomprimis y vereis que os crea una carpeta llamada [b]SaturnLuaPlayer[/b]. Ya podemos comenzar. [b]Primeros pasos[/b] Si os fijais, teneis varias carpetas con diferentes contenidos (documentación, tools, librerías y demás historias), lo que nos interesa ahora para comenzar es la carpeta [b]samples[/b], donde están evidentemente los ejemplos. Veremos diferentes carpetas con ejemplos que son proyectos que podemos probar y ver el código para copiar/trastear/modificar cosas, e incluso tratar de averiguar cómo funcionan. Tenemos la carpeta CHROME, DESIGN3, TORUS3, etc... Bien, podéis probarlos todos en emulador si os apetece para ver como lucen estos ejemplos hechos con el Lua Player y fliparnos un poco de paso con lo que podríamos llegar a hacer. Para ello ejecutamos [b]makeiso_all.bat[/b] que vemos en la carpeta samples y se compilan todas las isos de cada carpeta de ejemplos para que las podemos testear. [b]Usando emulador y unidad virtual para testear lo que programemos[/b] Podríamos quemar cada iso en un CDROM y probarlo directamente en la Sega Saturn, pero está claro que lo mejor de momento es que usemos un emulador para catar los ejemplos y las cosas que podamos programar nosotros. Una opción sería utilizar el [b]Yabause[/b], que directamente puede cargar isos y que podéis descargar en su página oficial: http://yabause.org Pero yo prefiero usar el [b]SSF [/b]porque es más fiel a la máquina original. No permite usar isos directamente, así que tendremos que montar las isos en una unidad virtual. Podeis bajar el emulador SSF aqui: http://www7a.biglobe.ne.jp/~phantasy/ssf/index.html (nota la pagina oficial se ha mudado y no recuerdo ahora donde, cuando la encuentre de nuevo la pongo) Bajadlo desde [url=http://www.segasaturno.com/portal/ssf-0-12-beta-r4-df122.html]nuestra web mismo. Para el SSF, como decía, necesitais emular la iso con un CDROM virtual, algo que igual ya estáis acostumbrados a hacer para otros menesteres. Bajad el [b]DAEMON Tools Lite 4[/b], por ejemplo, si no lo tenéis, la versión Free de aquí: http://www.daemon-tools.cc/products/dtLite#features Instaladlo y ya contaréis con una o varias unidades virtuales para probar las isos que vayamos haciendo. Vale, tenemos todo lo necesario. Estamos listos. Vamos a probar los ejemplos que vienen con el Lua Player y que hemos compilado con el makeiso_all.bat que hemos ejecutado anteriormente. Abrimos el Daemon Tools y veremos la unidad virtual que nos ha creado tras la instalación. En mi caso es la letra M:, si le dais al boton derecho os aperece la opción "Montar" (también se puede arrastrar directamente la iso sobre la unidad). La seleccionamos y buscamos la iso de la carpeta samples/ CHROME para empezar. Vereis que en esa carpeta se encuentra el archivo sample.iso, lo montamos y ejecutamos el emulador. En el SSF, a parte de necesitar la bios para un mejor funcionamiento (en este caso no lo recomiendo porque para esto va bien y así nos saltamos la animación de Saturn ide inicio cada vez), lo debeis configurar con la letra del CDROM para que sea la misma que la del Daemon Tools y así trague la unidad virtual y las isos que vayamos montando. Yo como os comentaba en Option del SSF en CD drive he seleccionado la letra M, haced vosotros lo propio con vuestra letra correspondiente. Bien, reiniciamos para que quede guardada la letra del CD pertinente (el SSF tras cada cambio en configuración hay que cerrar y abrir el emulador para que lo guarde) y lo ejecutamos de nuevo. Obtenemos esto: [img]http://www.segasaturno.com/portal/files/images/2/emulador_saturn.jpg[/img] NOTA Edición: He comprobado que si el SSF lo corres sin bios de la Saturn pueden mostrar mal algunos ejemplos y por ende algunas cosas que programemos (por ejemplo los colores de las letras no se ven bien en ocasiones). Así que es bueno que useis el emulador con BIOS. Un objeto tridimensional rotando y mostrando varios valores de lo que va procesando, pintando en pantalla y demás. Muy bonito, luego veremos que el código se las trae :twisted: Podéis ir probando asi todos los ejemplos de las diferentes carpetas, tendréis el sample.iso correspondiente en cada carpeta DESIGN3, S_4_5, SBKLIB, etc. Probadlos todos si queréis, hay cosas bastante impresionantes para ser homebrew de la Saturn. [b]Al lío, primer ejemplo[/b] Bueno, ya nos hemos hecho pajas mentales de lo que se puede hacer con este Lua Player. Ahora tendrás ganas de empezar a programar por ejemplo un Virtua Fighter 3 en hi-res y con los mismos gráficos que el Shenmue de Saturn... Bromas a parte, podemos ver el código de todos esos ejemplos para hacernos una idea de cómo están hechos. El source code está en la carpeta de cada sample. Por ejemplo en el ejemplo [b]DESIGN3[/b], esta la carpeta cd y el código fuente está en el archivo [b]0_orig.lua[/b]. Vale para todos los ejemplos, siempre será así. Si lo abris con el bloc de notas os saldrá el contenido que empieza de esta guisa: [code linenumbers=false]--/*----------------------------------------------------------------------*/ --/* Design Check 3 */ --/*----------------------------------------------------------------------*/ local max_texture = 2 -- Note: GFS_Init() has already been called in the Saturn Lua Player local len = GFS_Load_name("DATA.BIN", 0, CPU_WRAM_LO, CPU_WRAM_LO_LEN)-- filename case sensitive !!!! if len == nil or len <= 0 then slPrint("Error loading data file!", 9, 3) end local object_sample = CPU_WRAM_LO + 0x000 local tex_sample = CPU_WRAM_LO + 0x220 local pic_sample = CPU_WRAM_LO + 0x210 local cam = {} cam.pos = {} cam.ang = {} cam.sca = {} cam.base = getnewuserdata(4*3*4)-- local old_pos = {} local old_scl = {}[/code] Y sigue bastante... Si no entendeis nada no os preocupéis, ya somos dos. Vamos a hacer nuestro primer ejemplo de prueba, bien sencillo para que nos familiaricemos un poco con el rollo. Nos podemos crear una carpeta nueva llamada por ejemplo [b]Samples Mios[/b] y ahí copiamos un sample original para modificarlo y hacer nuestros testeos. Copiamos, por coger uno, la carpeta del sample [b]CHROME[/b]: osea toda la carpeta CHROME la copiamos al directorio que hemos creado llamado Samples Mios. Lo mejor es que una vez copiada le cambiemos el nombre y le llamemos por ejemplo [b]TEXTO Y VARIABLE[/b], que es lo que vamos a hacer en esta primera prueba de toma de contacto. Nota de edición: Asegurate que en el directorio que crees para meter tus pruebas, en este caso Samples Mios, en la raiz copies el IP.bin que viene en la carpeta original Samples, de lo contrario no podrás generar las isos del código que crees ya que el mkisofs.exe que lo hace necesita la Ip.bin (te aparecerían isos que pesarían 0kbs) Perfecto, vamos a editar el código en nuestra carpeta TEXTO Y VARIABLE así que buscamos el archivo que tiene el código fuente para modificarlo. No es otro que [b]0_orig.lua[/b], que esta dentro del directorio cd como hemos dicho con anterioridad. Abrimos 0_orig.lua con el bloc de notas para modificarlo. Borramos todo lo que tiene y ponemos este código sencillo que me he inventado yo: [code linenumbers=false]slInitSystem(TV_720x576,NULL,1) local sega = 20 slPrint("www.segasaturno.com", 11, 3) slPrint("Esto es una primera prueba", 5, 6) slPrint("El valor de la variable es", 5, 7) slPrint(sega, 32, 7) slPrint("Saturn Lua Player", 11, 9) while true do slSynch() end [/code] ¡Listo! Este ya se entiende algo mejor, ¿verdad? Guardamos este 0_orig.lua y ya tenemos preparado para "compilar" nuestra primera iso creada por nosotros y probarla en el emulador. Si vais un directorio hacia atrás en nuestra carpeta TEXTO Y VARIABLE veréis que tenemos un ejecutable llamado [b]makeiso_for_debugging.bat[/b], que como su nombre indica se encarga de crear la iso con el código que acabamos de copiar. Lo ejecutamos e inmediatamente obtenemos nuestra iso con el archivo que se generará y que veremos que se llama [b]sample.iso[/b]. El mismo proceso nos va a tocar hacer. La montamos en la unidad virtual del Daemon Tools, ejecutamos el SSF y obtenemos nuestro primer programa ejecutándose: [img]http://www.segasaturno.com/portal/files/images/2/sega_saturn_dev_homebrew.jpg[/img] No es tan impresionante como los ejemplos que hemos visto antes y que venían con el Lua Player, pero lo hemos hecho nosotros y el código es corto y medio entendible a simple vista para newbies. Repasemos el código de nuevo, esta vez con anotaciones digamos "para tontos", para que se comprenda mejor qué estamos haciendo con cada comando: [code linenumbers=false]slInitSystem(TV_720x576,NULL,1) -- pone el modo de video local sega = 20 -- define la variable local sega y le asigna un valor de 20 slPrint("www.segasaturno.com", 11, 3) -- escribe en pantalla este mensaje en la linea 3 y tras 11 espacios slPrint("Esto es una primera prueba", 5, 6) -- escribe en pantalla este mensaje en la linea 6 y tras 5 espacios slPrint("El valor de la variable es", 5, 7) -- escribe en pantalla este mensaje en la línea 7 y tras 5 espacios slPrint(sega, 32, 7) -- escribe en pantalla el valor de la variable sega que hemos definido al comienzo en la línea 7 tras 32 espacios para que quede justo después de la frase de antes slPrint("Saturn Lua Player", 11, 9) -- escribe en pantalla este mensaje en la línea 9 y tras 11 espacios para finalizar while true do slSynch() end -- lo mete en bucle creo algo así como mientras que sea cierto haz esto hasta el infinito[/code] Ahora sí que queda bastante más claro, ¿verdad? Con la tontería hemos aprendido algo más sin darnos casi cuenta, si escribimos [b]--[/b] detrás de cada orden podemos poner un comentario para identificar qué hace ese comando y escribir nuestra anotaciones personalizadas. Probadlo si quereis, cambiar el código por el que os he puesto con comentarios (o cread comentarios propios para testearlo), recread la iso de nuevo y montadla en el Daemon y vereis que sigue funcionando igual en el emulador. Eso quiere decir que todo lo que pongamos detrás de -- lo interpreta como un comentario y no da error ni se lia con ese texto. Esto creo que se denomina REMARK o algo asi, en BASIC me parece que se hacía con REM. Parece una gilipollez pero viene muy bien anotarse cosas, sobre todo cuando nuestros códigos comiencen a complicarse y convertirse en galimatías que hasta a nosotros nos costará entender. [b]LUA y SEGA[/b] Mirando de nuevo nuestro código tan sencillo llego a otra conclusión. Si os fijáis parece que hay órdenes que son del lenguaje Lua y otras que son de la librerías de SEGA. Por ejemplo: [quote]local sega = 20 [/quote] Esto lo he sacado de algun sample de documentación de Lua de cómo definir el valor de una variable local y ha funcionado. O sea yo interpreto que esto es Lua. Sin embargo, otra orden como esta: [quote]slPrint("El valor de la variable es", 5, 7)[/quote] Esto es Sega Library. No os saldrá nada así en la documentación de Lua, los print en Lua son directamente print y lo he probado y no parece funcionar. Así que tenemos que usar este print particular para que escriba en pantalla, este print es de las librerías gráfica de Sega con casi toda seguridad, si os fijais empieza por "sl" (sega library) lo que le delata. Así que llego a la conclusión de que habrá que trabajar unos temas como pueden ser variables, procesos, rutinas y demás programándolos con Lua, pero para otras cosas particulares tendremos que "hablarle" a la Saturn en su lenguaje con las librerías de Sega para que nos haga caso. Creo entender pues que con el Saturn Orbit sucede algo similar pero con el lenguaje C. Aquí es con Lua, que en principio es más sencillo. [b]¿Y ahora qué hago?[/b] Pues eso mismo me pregunto yo. Sería cuestión de investigar y hacer cosas más complicadas. Estas historias suelen ser al principio todo basado casi en la prueba y el error (os cansaréis de cambiar código, regenerar la iso, montarla en el daemon y rularla de nuevo en el emulador). Una buena idea quizás para inspirarse un poco sería echarle un ojo a la documentación sobre Lua que incluye este Player, está en la carpeta [b]docs\Lua[/b] Tenemos el manual de programación y luego el de referencia en dos pdfs bien majos. Ahí en docs también tenemos las carpetas SBL y SGL con pdfs oficiales (SEGA Confidential, lol!) y varios textos que nos pueden ayudar y mucho. Añado yo además en clave SEGA [url=http://www.segasaturno.com/Minerva-238/archivos/Sega%20Saturn%20SGL%20Developer's%20Manual%20Reference.pdf]este manual que puede ser muy interesante y no está incluido en la documentación del Lua Player. Se trata del [b]Manual de referencia del desarrollador[/b], donde estan creo que todas las funciones (los comandos sl que hablábamos antes) listados y explicados cómo funcionan, así como estructuras, apéndices y demás. Me parece que puede venir muy bien, la verdad. Junto a esto y los ejemplos que vienen podemos tratar de descifrar cómo diablos hacen las cosas. Objetos en 3D, uso de sprites, como se cargan texturas, reproducir audio... se me ocurren muchas cuestiones... Supongo que hay que ir paso a paso y armarse de paciencia. No creo que nadie del foro se anime a hacer nada, sinceramente. Ni siquiera tengo demasiada fe en que nadie haya leido todo este tutorial al completo :roll: , solo lo pongo para documentar un poco el Lua Player de Rockin'-B que por lo que veo estaba muy huerfano de este tipo de cosas en todo internet y me da un poco de pena, si soy sincero. Con este entorno Rockin'-B y otro colaborador suyo estaban programando la videoaventura [b]Police Officer Smith [/b]que quizás recordaréis. En teoría se podrían llegar a hacer homebrew bastante ambiciosos... En fin, espero que os haya gustado el tutorial y alguno se anime a hacer sus pinitos. También espero que amigos como Indiket, FacundoARG, vbt y demás compañeros que pasan por aquí y saben de programación igual les pique el gusanillo, o puedan echarnos un cable si surgiera alguna duda probando otras cosas. Un saludo y pongo deberes para mi o para quien se atreva a ver si se pueden llegar a hacer. [b]DEBERES:[/b] Pintar texto con diferentes colores en pantalla Pintar un sprite en pantalla, no solo letras! [b]BONUS:[/b] Existe Lua Player para PSP. Creo que igual la idea surgió de aquí para llevarlo a Saturn. ¿Se podrían portar homebrew sencillos como estos a Saturn gracias al estar los dos en Lua?: http://bugz.luaplayer.org/gallery/index.html (creo que va a ser que no :) ) Enlaces de interés: Web oficial de Lua: http://www.lua.org/ Manual en castellano (es 5.1 pero creo que servirá): http://www.lua.org/manual/5.1/es/manual.html Lua Users: http://lua-users.org/ Documentación dev Saturn: http://koti.kapsi.fi/~antime/sega/docs.html Más de dev en SegaXtreme (foro donde normalmente hablan de Orbit, pero nos puede servir para Lua Player por el tema de las librerías de SEGA): http://segaxtreme.net/forum/forumdisplay.php?fid=34