El pasado mas presente que nunca

a

VIDEO CARTRIDGE TURBOSOFT

Por XT5 y ZZT

A finales de los 80” y principios de los 90”, Turbo Soft, una empresa Chilena creada por tres amigos Argentinos, fabricó una serie de cartuchos para Atari XL/XE y varios productos, dentro de los cuales está el Video Cartridge. Este aparato cargaba juegos desde una cinta VHS, proporcionada junto con el cartridge, a una gran velocidad, pero era imposible cargar más juegos o modificarlos.

click para agrandar

Es un cartridge que se inserta normalmente en el slot correspondiente, sin ningún tipo de modificación o adición, exceptuando que de él sale un cable que tiene un enchufe RCA macho en el extremo opuesto. Ese RCA se enchufa a la salida de video (video out) de cualquier reproductor VHS (pasapelículas en la época). Se enciende el Atari con la tecla OPTION presionada y se le da play a la cinta ya mencionada. De esta manera la información digital (juego) contenida en la imagen grabada en la cinta de video es transferida de forma serial al cartucho, el cual la convierte a paralelo y la vuelca a la memoria del Atari, una vez se carga todo el juego se ejecuta y sale en pantalla. Suena simple, pero no lo es tanto. Lo que si podemos admirar es que para la época era un dispositivo dificil de creer que hicera lo que hace y más encima hecho en Chile.

Si quiere saber que juegos contiene la cinta, aquí esta el manual.

 

HISTORIA

Un día, en el foro de Retrogames apareció uno de los creadores del dispositivo, Marcelo Waldbaum, quien nos aclaro varias dudas y nos contó como se gestó el proyecto. Aquí un estracto de lo que él posteó.


Turbo Software fue una empresa donde trabajamos Mauro Pieressa, Pedro Caravall, Roberto Domingues y yo Marcelo Waldbaum.

Trabajamos durante muchos años desarrollando Software y Hardware para los Atari 8 Bits.

Desarrollamos para Atari Chile el Sistema de Carga de Cassette Turbo Tenis, los cartuchos de varios juegos, el memory card, el Light pen y nuestro proyecto mas interesante que fue el video cartridge: sistema que cargaba programas desde una video cassettera a altisima velocidad. Tambien escribimos la revista Turbo News que se distribuia en el pais.

Casualmente nos invitaron a una reunion para conversar sobre otros temas relacionados con el Video Cartridge que podria ser una buena opcion, pero ellos creyeron que para ese entonces no habria muchos usuarios que compraran el Atari 8 bit con disponibilidad de Videos VHS, entonces nos pidieron una solucion de almacenamiento independiente a bajo costo para poder grabar sobre todo programas educativos, el que finalmente termino siendo la Memory Card..

El video Cartridge fue el proyecto que nos dio mas satisfaccion, pues creo que sin duda fue el mas innovador. Siempre tratabamos de resolver el costo del almacenamiento de la informacion, la velocidad de carga que en Atari era todo un tema y la calidad en la carga de los programas. Un dia me estaba duchando y se me ocurrio la idea de almacenar informacion en cintas de Vhs y parti a la casa de mi Socio Roberto Domingues a conversar el tema... Al rato despues ya estabamos grabando barras en las cintas y reproduciendo la informacion mirando asombrados en el osciloscopio la calidad de la reproduccion que el video nos entregaba y vimos la posibilidad de desarrollar el producto. Primero partimos con simples barras que nos daban algunos ceros y unos en la lectura en forma sistematica y logramos leer varios Kbytes de informacion sin alteracion en la data. Estabamos super contentos con la idea y el proyecto y lo viable que era.

A los pocos dias empezamos a generar la placa de control y el software para el Video Cartridge. Se lo presentamos a Jaime Vallarino encargado de Productos en Coelsa y quedo encantado, incluso habia planes de transmitir esta señal en algun programa infantil educativo para que desde las casas se pudieran cargar programas, pero esto nunca llego a consolidarse. Me acuerdo que lo desarrollamos en un verano dos años despues que desapareciera el Atari del mercado comercial en Chile.

