Como resultado de mi participación en NOMAM 2016 con "Where's my Cheese?" recibí un kit SIO2BT como premio por el 1er lugar en la categoría EXTREM-256. Ese fue el proyecto de Marcin "Montezuma" Sochacki que ganó el Hardware Contest de ABBUC en 2014. El proyecto SIO2BT permite realizar lo mismo que un SIO2PC o un SIO2SD, pero en forma inalámbrica, es decir, proveer al Atari de una disketera emulada desde un PC equipado con Bluetooth (habitual en los notebooks) o un smartphone, y algún software para emular disketeras.
El kit que recibí venía en una pequeña bolsa, y ésta contenía todo lo siguiente:
Como se puede apreciar en la fotografía, el kit no tiene nada de especial, en el sentido que sus componentes pueden ser conseguidos en tiendas de electrónica y no se necesita construir placas especiales. Pero lo bonito del proyecto fue cómo se solucionaron los impedimentos técnicos para hacer de este módulo algo práctico y que funcione bien, y en parte eso está dado por algunos cambios que deben ser realizados en la ROM del Atari. Afortunadamente, el kit incluye una EPROM ya grabada: llegar y usar si es que el Atari tiene sockets y no hay nada que sacar y volver a soldar directamente en la placa madre. Con esta ROM parchada se extienden los timouts en las operaciones de lectura a través del puerto SIO, y provee además la posibilidad de reiniciar el Atari (COLDSTART) sin tener que apagarlo usando las teclas SHIFT y RESET a la vez.
Debo mencionar que sin la ROM parchada y usando tan solo los 4 cables con enchufes para conectar módulo Bluetooth directamente a los pines del conector SIO del Atari ya se puede establecer la comunicación y cargar prácticamente cualquier XEX usando alguno de los cargadores especialmente construidos para esto. De hecho, el autor del proyecto ofrece su producto también en la modalidad de conector SIO, lo que le da un aspecto retro al asunto.
El módulo Bluetooth viene preconfigurado para operar a la velocidad del bus SIO (19200 baud), y tiene predefinido un nombre y un PIN para el pareo. Sin embargo, el módulo BT obtiene la energía a través del puerto SIO, y cada vez que se apaga y se vuelve a encender el Atari, el módulo se desconecta del equipo remoto pareado. Es por ello que la versión en kit trae además un par de diodos, un condensadador, un interruptor y algo de cable: todo eso permite encender el módulo en forma independiente al Atari en sí, tomando la energía directamente de la fuente de poder y sólo siendo necesario parear el dispositivo y establecer la conexión con las disqueteras virtuales una vez, incluso antes que se encienda el Atari para bootear. El diagrama de conexiones es el siguiente:
Me animé a instalar el kit en mi 800XL PAL supervitaminizado, por lo que tuve que planear el cómo hacerlo. Lo primero que hice fue averiguar bien qué era lo que tenía en mis manos, partiendo por el chip con la ROM modificada. Observé que era una EPROM 27C512, con capacidad para contener 64K, es decir, puede almacenar 4 ROMs de 16K del Atari. Revisando la documentación del proyecto, Montezuma recomendaba concatenar 4 variantes de la ROM, incluyendo la XL/XE original y la parchada por su proyecto BT. Contacté a Montezuma y me confirmó que venían esas 2 además de QMEG y QMEG parchada para BT. Si el chip se instala en el Atari tal cual, será visible la ROM XL parchada, pero haciendo algunos puentes entre pines, se podían seleccionar las otras. El diagrama es el siguiente:
En ese diagrama se puede observar que se necesita un par de interruptores y resistencias para lograr las 4 combinaciones, pero como en realidad no me interesó QMEG, opté por seleccionar a través de un único interruptor entre XL y su versión parchada. En ese momento se me encendió la ampolleta: el kit incluía un interruptor de dos vías, es decir, con una podía seleccionar la ROM parchada y con la otra encender el módulo BT, ambas con un único movimiento del interruptor. ¿Qué tal? A eso le podía sumar el hecho que la placa 800XL PAL no tiene un interruptor selector de canales para el módulo RF de TV, pero que la carcasa es NTSC y por lo tanto trae el espacio para ese interruptor... sólo debía ingeniármelas para hacer calzar el interruptor en ese lugar sin provocar un cortocircuito.
Debido a que mi experiencia soldando es pobre, decidí comenzar con el circuito de la ROM. Para ello tuve que conseguir una resistencia, ya que ésta no venía en el kit por ser opcional. Para simplificar las conexiones y disminuir el número de cables dentro del Atari, se me ocurrió soldar la resistencia directamente a los pines 27 y 28 del chip, casi tal como se veía en el diagrama, y del pin 28 sacar un cable hacia el interruptor. El resultado fue el siguiente:
El circuito se completó uniendo el otro contacto del interruptor con el pin 14 del chip. Una vez reemplazada la ROM (chip C061598B-08 etiquetado como U5 en la placa) con la EPROM modificada, la placa madre se ve así:
Hice una simple prueba: observé que al encender el Atari con BASIC estaba la ROM original del XL con PEEK(49152) al obtener el valor 11 cuando el interruptor estaba encendido, y si apagaba el interruptor, el mismo PEEK cambiaba a 143, el valor para la ROM parchada. Eso era consistente con el diagrama: interruptor encendido presenta el banco de ROM XL estándar (OS3), y al estar apagado se presenta la ROM parchada (OS4). Como referencia, en esa dirección de memoria está el LSB del checksum de la respectiva ROM. También noté que al presionar RESET con SHIFT cuando el interruptor está encendido no pasaba nada distinto a presionar sólo RESET, pero la hacerlo con el interruptor apagado, es decir, con la ROM parchada activa, esa combinación de teclas hizo que partiera nuevamente el Atari, borrando de memoria mi programita de una línea con el PEEK. Etapa superada.
El siguiente paso fue planificar cómo podría instalar el módulo BT y los componentes adicionales en forma similar a lo anterior. No quise usar los cables con conectores que venían en el kit porque iba a ser muy fácil equivocarme al conectar los pines de a uno. De una disquetera 1050 vieja saqué un conector de 4 pines que traía instalados los respectivos cables suficientemente largos como para acomodar el módulo BT en cualquier lado dentro del Atari. Sólo debía asegurar el orden de los pines.
Con el cable y el resto de los componentes en la mano, debía identificar dónde soldar cada cosa, en particular las líneas de datos del puerto SIO. El problema es que los contactos del SIO están soldados por abajo de la placa y yo quería dejar todo visible por arriba. Se me ocurrió seguir las vías de esos pines en la placa y me encontré con que lo primero que se topa es con una via que pasa de un lado de la placa al otro al mismo tiempo que conecta unas resistencias etiquetadas como C77 para el pin 3 (TxD) y C78 para el pin 5 (RxD), con la salvedad que esas resistencias no estaban en mi placa, dejando el espacio para poner el polo positivo de un diodo en el pin 3 y del otro polo sacar la línea al módulo BT, y luego tirar la línea directa del pin 5 al módulo.
Me quedaba pendiente armar lo referente a la alimentación del módulo Bluetooth. El polo positivo del condensador lo soldé directamente al polo negativo del otro diodo, y el polo negativo del condensador lo introduje a un pequeño orificio que había en la gruesa línea de tierra en la placa. Luego puse en el punto de unión de esos 2 componente la línea que iba directo a la alimentación Vcc del módulo BT y en otro agujero cercano llevé la tierra (GND) al módulo BT. Finalmente, del polo positivo del diodo tiré un cable hasta la vía disponible del interruptor, asegurándome que quedara a la inversa de como estaba conectada la EPROM por la otra vía, ya que al encender el módulo BT, debía "apagar" la ROM estándar del XL para que apareciera la ROM parchada. El otro extremo de esa vía del interruptor lo soldé directamente a los pines de 5V del conector hembra para la fuente de poder en la placa.
En la siguiente imágen, los cables blancos van al módulo Bluetooth y el verde va al interruptor.
En esta otra vista se observa dónde ubiqué el módulo BT, temporalmente cubierto de cinta aisladora eléctrica. Ahí se puede apreciar el conector de 4 pines utilizado y la marca que le hice para no confundir los pines. Ubicado de esta forma, es posible abrir y cerrar el Atari con el mismo cuidado que se tiene con el teclado.
El siguiente desafío fue acomodar el interruptor en la placa de modo que calzara con el orificio en la carcasa sin que fuera necesario fijar el interruptor a ella; quería que la placa fuera completamente removible y autónoma. Observé que a pesar que la placa era norma PAL, existían orificios en ella que no se utilizaban y que a través de ellos podía pasar soportes que afirmaran el interruptor. Esos soportes fueron construidos con un par de clavos pequeños que atravesaron la placa por los agujeros y que luego cubrí con un trozo del aislante de un cable eléctrico. Todo calzó a la perfección.
Una vez cerrado el Atari, se puede observar a través de una de las rendijas el LED del módulo Bluetooth. Éste parpadea mientras no esté pareado y conectado a otro dispositivo (el emulador de disqueteras) y se mantiene fijo durante la operación normal.
El interruptor para habilitar el módulo BT quedó perfectamente mimetizado con el selector de canal que tienen los Atari NTSC. El único problema es que se me olvida para qué lado se enciende!!!! Creo que para marcar deberé usar el adhesivo con el logo Bluetooth que incluyó el kit.
Respecto del software necesario para que todo esto funcione, ya mencioné la ROM parchada por el lado cliente (el Atari), pero falta el lado servidor (las disqueteras emuladas). Existen varios programas que pueden ser utilizados para este fin: SIO2BSD para equipos con linux, RespeQt multiplataforma (Windows, Linux, Mac OSX e incluso Raspberry Pi con dongle BT), y mi favorita: la aplicación SIO2BT para Android desarrollada por el mismo Montezuma.
Para usar SIO2BSD, RespeQt y similares, sólo hay que asegurarse que el puerto COM elegido corresponda a Bluetooth, y configurar un poco para usar handshaking por software e ignorar el estado de la línea de comandos del puerto COM. De ahí en adelante todo funcionará tal como si el Atari estuviera conectado por cable con el equipo que emula las disqueteras.
En el caso de la aplicación SIO2BT para Android, ésta emula hasta 4 disketeras, tanto para lectura como para escritura, y con ella se puede cargar tanto los ATR como los XEX. Para cargar los XEX, se utiliza el mismo loader del proyecto SDrive, pero también se provee un conjunto de loaders especializados que permiten cargar cualquier cosa incluso si no se tiene la ROM parchada, ya que al inicio de la carga fabrican el parche en la RAM alta que se ubica bajo la ROM de los XL y XE.
Pero esto no se queda aquí... el módulo BT en conjunto con la aplicación en Android permite al Atari acceder a internet implementando un dispositivo N: (sin drivers en el DOS, hay que trabajar a bajo nivel) y emular el APE Time (obtener la fecha y hora). Aún no he intentado utilizar ninguno de estos chiches.
Si bien es posible usar el módulo Bluetooth cuando hay otros dispositivos conectados al puerto SIO, no se recomienda. También existe la posibilidad de utilizar el SIO2BT en conjunto con SIO2SD, conectándolo directamente a unos pines que éste trae en su placa. Hasta el momento nada de eso es algo que yo haya probado...