Ingeniería Inversa Injektor
1. Introducción
Como aficionado a la electrónica, la cual también es mi profesión y que lamentablemente no ejerzo, siempre me ha llamado la atención los computadores Atari y cómo éstos funcionan internamente.
Debo reconocer que nunca le di mucha importancia a la casetera, debido a que tuve la suerte de disponer de Disketera a poco andar de tener mi primer Atari (Mi amigo Rodrigo Maldonado me la vendió en esa época), a la edad de 15 años.
Por allá por los 90, había oído hablar del sistema Injektor, pero nunca tuve acceso a él y suponía que mejoraba la velocidad de carga, así como lo hacen los que se conocía como "sistema stak".
Ahora, a principios del año 2021, recibí de regalo varios Ataris y accesorios de mi amigo Rafael Cabrera, a quien conocí por ser hijo de un viejo amigo de mi papá.
En ese regalo, venían dos caseteras Injektor, lo que me hizo despertar la curiosidad, sobre todo por la modificación en su hardware y por el "calugón" que incluye, el cual es muy difícil de descifrar por la dificultad de quitar esa resina que contiene.
Además, me impresionó el nivel de mejora que generó este sistema, de 600 a 4.000 baudios, eso lo encontré impresionante. Creo que pocas mejoras de ese nivel se pueden hacer en forma artesanal hoy en día, dado el gran avance tecnológico que estamos viviendo.
Después de investigar por internet y avanzar en la "ingeniería inversa" del producto, me decidí a escribir este documento con todo lo que he podido descubrir.
En esta versión, no está el trabajo terminado, por lo tanto, como todo trabajo de investigación, en la medida que tenga más información, lo iré actualizando y/o corrigiendo.
2. La casetera en versión original
La casetera, como todo medio de almacenamiento, tiene como funcionalidad de grabar datos desde el computador y al mismo tiempo ser capaz de leerlos.
Las caseteras Atari, incluyendo el modelo XL12 (clon de la XC12) graba y reproduce a 600 baudios, mediante modulación de tonos (FSK).
Al ser grabación por tonos, se define una frecuencia para el 0 y otra frecuencia para el 1.
La frecuencia para el 0 es de 3.995 Hz y se le llama "space" en los manuales técnicos, por otra parte, la frecuencia para el 1 es de 5.327 Hz y se le llama "Mark" (Ver Mapping the Atari en las referencias).
Con esto en consideración, se deduce que, para identificar el 0 (space), se necesitan como máximo 6,7 ciclos de 3.995 Hz y como máximo 8,9 ciclos para detectar un 1 (mark), y cuando digo "como máximo" es muy al límite, la verdad que se debe identificar al menos a la mitad de ese tiempo para dar algo de seguridad a la reproducción, lo que significa 3 o 4 ciclos aprox.
Los tonos de grabación son generados directamente por el chip Pokey del atari, es decir, el mismo computador ya genera la señal de grabación para ser insertada prácticamente en forma directa al cabezal de grabación de la casetera.
Para el caso de la reproducción, es la casetera la que discrimina los "0" y "1" mediante la detección de los dos tonos FSK grabados en la cinta. Más detalle de esta funcionalidad se explica a continuación, mediante el circuito esquemático (Extraído del link puesto en la referencia):
Se ha dividido el esquema en 7 etapas demarcadas en línea punteada:
1. Amplifica la señal recibida del cabezal, se usa en la carga de datos
2. Filtro pasa bajo y recortador. Esta etapa tiene dos funciones:
- Limita las frecuencias más altas. Esto es necesario porque es normal que el cabezal lea con mayor intensidad las frecuencias altas que las bajas, esta etapa compensa este efecto. Los equipos de audio de mayor calidad ponen bastante foco en esta etapa, acá con un simple filtro pasa bajo bien calculado es suficiente.
- Recortador de señal: Garantiza que ambas frecuencias (space y mark) lleguen con la misma intenciadad a la etapa siguiente. Los dos diodos en oposición, son una configuración típica para este propósito.
3. Filtro pasa banda (MARK)
4. Filtro pasa banda (Space): Ambos filtros tienen la misma configuración, sólo cambia el valor de las resistencias R24, R38, R30 y R28.
5. Comparador: Acá la señal de ambos filtros es comparada, aquella con mayor intensidad indicará si es un 0 o 1. En este caso, "0" para la frecuencia mayor (5.327 Hz) y "1" para la frecuencia menor (3.995 Hz). (No es un error, está invertido)
6. Etapa final, acá los condensadores y resistencias antes del transistor son para dar un pequeño filtrado a la señal, para darle más estabilidad a la señal, es decir, evitar variaciones no deseadas. A continuación, el transistor, invierte la señal, aquí se tiene un "1" para la frecuencia mayor y un "0" para la frecuencia menor.
7. Amplificador del canal de audio.
Para el caso de la función de grabado de datos, es prácticamente un canal directo del pin SIO “data out” que viene del chip Pokey hacia el cabezal de grabación. De hecho, me sorprendió la simplicidad. Sólo pasa por un par de condensadores y resistencias y sería todo.
Otra cosa que me sorprende es que si pensáramos en aumentar los baudios, una opción podría ser aumentar la frecuencia de los tonos FSK. Supongamos teóricamente que aumentamos los tonos a 10Khz y 9Khz respectivamente y se requieren 5 ciclos para discriminar un tono de otro (mark y spaces) Con ello lo máximo que llegaríamos es a 1.800 baudios. Lo que lo veo poco factible, ya que 9 y 10Khz está en el límite confiable de las cintas casetes domésticos y 5 ciclos para la discriminación es algo generoso.
Esta duda, me hizo mucho sentido al ver el documental "Parte de Nuestra Historia: Turbosoft (Atari)" (link en la referencia), en donde en el minuto 28:00 se habla del sistema Injektor y más específicamente en el minuto 30:30 los creadores, comentan que la grabación es por pulsos y no por tonos, además también comentan que hicieron pruebas aumentando la frecuencia de los tonos y no llegaron a buenos resultados.
3. Introducción al Sistema Injektor
El sistema injektor dice mejorar la velocidad notablemente (de 600 a 4.000 baudios), se han hecho intentos para hacer ingeniería inversa al módulo, pero sin éxito. Acá, espero resolver el problema de una vez por todas (Quitaré el "espero" una vez que lo haya conseguido reproducir, por el momento este documento muestra el avance solamente).
Primero, toda la información recopilada, la he sacado del grupo Atari Chile, de retrogames y de atariware, dejo los links específicos en las referencias.
De Atariwares, el usuario "AsCrNet" publica el siguiente cuadro:
Juego | Disketera | Casetera estándar | Caserera Injektor |
---|---|---|---|
F-15 | 76 seg. | 840 seg. | 120 seg. |
Bmx Simulator | 40 seg. | 720 seg. | 100 seg. |
Bruce Lee | 60 seg. | 920 seg. | 113 seg. |
Diría que fue este cuadro el que más me sorprendió dado que los tiempos de carga son comparables con la carga de la disketera, y distan mucho de la carga en casete tradicional.
Por otra parte en retrogames (ver referencia) el usuario "133MHZ" publica varias imágenes del módulo injektor, se nota la dedicación para poder quitar la resina que lo cubre, donde publica también un fotos con la placa y las piezas que lo componen, diría que la mayor parte de este trabajo se basó en esta información, muchas gracias "133MHZ"
Dejo a continuación algunas de las fotos que me fueron de mucha utilidad.
4. Sistema injektor, al grano
A continuación, dejo el esquemático de lo que pude deducir de las modificaciones directas a la casetera XL12, acá me basé mayormente en una casetera que recibí de regalo y no tanto de la información bajada de internet.
Acá se respetan los colores de los puntos de conexión que publicó el usuario "133MHZ" de retrogames.
A continuación dejo el esquemático de lo que he podido deducir de las fotos publicadas por "133MHZ" en retrogames, en este caso, fue esta mi única fuente de información. Si algún usuario dispone de más fotos, agradeceré me las haga llegar, para hacer mayores revisiones. (Ya he detectado algunas inconsistencias, este circuito aun está incompleto y en revisión). Como comenté, iré actualizando y corrigiendo.
Acá dejo diseño de la PCB, intenté mantener la posición original de los componentes, a fin de que sirva como punto de control.
Esta PCB, al ser de control solamente, es un poco más grande que la original, por lo que podría no servir para replicar el módulo, una vez validado el circuito, propondré una PCB en dos caras, más organizada y que incluya un conector para las salidas.
Acá los componentes. No todos aparecen en la foto de la derecha, ya que algunos los tuve que deducir de otras fotos.
Pendiente de corregir: Falta una resistencia de 3,3M, el lugar que más haría sentido es entre los pines 11 y 12 del chip 4030, ya que se configura esa puerta xor como amplificador, donde justamente se necesita esa función, ya que la señal de entrada no es una señal lógica, sino que una señal recortada proveniente de la etapa de la casetera del proceso de lectura de la cinta.
5. Lista de materiales
A continuación la lista de componentes electrónicos que son necesarios :
8 Capacitores
Cantidad | Referencia | Valor |
---|---|---|
1 | C1 | 10nF |
1 | C2-C7 | 4.7nF |
2 | C3 | 1,5nF |
1 | C4 | 2.2n |
2 | C5-C6 | 0.1uF |
1 | C8 | 0.22nF |
11 Resistencias
Cantidad | Referencia | Valor |
---|---|---|
1 | R1 | 6.8K |
1 | R2 | 220K |
1 | R3 | 3.2K |
2 | R4,R8 | 10K |
1 | R5 | 120K |
2 | R6-R7 | 5.6M |
1 | R9 | 56K |
1 | R10 | 22K |
1 | R11 | 21K |
2 Integrados
Cantidad | Referencia | Valor |
---|---|---|
1 | U1 | 4030 |
1 | U2 | 4013 |
3 Diodos
Cantidad | Referencia | Valor |
---|---|---|
3 | D1-D2-D3 | 1N4148 |
6. Pruebas
Dado que el circuito que se ha conseguido descifrar puede contener errores, pues se armó sólo mirando las fotos disponibles en internet, se hace muy necesario hacer pruebas para verificar la consistencia del mismo y así corregir los errores que contiene.
Acá dejo una foto del inicio de las pruebas al módulo ("Calugón"). Para facilitar, se le puso un conector a la cinta de conexiones.
Partiré, por simplicidad, nombrando los pines del "calugón". El número de los pines respeta el orden de los cables de la cinta con que va conectada a la PCB de la casetera.
Pin | Nombre | Observación |
---|---|---|
1 (Café) | play_in | Señal de entrada al calugón en la carga (play) |
2 (Rojo) | rec_out | Señal de salida del calugón en la grabación (rec) |
3 (Naranjo) | rec_in | Señal de entrada al calugón en la grabación |
4 (Amarillo) | ctrl_in | Señal de control de entrada al calugón |
5 (Verde) | ctrl_out | Señal de control de salida del calugón |
6 (Azul) | Gnd | Tierra |
7 (Violeta) | +Vdd | Alimentación |
8 (Gris) | play_out | Señal de salida del calugón en la carga (play) |
Al revisar el esquematico y el de la casetera, se pueden advertir tres bloques funcionales del módulo injektor (calugón), el cual se detalla en el siguiente recuadro:
Hay que recordar que la casetera injektor convive con 2 formas de grabación y reproducción, la cual llamaremos "modo normal" y "modo injektor", dicho esto, paso a describir la funcionalidad:
6.1. Módulo de control
Este módulo es el encargado de cambiar el modo de funcionamiento entre el "modo normal" y el "modo injektor", al realizar las pruebas, puedo concluir lo siguiente:
a) Todo el circuito es alimentado por la señal de control de motor de la casetera, por lo que siempre está sin energía, a no ser que se realice un proceso de carga o grabación, o bien, activándola manualmente con poke 54018,52
b) El modo por defecto es el "modo normal"
c) A la entrada de este módulo se tiene un valor lógico 0 por defecto.
d) La entrada (ctrl_in) va conectada a la salida del comparador del circuito de la casetera (ver la etapa 5, en "La casetera en versión original" explicada anteriormente)
e) Para que el módulo pase a "modo injektor", es necesario que haya un pulso (1 lógico) de al menos 1 segundo de duración. Esto se consigue al momento de la lectura de la cinta (modo play), ya que las grabaciones injektor incluyen este tono antes de comenzar la carga (tono equivalente a un space =3.995Hz). En "modo rec" se consigue mandando un tono "space" por el puerto de datos (data_out del puerto SIO).
f) El hecho que se pueda activar el "modo injektor" al momento de la grabación, explica una de las modificaciones de la casetera que corresponde a la resistencia de 680k y capacitor de 220pf que inyectan la señal de grabación, de vuelta a la entrada del sistema de lectura (ver esquemático de la modificación a la casetera).
g) Una vez activado el "modo injektor", la única forma que se desactive es desenergizando todo el módulo, ya sea en el proceso de fin de grabación/reproducción, o bien, manualmente con "poke 54018,60"
h) La señal de salida del módulo de control se inyecta a la etapa final del circuito de lectura de datos de la casetera, anulando la señal de datos del "modo normal" cuando se está en funcionamiento en "modo injektor"
i) También el módulo de control comanda los otros dos módulos de "grabación" y "reproducción", modificando su funcionamiento.
Las pruebas realizadas confirman el funcionamiento descrito y es totalmente compatible con esta etapa del esquemático ya presentado, por lo que queda validada esta etapa (1 de 3).
6.2. Módulo de reproducción (play)
Se han realizado, entre otras varias pruebas, una revisión con el osciloscopio, con el módulo calugón configurado en modo injektor:
La primera prueba del módulo en bien reveladora, se grafican las señales de la entrada al módulo de reproducción (play_in, pin 1-café) y la otra a la línea data_in del conector SIO. El resultado está en el siguiente gráfico:
La señal de más arriba (play_in) es la señal sin procesar (sólo amplificada y recortada) que viene del cabezal de la casetera, se observan pulsos largos y cortos, acá la conclusión es que, cada vez que se genera un pulso largo (independiente si es positivo o negativo), se genera un cambio de estado en la señal de datos. ("data_in" del puerto SIO).
Al momento de realizar la prueba, también se advirtió que el tono grabado en la cinta antes de comenzar la carga injektor, genera el cambio al "modo injektor" del módulo de control, es decir, la cinta grabada con injektor ya viene con el tono necesario para pasar del modo normal al modo injektor.
Las características de la señal (play in) son las siguientes:
- Voltaje mínimo = 1,48V
- Voltaje máximo = 2,24V
- Tiempo pulso corto = 138uS
- Tiempo pulso largo = 260uS
Esta información se utilizará para realizar las correcciones al circuito del módulo injektor, cuando se haga una copia de éste.
6.3. Módulo de grabación
Para realizar las pruebas de salida, hay que recordar que los pines "data_out" y "clock_out" del puerto SIO, están combinados mediante 2 resistencias (ver modificaciones a la casetera). La señal de clock va con una resistencia de 68K y la de Datos con una resistencia de 27K (ver referencia 4). Al combinar ambas señales, el clock aporta aprox un 28% al voltaje resultante y los datos un 62%.
Esta señal se aplica a la entrada "rec_in" del módulo injektor (calugón).
Para realizar la prueba, se configura el canal de datos y el clock en el Atari, para que genere señales de 4Khz en el clock (4 K Baudios) y 1Khz en la señal de datos.
La configuración de la prueba es con los siguientes pokes:
- poke 53775,43 (Configura la puerta SIO para salida por tonos y el clock se define en el canal de audio 4)
- poke 53768,0 (no combinar canales de audio, frecuencia de referencia de 64Khz)
- poke 53760,32 (canal 1 a 1Khz, asignada al 1 lógico)
- poke 53762,32 (canal 2 a 1Khz, asignado al 0 lógico). Al ser una prueba, se dejan los 2 iguales.
- poke 53766,8 (canal 4 a 4Khz, asignado al clock)
- poke 53761,128+32+7 (canal 1, configurado en tono puro y a medio volumen)
- poke 53763,128+32+7 (canal 1, configurado en tono puro y a medio volumen)
- poke 53767,128+32+7 (canal 4, configurado en tono puro y a medio volumen)
Para mayor información de estos POKES, ver descripción del chip Pokey (ver referencia 7). También hay información de esto en la sección "atari por dentro" de la revista Turbo news, número 3 (ver referencia 8).
Se realizan dos pruebas, una para "modo injektor" y otra para "modo normal", en cada prueba se muestran dos curvas con el osciloscopio: Señal de entrada al módulo rec (rec_in = SIO clock+datos), la otra curva muestra la salida del módulo injektor (rec_out).
Los resultados de la prueba en "modo injektor" se observa en la siguiente imagen:
Se observa en la curva de arriba, la combinación de las señales simuladas de clock y datos. En la curva de abajo se observa lo que ya se esperaba, el proceso inverso del módulo de play. La señal de salida es casi la misma señal de clock (la de mayor frecuencia) y cada vez que se produce un cambio de estado en la señal de datos, se produce un pulso más largo en la señal de salida.
Acá se observan unos pequeños pulsos rápidos al interior de los pulsos largos de la señal de salida, esto es porque la prueba no es tan fina, no está tan sincronizada la señal de clock y de datos simulada. Así que no debiese ser un problema.
Los resultados de la prueba de grabación en "modo normal" se muestran en la siguiente imagen:
Se observa que la señal de grabación se recompone quitando la señal de "clock", quedando la señal de datos pura, tal cual sería en caso de no haber modificado la casetera. (Recordar que la señal compuesta de datos+clock es producto de la modificación a la casetera, aquella modificación donde se agregan dos resientencias en el conector SIO).
Muy bien pensado este módulo, me parece una funcionalidad bastante compleja si se considera la simplicidad de la solución, sólo usando 2 compuertas xor.
6.4. Conclusiones de las pruebas
Con sólo las pruebas realizadas realizadas ya se tiene información suficiente para poder reproducir el módulo injektor (o calugón), pero ya se tiene trabajo adelantado con esquemático, que si bien, seguro contiene errores, la información de las pruebas permitirá corregirlos. Al menos da una gran pista de cómo fue resuelto el problema de la funcionalidad.
Al revisar el esquemático, tengo la certeza con el módulo de control que está correcto y los otros dos módulos, sospecho que con pequeñas correcciones menores, debiese poder reproducirse.
Interesante haber aislado la funcionalidad en 3 grupos (play, rec y control), ayuda al entendimiento del mismo.
El próximo paso será reproducir el "módulo injektor" en forma práctica. Esto va a demorar un poco, ya que no está siendo fácil conseguir los materiales, dada la pandemia del covid. Pero ya está en camino la compra aliexpress.
Trabajo en construcción
Paso siguiente: Reproducir el módulo y actualizar la PCB con las correcciones
7. Referencias
1. Documental "Parte de Nuestra Historia: Turbosoft (Atari)"
2. Info Casetera Esquematicos
3. Grupo Atari Chile en facebook
4. Artículo de Injektor en Retrogames
5. Artículo sobre la casetera Injektor en Atariware
6. Mapping the Atari
7. Info Pokey
8. Revista Turbo News