Nuestro mayor desafio fue la grabacion del video. El problema que tuvimos era que si haciamos un master y reproduciamos este master en nuevas cintas la informacion perdia mucha calidad y las tasas de errores subian mucho por lo cual bajaba la tasa de seguridad en la carga.

Nos cabeciamos un buen tiempo para resolver que cada VHS fuera un original grabado directamente desde el computador, y al final lo logramos.

Coelsa tenia en stock el primer Hard Disk externo que existio para la marca Atari, y se lo compramos. Nos conseguimos una interfaz que permitia mediante el bus paralelo conectarlo a un computador 8 Bits y grabamos toda la informacion de los 300 juegos en el disco duro. Entonces hicimos un software de grabacion que leia los programas a medida que los enviaba a varios VHS obteniendose en cada uno de ellos la primer generacion del video osea masters en cada copia. Claro que era medio peligroso pues solo teniamos un Hard Disk y no era facil conseguirlos en esta epoca pero resistio muy bien a su trabajo.

Roberto Domingues que es nuestro giro sin tornillos desarrollo todo el Hardware que fabricamos, Mauro Pieressa fue el encargado de hacer compatible todos los juegos al Video Cartridge trabajo muy tedioso y yo realice el software de la rom del Video Cartridge y el sistema de grabacion... Que epoca... lastima que no lo desarrollamos 5 o 10 años antes... creo que este proyecto pudo haberse vendido muy bien si hubieramos dado el golpe en el momento mas indicado, aunque igual vendimos muchisimas unidades...


Si quiere leer el hilo completo click aqui.

a

INSTRUCCIONES DE USO


- Conectar el VHS a un TV
- Poner la Cinta en el VHS y ubicar el juego que queremos cargar avanzando o retrocediendo; cuando este listo presionar STOP o PAUSE
- Insertar el Video Cartridge en el slot de cartruchos del Atari y enchufar el RCA que sale de él a la salida de video del VHS
- Encender el Atari con la tecla OPTION presionada  (la pantalla permanece en negro)
- Poner Play en el VHS
- Una vez sale el juego en el Atari, poner STOP en en VHS
- Listo para jugar

a

a

INFORMACIÓN TÉCNICA

De estos video cartridges hay dos versiones. La primera que llamaremos "sin resina" por que venía sin resina y la "con resina" ya que el cartridge estaba rellena de ella, para impedir la copia del sistema. En la primera versión a modo de anticopia, borraron los números de los chips, sin embargo apareció uno que si los tenía lo cual nos facilitó mucho obtener la información que aquí expondremos.

Paso 1 y 2: circuitos esquemáticos y ROM's

Versión 1 - sin resina

click para agrandar

Cartridge sin resina ROM

Formato de la imagen que contiene los juegos en la cinta de VHS versión 1, sin resina


Esquemático

a

a

Versión 2 - con resina


Cartridge con resina ROM
Lamentablemente, por el hecho de estar relleno de resina, es imposible sacarle fotos al circuito. Se intentó "picotearla" pero el siguiente fue el resultado: lado componentes y lado soldaduras.

 


Formato de la imagen que contiene los juegos en la cinta de VHS versión 2, con resina

a

Video de la primera vez que se cargo un juego usando todos los componentes originales.

 

Paso 3: desensamblando la ROM, lo basico....

La primera parte relevante que hace la ejecucion de este cartucho es copiar 0x792 bytes desde 0xA07F (justo despues del texto de Turbo Software y las iniciales del autor) a 0xD800 y luego salta hacia alla.

En 0xD800 se ejecutan 3 funciones (DAE6,DBDC y DA88) que tienen como objetivo parchar parte del codigo, por que querria parchar el codigo de si mismo??? simple: por ofuscacion (ofuscación es una medida anti-copia para entorpecer la ingenieria inversa).

Por ejemplo miremos parte de la funcion 0xDB4B (la principal encargada de leer los datos del video desde el hardware del cartucho)

