jueves, 17 de junio de 2010

Twiteando desde el MSX en japonés... o casi

Como ya dije en mi blog principal, hace poco he desarrollado un cliente de Twitter para MSX llamado MSX trivial tweeter. Una de las principales carencias del mismo era la imposibilidad de escribir en japonés, dada la complejidad de convertir el juego de carácteres SHIFT-JIS a UTF8.

Pues bien, al final me he puesto a ello y he implementado soporte para escribir en japonés desde MSX trivial tweeter.




La conversión del juego de caracteres la hago mediante un fichero de 64K que contiene la conversión a UTF16 de todos los posibles caracteres del SHIFT-JIS (almaceno en UTF16 y convierto a UTF8 en tiempo real; si no, el fichero debería ser de 128K). Hay mucho espacio vacío en el fichero y se podría reducir bastante su tamaño usando algún método de compresión, pero de momento no me voy a complicar más la vida con este asunto.

Bueno, espero que no hayais descorchado el champán todavía porque ahora viene la parte chunga. Resulta que tanto InterNestor Lite como DenYoNet se dan de sopapos con el modo Kanji de los MSX (de los Turbo-R al menos). La captura que habéis visto más arriba está hecha con un emulador en modo MSX2+, y ya con ese entorno empiezan las cosas raras: tengo que activar el modo Kanji (CALL KANJI desde BASIC) antes de instalar el InterNestor, si no, lo único que conseguimos es un precioso cuelgue.

Pero en Turbo-R (tanto emulado como real), no hay manera. Ni antes ni después: el modo Kanji y cualquiera de los softwares TCP/IPeros que he desarrollado no pueden funcionar juntos de ninguna de las maneras.

¿Y esto por qué pasa? Pues parece ser que por culpa de la forma que tiene la Kanji ROM del Turbo-R de gestionar la BIOS extendida, y no soy el primero que tiene este problema (por lo visto el MEMMAN, conocido y veterano gestor de memoria desarrollado por obsoletos holandeses, tampoco funciona con el modo Kanji activado). El código de dicha ROM asume, al instalarse, que el contenido previo del gancho de la BIOS extendida es un salto interslot (de esos tan monos que usan una instrucción RST30h). Pero claro, esto no tiene por qué ser así: en un gancho puedes poner lo que quieras, incluso una simple instrucción JP; y de hecho eso es lo que hace el InterNestor, y apostaría la melena a que el MEMMAN hace lo mismo.

¿Que no me creéis? Pues fijaos en el código desensamblado de la Kanji ROM, que obtuve hace tiempo por medio de canales oscuros y truculentos (Persicop, si me lees, tenemos que vernos un día para montar un concurso de calvas). Esta parte del código es la que inicializa el gancho de la BIOS extendida:

Fijaos que para empezar, este código mete datos en el inicio de SLTWRK, así a saco. Es decir, en vez de averiguar primero cuál es su número de slot y a partir de ahí calcular cuál es la zona de SLTWRK que le toca, pues no, usa directamente la zona destinada al slot 0-0. ¡Con dos cojones arrojo y valentía!

Además, no se guarda el primer byte del contenido previo del gancho. Se guardan el segundo, tercero y cuarto, asumiendo que contienen un número de slot y una dirección de memoria. Y claro, siguiendo esta lógica, cuando toca llamar al gancho antiguo, pues esto es lo que hace:

Toma castaña pilonga. Naturalmente, si se te ocurre poner un gancho que NO sea un salto interslot, pues tienes un cuelgue monumental en cuanto intentes usar el modo Kanji.

Aún hay cosas que no me quedan claras. Por ejemplo no sé por qué no funciona con la DenYoNet, que modifica el gancho de la BIOS extendida pero poniendo un salto interslot en principio "legal". Sea como fuere, esto es un putadón serio y molesto inconveniente.

Entonces, ¿es imposible twitear en japonés desde un Turbo-R? Bueno, se puede, dando un rodeo. La estrategia a seguir sería:
  1. Activar el modo Kanji y volcar el mensaje a enviar en un fichero de texto:


  2. Resetar el MSX e instalar el InterNestor (o no, si usas DenYoNet).

  3. SIN activar el modo Kanji, enviar el mensaje aprovechando la capacidad del MSX trivial tweeter para leer la salida de otro programa:



En efecto, un soberano coñazo un procedimiento ciertamente engorroso. No creo que a nadie le den muchas ganas de usar el programa en estas condiciones.

En fin, cuando pueda ya investigaré a ver si el problemilla este se puede solucionar. Mientras tanto habrá que olvidarse de twitear (fluidamente al menos) en japonés desde un MSX (Turbo-R al menos, no estoy seguro de si pasa en más modelos).

4 puesyocreoques:

SaveR dijo...

¿Sabes si alguien ha podido twitter ya además de ti desde el MSX?

Konamiman dijo...

Pues de momento sólo tienen el programa dos betatesters del InterNestor 2.0, más los dos desarrolladores de DenYoNet y una persona de Sunrise. No tengo noticias de que ninguno de ellos haya hecho tal cosa.

Por cierto que el tuyo es el primer comentario de este blog, enhorabuena y tómate algo.

Xisco (Locomosxca) dijo...

Interesante lo de twitear con un MSX, lo lei no hace mucho en una entrevista que te hicieron, lo cual me dejo flipado.
Espero poder conocerte en retromallorca y quizas poder verte twiteando con un MSX.
Suerte y a ver si encuentras el fallo.

Ramones dijo...

Que si que un día nos vemos... mola mil ver que el código baladre no solo lo hacemos los "amateurs". :D