Artículo TGR Magazine “RetroLib y RetroWorkbench”

Definición

Retrolib es una librería que, de momento, incluye tres ejemplos de programación de MSX que se compilan y linkan haciendo un simple “make”, pero que en el futuro incorporará muchos más ejemplos y muchas más plataformas. Proporciona a las personas que quieran aprender a programar en plataformas retro la capacidad de estar programando código en cinco minutos, y complementa la información que existe en la web sobre cómo programar dichas plataformas.

RetroWorkbench es una instalación Linux preparada para compilar, linkar y ejecutar todos los ejemplos de la RetroLib, en forma de máquina virtual VirtualBox sobre un BodhiLinux (distribución minimalista sobre Ubuntu). De esa manera no hay que pasar por el trago de instalar miles de herramientas para programar.

En definitiva, ambos proyectos van encaminados a que ponerte manos a la obra sea cuestión de minutos, aparte de incorporar los ejemplos de programación diseminados por la red en una estructura que funciona integrada y que podría ser la base de un aprendizaje eficiente de dicha programación.

En éste artículo explicamos (espero que de forma entretenida) el por qué de dichos proyectos y cómo se gestaron.

A por tu sueño...

Llega un momento en la vida de todo retrofan en la que decide programar aquél videojuego que siempre tuvo en mente, para aquella plataforma que le quitó y le dió tantos sueños. En ese momento decide ponerse manos a la obra y se encuentra con un montón de problemas:

  • Vaya, esto no tenía puerto USB.
  • Uf, este editor es muy duro.
  • Y cómo consigo yo que la gente colabore?
  • Anda, aquí hay que rebuscar y rebuscar para encontrar información.
  • Aquí hay uno que ha hecho algo parecido, pero no en mi plataforma.
  • Cross-compiling sonaba mejor antes de empezar...

Si, además, programa habitualmente para ordenadores, tabletas, etc actuales:

  • Esto no tenía undo? copiar pegar al menos?
  • Ay que ya no va, qué cambio hice?
  • De verdad que no hay debug?

Y así podríamos estar hasta el infinito.

Luego, además, están las líneas rojas pululando: hay quien es capaz de hacerlo todo todo en la plataforma final (incluso editar el código fuente, etc...), los hay que hacen lo mismo pero con un emulador, y los hay que hacen cross-compiling. Cada uno de ellos pone la línea roja de la virtud justo en la última puerta que cruzaron. En definitiva, hay pocos que se dediquen a ésto y a veces hasta se ponen trabas. Aún así, es más el afán de compartir que el de ser exclusivos, y eso se nota en la actividad de los blogs y de los foros y en la publicación de tutoriales, ejemplos en código abierto, etc.

Eso, y otras muchas cosas más, hace que la dulce ilusión de estar programando el ansiado PES 2013 para MSX en cinco minutos se convierta en cuestión de días de pesquisas hasta llegar al primer hito: el por partes iguales ansiado y penoso “hola mundo”. Sin embargo el engorro difícilmente pueda igualar la orgásmica alegría de ver que esas 9 letras y un espacio asoman tímidamente en la pantalla.

Después vendrán más y más pesquisas para dar otro y otro pasito. Y luego vendrán las diferentes variantes dentro de la plataforma, y si es el caso de que la plataforma los soporte, el onanista deseo de ver tu juego en un... cartucho!!! Claro, aunque eso esconda horas y horas más de pesquisas sobre la memoria, el linkador, etc... e incluso que todo eso te lleve a que las herramientas que escogiste sencillamente... no valen!

El nacimiento de la idea

Tras haber vivido el inicio de esa experiencia en mis carnes, decidí “pasar a limpio” lo aprendido. Antes de escribir el enésimo blog resumen dando las gracias y mencionando a todos aquellos generadores de conocimientos que me guiaron en mi corto camino, y antes de que dicho blog acabara (como todos mis blogs) en el más profundo olvido por parte de su creador, decidí hacer con éste nuevo conocimiento lo que hago en mi vida profesional: convertirlo en algo útil, quizá un proceso automatizado.

En mi caso, estaba haciendo ejemplos de programación para MSX, basándome en las páginas de Avelino Herrera Morales y de mi amigo (y no por ello menos admirado Alberto Orante), que apoyaban sus cimientos en la obra de Nerlaska y de un viejo conocido que a ver cuándo tengo el placer de saludar: Konamiman.

Yo también había marcado mi propia línea roja: con que ejecutara en un MSX me valía, chimpún! Quería todo a mi disposición: el acceso a internet, los puertos USB, los editores con refactorización, el control de versiones, la wiki, etc... Todo lo que me ayudara a tener mi videojuego rulando en un MSX me valía, por supuesto eso era abrir la puerta a emuladores, cross compiling, incluso a lenguajes de alto nivel como Pascal o C (bueno, de alto nivel para lo que era programar en MSX). No soy tan iluso como para pensar que no necesitaría ensamblador, pero siempre he sido de la opinión que la buena confitura mejor en frasco pequeño. En el caso del ensamblador, el buen veneno en dosis pequeñas (dentro del código C en pragmas). Respeto y admiro todo lo demás, yo es que no valgo para tanto esfuerzo inicial... ;o)