RAM:DB4B                 PHA
RAM:DB4C                 TXA
RAM:DB4D                 PHA
RAM:DB4E                 TYA
RAM:DB4F                 PHA
RAM:DB50                 LDA     byte_D301       ; en realidad es D505
RAM:DB53                 LDX     #$14
RAM:DB55                 LDA     byte_D301       ; en realidad es A000
RAM:DB58                 BMI     loc_DB53
RAM:DB5A                 DEX
RAM:DB5B                 BNE     loc_DB55
RAM:DB5D                 LDA     byte_D301       ; en realidad es A000
RAM:DB60                 BPL     loc_DB5D
RAM:DB62                 LDA     byte_D301       ; en realidad es A000
RAM:DB65                 BMI     loc_DB62
RAM:DB67                 LDA     byte_D301       ; en realidad es D505
RAM:DB6A                 LDA     byte_D301       ; en realidad es A000
RAM:DB6D                 EOR     #$FF
RAM:DB6F                 TAX
RAM:DB70                 STX     byte_DBD8
RAM:DB73                 STX     byte_DBD9
RAM:DB76                 LDA     $DE84,X
RAM:DB79                 BEQ     loc_DB7E
RAM:DB7B                 RTS                     ; en relidad es JMP     loc_DB50
RAM:DB7C                 BVC     loc_DB58+1      ; en relidad es JMP     loc_DB50
RAM:DB7E                 LDA     $DC68,X
RAM:DB81                 STA     byte_45
............

Como se puede apreciar la ofuscacion basicamente enmascara las direcciones 0xA000 (donde hace polling al bit7) y 0xDB50 (donde se setean los "modos" del cartucho) por 0xD301 que es el PORTB..De esta manera algun curioso incauto quedara confundido al tratar de mirar un listado del codigo.

En un principio trate de parchar a mano, pero me aburrí en la mitad porque era una tarea tediosa, asi que busque en internet un "core" de 6502 y comencé a escribir un pequeño emulador para que me ayudara con esto y los pasos que vienen.

Aqui esta un binario del codigo que va en 0xD800 ya desofuscado por si alguien quiere disfrutar un rato revisandolo con un desensamblador.


Paso 4: entendiendo los registros propios de este cart.

Los registros que añade este cart son los siguientes:

D50Xh
donde X corresponde a 4bits cuya funcion es la siguiente
bit0 (LSB): cuando se escribe un 1, la EPROM del cartdridge es deshabilitada, cuando se escribe un 0 se vuelve a habilitar.
bit1: en 1 habilita el shift register (U7), en 0 lo deshabilita.
bit2: en 1 habilita la 'señal de actividad del video', esta señal puede ser leida como el bit7 de A000, 0 la deshabilita.
bit3(MSB): al poner este bit en 1 la señal RD4 del cartridge se pone en baja, al ponerlo en 0 se pone en alta.

Esta informacion fue obtenida mediante el analisis del esquemático y luego comprobada desensamblando y emulando la ROM.

La lógica del cartucho solo se habilita tomando las lineas de direccion e ignora las datos, dentro de la ROM este registro activado haciendo lectura, y las unicas combinaciones que utiliza son 0xD503, 0xD505, y 0xD509



Paso 5: Formato en que se reciben los paquetes contenidos en el video

Partamos por la unidad mas pequeña, que en este caso es un paquete de 64 bytes:

00h: direccion que pude ser en los rangos (1 a 7Bh, A0h)
01h....3Eh: datos
3Fh: checksum

el checksum es simplemnte los 8 LSB de la sumatoria de los bytes desde 0 hasta 3Eh y una vez calculado el checksum se procede a negar cada uno de los 64 bytes de un paquete.

Luego se forman bloques que consisten en
3 paquetes con direccion A0h
123 paquetes (desde el 1 al 7Bh)

Los datos de estos paquetes se almacenan temporalemte en un buffer de la siguiente manera:

paquetes con direccion A0: se almacenan en 0xDC04
paquetes con direccion 1 a 7Bh: se almacenan en su buffer con la siguiente formula 0xE100+x*3Eh.



Paso 6: Formato de los datos dentro de los bloques


------
Esta sección está en construccion, hasta el momento he desesamblado todo el cart, tambien lo he emulado por soft, pero falta mucho mas... por favor opinen y pregunten lo que estimen en
el foro.