Bienvenido

Welcome to yugimotta.tk!!


sábado, 5 de diciembre de 2009

Tovor 2: Proyecto imposible

Ok, esta era la idea del proyecto:

Tenemos una palm, una palm monocromática y ya algo vieja (palm m125, si la referencia les sirve de algo, esta palm corre Palm OS 4.0). La idea básica es hacer un programa (en java) que nos permita dibujar algo en la palm y, mediante el puerto serial que tiene este dispositivo enviarle instrucciones en bytes a la torre serial del RCX (Bloque de lego basado en un microcontrolador útil para hacer robots con legos). La torre serial enviaría estos bytes al RCX, que ejecutaría las instrucciones enviadas para así dibujar en papel lo que hayamos dibujado en la Palm.
En resumen: Un robot hecho con lego capaz de dibujar lo que dibujemos en una palm.

Pues bien, si están familiarizados con esto de la programación, sabrán que Java es un lenguaje de programación muy versátil, que nos permite correr un programa en cualquier plataforma mientras ésta tenga una máquina virtual de Java (JVM), que convierta el bytecode del programa compilado en código que la plataforma en que lo corramos(Windows, Mac OS, Linux) pueda entender. Esta es una de las grandes ventajas de Java.

¿Porqué menciono esto? Porque, precisamente, esta fue la parte que hizo de nuestro proyecto un proyecto imposible: La máquina virtual de Java (o Waba, más bien).
Pues resulta que en la internet circula una máquina virtual capaz de correr Java en una Palm: La máquina virtual de waba, o Waba Virtual Machine. Esta máquina virtual tenía su propia versión de Java, llamada waba, que estaba bastante limitada (sin doubles, concatenaciones de strings, y cosas por el estilo).
Pues bien, esta máquina virtual nos permitía mandar cosas por el puerto serial de la palm, con paridad par, el problema era que nuestra torre de RCX trabaja con paridad non: Ahí comienza el dolor de cabeza. (Bit de paridad: http://es.wikipedia.org/wiki/Bit_de_paridad)
Obtuvimos el código fuente (en C ) de la máquina virtual, y modificamos lo necesario para que trabajara con paridad non (tan simple como cambiar la palabra Even por la palabra On), EL PROBLEMA FUÉ LA COMPILACIÓN.

La tarea de compilar la máquina virtual (compilar: traducir un programa escrito en lenguaje de alto nivel a un lenguaje que la computadora pueda entender) no debía de ser tan complicada. Según wabasoft sólo hay que utilizar un compilador en C para realizar dicha tarea, cosa que NO DEBE TENER TANTA COMPLICACIÓN.

cito: Since we primarily use Codewarrior, we've included instructions here for building the PalmOS program using Codewarrior. The WabaVM doesn't use any resources (like Forms or Alerts) so building it with either GCC or Codewarrior shouldn't be too difficult.
Pues bien, la página de Wabasoft está fechada en el año 2001, ¿los problemas de esto? Codewarrior fue descontinuado por ahí del 2003, y aparentemente las versiones más nuevas no nos sirven para compilar esta máquina virtual.

La única alternativa que encontramos: PRC tools, una versión de gcc que compila programas en C para palm. Corrimos prc-tools en Ubuntu, y posteriormente en fedora, sin obtener buenos resultados.

Después de dos semanas y múltiples intentos de compilar, encontramos una versión del src de la máquina que contenía un makefile para palm, gracias a ese makefile fue que llegamos a casi compilar la máquina virtual (sólo obtuvimos archivos .o que no se podían linkear).

Finalmente nos dimos por vencidos al no poder salir de esta clase de errores: "(...)Relocation truncated to fit(...)". Aparentemente todo era tan simple como segmentar el código (que ya estaba segmentado), pero no logramos hacerlo, o al menos no obtuvimos buenos resultados.

Ya que esto no nos fue posible, no logramos correr nuestro programa en la Palm, se optó por utilizar otras alternativas.

Si hay alguien ahí afuera que me pueda decir ahora como resolverlo hágalo, siempre es bueno para matar la curiosidad ^^
Saludos!


1 comentario: