INTRODUCCIÓN HISTÓRICA
(Puedes saltar este rollo si tienes prisa...)
Durante principios de la década de los 90 del siglo pasado, me encontraba muy desconectado del mundo MSX. En España las famosas revistas Input MSX y MSX Club habían desaparecido, por lo que solamente quedaban contados (y malos) artículos en Micromania. Pensando que los años dorados de los micros de 8 bits habían terminado con la década de los 80 y que nunca volverían tras el auge vertiginoso de los 16 bits, me vi obligado a desarrollar mis propios programas para diferentes cometidos.
Una de las mejores impresiones que tenía del sistema MSX2 era por su magnífico modo de 256 colores, me parecía que había sido poco exprimido en su vida comercial. Lejos de arrinconar esta magnífica máquina, decidí explorar la posibilidad de enviar imágenes desde un PC que, también con 256 colores simultáneos, producía mejores resultados debido a su mayor profundidad de color (256KB). La intención era producir imágenes que fueran mejor que las hechas en vida comercial para MSX2, con apreciables errores en el color y un exceso de banding en la mayoría de los casos.
Fue sobre aquellos años, que pensé programar mi propia aplicación que permitiera pasar cualquier imagen del PC al formato estándar de MSX. Dado que había programado (y aprendido) en MSX BASIC, me decidí a utilizar un lenguaje BASIC de Microsoft en PC, que eran lo suficientemente parecidos para que mi adaptación fuera rápida. Así que las primeras pruebas fueron con GWBasic, que no me convenció por su lentitud. Pronto descubrí QBasic, al incorporarse una versión con Windows 95 lista para usar. Realicé una rudimentaria versión, igualmente muy lenta como la anterior. Tardaba aproximadamente 1 minuto en convertir una imagen en mi viejo 486DX-66, con unos resultados similares a las comercializadas.
Más tarde, no recuerdo muy bien que pasó, perdí los fuentes originales y me vi obligado una vez más a comenzar el proyecto. Esta vez ya tenía parte del camino andado, pues recordaba cómo lo había hecho, así que me permitió concluir la nueva versión en menos tiempo. Además, optimicé todos los procesos, mejorando el tiempo de conversión a unos 30-40 segundos, si no recuerdo mal.
Después de esto pasaron muchas cosas, entre otras mi contacto con ciertos grupos de aficionados al MSX (lo que desembocó en RetroMadrid) gracias a que en aquel entonces comenzábamos a conectarnos a Internet. Y me olvidé de este proyecto.
Tras pasar varios años sin acordarme del programita, llegamos al año 2013 (ahí es ná). Debido a la crisis (uf), me vi envuelto en un ERTE (regulación de empleo temporal) y quedé desasignado del trabajo en mi empresa. Con tiempo libre decidí volver a programar, para no oxidarme. Busqué un Basic moderno para rehacer el programa y encontré QB64, con todo lo necesario para programar aplicaciones en entornos Windows y otros. Hice algunas pruebas y conseguí unos resultados sorprendentes: unos 18fps. Así que, con tiempo suficiente, me propuse mejorar los resultados obtenidos, usando algún truquito de mi cosecha.
Así que, desde el año 2013, llevo programando, ampliando y optimizando este programa que, en la actualidad, tiene más de 1500 líneas de código. A parte, claro está, las incontables horas echadas y líneas de código de programas de prueba, fallos garrafales, pérdidas de olla... que se van quedando en el camino sin ser contabilizadas. Por supuesto hay que añadir todo el tiempo dedicado a crear, actualizar y conservar este portal, que no es moco de pavo.
Solo espero que este programa sea del agrado de todos los que puedan sacarlo provecho, aunque si nadie se anima seguro que yo si que lo hago.
DESCRIPCIÓN TÉCNICA
(También puedes saltar esto si no sientes curiosidad...)
Los ordenadores MSX2 y superiores disponen de un modo de video con 256 colores simultáneos conocido popularmente como Screen 8, debido a su denominación en MSX BASIC. Los procesadores de video, o VDP, que soportan este modo son el Yamaha V9938 y el Yamaha V9958, que formaron parte del hardware de los MSX2 y superiores, por lo que se los conoce como MSX Video. Tambien se construyeron algunas tarjetas de ampliación para ordenadores Texas Instrument TI-99 con estos chips.
Como es sabido, este modo tiene una profundidad de 256 colores simultáneos. Pero estos no son definibles, como ocurre por ejemplo en las VGA, si no que son fijos y están determinados por el DAC interno que utiliza un único byte de ancho para generar el código de color. Esta codificación es de formato RGB, siendo los dos bits más bajos el componente azul (B), los tres siguientes el verde (G) y los tres más altos el rojo (R), dando forma a ese único byte/pixel que con esta técnica permite recorrer todo el espectro visible.
Este modo de video es un tanto especial, ya que en realidad el VDP dispone de 9 bits, pero solo usa 8 en este caso, limitando el uso del componente azul a solo dos bits en lugar de los tres posibles del resto de modos. Esto tiene como ventaja el uso de un único byte para cada punto de pantalla, ahorrando complicados métodos de codificación y espacio en memoria de video (VRAM). Por el contrario al estar recortado un bit, el componente azul tiene menos definición y provoca que ciertas tonalidades de este no sean realmente azules, generando en ocasiones ciertos errores que muestran tonalidades violeta, cian, verdes u otras combinaciones por exceso o defecto. Esto es bastante más apreciable con imágenes en blanco y negro, dónde realmente se pueden mostrar únicamente dos grises reales, en contra del resto de modos que con nueve bits pueden generar hasta seis. Parece ser que la reducción del componente azul es debido a que el ojo humano percibe de manera reducida este componente, el cual es el menos significativo a la hora de ser recortado.
Debido a estas limitaciones, en una conversión directa, se representan frecuentemente con el mismo valor final distintos colores similares pero diferentes en el origen. Esto lleva a generar imágenes con manchas uniformes de color o saltos muy pronunciados entre zonas, dónde en la imagen original hay una variedad de colores muy cercanos en el espectro, generalmente en degradados de color. Estas manchas o islas de color se conocen en inglés como "colour banding", en español "efecto banding" o "bandeo", siendo muy común en vídeo animado y en imagen estática comprimidos.
En sistemas de vídeo que tienen gran profundidad de color, por ejemplo 24 bits o true color, estos efectos quedan atenuados debido a que disponen de una mayor cantidad de colores. En ese caso el ojo es incapaz de diferenciar colores que tienen valores muy cercanos, dando la sensación de degradados con transiciones muy suaves sin saltos. Como se observa en la anterior imagen, si en una zona de 256 puntos creamos un degradado, en este caso solo con el componente rojo, podemos asignar a cada uno de los puntos un color diferente creando un degradado visualmente muy efectivo, pues dispone de 256 posibles combinaciones para cualquiera de los componentes RGB (8 bits cada uno). Sin embargo, en un MSX2 no podría mostrar más que 8 colores diferentes que se repartirían a partes iguales por toda la zona, sin usar tramas (dithering), lo que crea un degradado demasiado brusco debido a su recortada paleta con solo 3 bits para este componente. Además hay que añadir que este efecto es igual en el verde y más acentuado aún en el azul, que con 2 bits tiene solo 4 combinaciones posibles.
Y esta es la razón para el desarrollo de este software. Un intento por "disimular" la falta de profundidad de color en screen 8, que da como resultado imágenes "poco creíbles", a veces feas, para conseguir unos resultados significativamente mejorados y mucho más aceptables. Así, en general, con este programa se puede conseguir una mayor exactitud de la imagen, produciendo un mejor brillo, contraste y color final. Esto es perfectamente aplicable a imágenes con calidad fotográfica, aunque no suele obtenerse los mejores resultados en gráficos generados artificialmente, como los diseños creados para videojuegos, dónde es preferible una conversión directa sin mejoras y, ocasionalmente, retoques manuales.
VERSIÓN ACTUAL
En la versión inicial se podía convertir una imagen con cinco modos diferentes de interpretación del color, aplicar zoom y poner esta en blanco y negro. En la versión actual, la 2.0, están añadidas ciertas funciones como modos entrelazados, crear recortes y la posibilidad de convertir todas las imágenes contenidas en una carpeta.
El funcionamiento es similar a la versión anterior, con el añadido de estas nuevas funciones. Para una mayor información, descargar el manual de instrucciones que está al final, en la sección de descargas.
REQUISITOS RECOMENDADOS
Windows de 32 ó 64 bits.
Resolución mínima de 1280px de ancho.
4 GBi de memoria RAM.
Espacio líbre en disco de al menos 6 MBi.
Es posible hacer funcionar el programa con menores prestaciones, por ejemplo 512MBi de RAM, pero en esos casos el programa podría no funcionar a una velocidad óptima. La razón para recomendar 4GBi de RAM es para garantizar que el sistema operativo pueda mover con soltura otros programas que estén funcionando simultáneamente. Por supuesto todo depende de la configuración de cada equipo.
Gracias a todos por probar el programa y reportarme ideas y fallos.
DESCARGAS
El fichero a descargar es un comprimido ZIP. No requiere instalación. Para iniciar el programa, descomprimir la carpeta al disco duro y ejecutar el archivo .EXE.
Descarga alternativa -- MSX Screen Converter 2.1 -- Mirror download
Cambios en última versión:
Corrección de varios errores al cargar una imagen con transparencia en formato PNG.
Añadido soporte para cargar imágenes JPG junto a ligeros cambios en ventana del sistema "Abrir fichero".
Mejorado mecanismo de dibujado de imágenes, que ahora es más ágil y consigue algo más de rendimiento en adaptadores gráficos lentos.