De hecho, para que ese trabajo de recopilación de ejemplos, etc no cayera en saco roto... lo mejor era meterlo en un directorio bien organizado, bajo control de versiones. Ah, y que cada uno de ellos se compilara simplemente haciendo “make” en su directorio. Obviamente, sin repetir lo mismo en cada Makefile, mejor uno para todos... Pero claro, compilar y linkar un ejemplo de cartucho y uno de DOS no es lo mismo, pero mejor dejarlo resuelto mediante unas opciones ya... Y si en la raíz le pongo un makeAll que los compile y linke todos? Así puedo probar fácilmente que tras los últimos cambios de mis Makefile siguen funcionando todos los ejemplos anteriores...

Entonces me pareció que tras conseguir eso mismo con tres ejemplos de programación, mi trabajo podría ser útil para otros que quisieran programar en MSX y, de hecho, si se hacía de dominio público quizá alguien me podría ayudar a extenderlo para Spectrum y Amstrad, plataformas para las que podría usar el mismo compilador. Bueno, quizá es soñar, pero si existe un compilador de C para Commodore ¿por qué no incluirlo? Y ya de paso... ¿por qué restringirse al C?

La idea que tuve es la siguiente: si vamos recopilando los ejemplos de programación y los vamos adecuando para la RetroLib, y extendemos la RetroLib para acogerlos... estaríamos contribuyendo con un poco de orden a ayudar a aquellas personas que quieran programar para plataformas retro. Así que la herramienta en realidad puede ser un proyecto. Permitiría a los programadores centrarse en el código, y podrían tener un ejemplo funcional de cómo se compila, por ejemplo, un cartucho, para documentarse, aparte de los ya conocidos blogs.

Otra cosa que me pareció bien incorporar fue la siguiente: si se utilizan correctamente las directivas del preprocesador de C y se cuida con detalle la definición de tipos, podríamos conseguir que ciertos códigos se compilaran también en Linux, para así poderlos debugar y, en la medida de lo posible, hasta se podría hacer “profiling” para descubrir, por ejemplo, las pérdidas de memoria que podamos tener. Esto nos abriría la puerta a disponer “para siempre” de las herramientas más avanzadas de programación para nuestras máquinas, sin depender tanto de si el emulador nos da tal o cual característica. A tal efecto reescribí los print, etc para que los ejemplos de MSX-DOS funcionaran también en la línea de comandos de Linux.

La RetroLib

Con todo ello resuelto, pero con sólo tres ejemplos de programación MSX rulando, me decidí a publicar la primera versión de la RetroLib en Github:

https://github.com/txinto/retrolib

El proyecto de la RetroLib puede encontrarse en:

http://gatatac.org/projects/retrolib/wiki/Wiki

Así que a partir de ahí el que quisiera descargarla y ejecutar sus ejemplos sólo necesitaría varios minutos HORAS para simplemente descargarla , CLAROOOOO... Y EMPEZAR A INSTALAR COMPILADORES, HERRAMIENTAS, EMULADORES, Y TRES MILLONES DE COSAS MÁS QUE A LO MEJOR EN SU PLATAFORMA DE PROGRAMACIÓN NO SON TAN FÁCILES DE CONSEGUIR Y TENER SUERTE, REZAR MUCHO, Y QUE SE DEN DOS O TRES MILAGROS... y ejecutar 'make’.

Bueno, casi sin querer acabamos de dar con la motivación del RetroWorkbech ;o)

El RetroWorkbench

El RetroWorkbench es una máquina virtual de VirtualBox que tiene instalado un BodhiLinux (distribución minimalista basada en Ubuntu). A ese BodhiLinux le hemos instalado el compilador SDCC (en el futuro estarán instalados todos los que la RetroLib demande) y todas las herramientas necesarias para compilar, linkar y ejecutar todos los ejemplos de la RetroLib. En la actualidad se encuentra sincronizado con la versión v0.0.1 de la Retrolib, que incluye.

Lo podéis encontrar en:

http://gatatac.org/projects/retroworkbench/wiki/V01

Trabajar con la RetroLib en RetroWorkbench se vuelve, por tanto, mucho más fácil:

  • Instalar VirtualBox en tu máquina.
  • Bajarse el RetroWorkbench, es un fichero un poco grande pero sólo uno.
  • Descomprimirlo.
  • Abrirlo con VirtualBox.
  • Abrir una shell, ir al directorio de la RetroLib y hacer "./makeAll.sh”.

Sencillo, también encontraremos emuladores para probarlos, etc.

Uso y disfrute

Como ya mencionamos, de momento ambos proyectos se encuentran en una fase quasi-embrionaria, con sólo 3 ejemplos de MSX incorporados, pero en el futuro incorporaremos más ejemplos y más plataformas. Lo bueno es que el aprendiz de programación retro tendrá ambos proyectos como referencia, y muy probablemente su proyecto personal empiece por:

  • Escoger el ejemplo que más se adecue a su proyecto.
  • Copiarlo en otro directorio.
  • Cambiarle el nombre al correcto.
  • Ver si hay algo de otros proyectos que también pueda necesitar, hacer algo de ingeniería inversa para incorporarlo también.
  • Hacer un pequeño ejecutable de la primerísima versión inicial del proyecto y ver que compila y ejecuta.
  • Considerar si aporta algo nuevo a la RetroLib y escribirnos para que lo incorporemos (o hacerse colaborador y subirlo directamente).
  • Y continuar programando su sueño!!!

Despedida.

Y hasta aquí el primer borrador del artículo, cualquier comentario o corrección no dudéis en usar las herramientas de esta wiki para hacerlas constar!

Si ves que no puedes, solicita acceso a

Un saludo.

Tx.