[ATARI] Copiador SITRE para juegos en cassette
Publicado: Vie Feb 20, 2015 11:33 pm
SITRE es un copiador de juegos de disco a cassette para Atari 8-bits que desarrollé durante el verano de 1989 a pedido de SYFCOM, un negocio de venta de juegos piratas en Viña del Mar. Lo que buscaba era combinar en un único copiador:
S.I.T.R.E. quiere decir "Sistema Inteligente Turbo con Recuperación de Errores", pero en su fase inicial se llamó C.A.T.C.I. o "Cargador Automático Turbo Cassette Inteligente". Era muy feo el nombre original, y lo cambié por otro peor!!!
El desarrollo de SITRE lo realicé en mi 800XL estándar, sin memoria expandida, por lo que la primera versión sólo permitía copiar juegos de unos 24K. Con eso pude hacer todas las pruebas necesarias para poner las pausas de los pitos lentos y ajustar la velocidad máxima de grabación que permitiera hacer cargas sin fallos, y cuando forzaba los errores (por ejemplo presionando suavemente la tecla de pausa en la cassetera), podía retomar la carga retrocediendo la cinta un par de vueltas. Para ajustar los parámetros de grabación, era necesario modificar el S.O. en la ROM del Atari... ¡¿En la ROM?!
La arquitectura de los Atari XL/XE tiene un registro en memoria denominado PORTB, mediante el cual cambiando algunos bits se pueden activar o desactivar algunas ROM y RAM del sistema, haciendo que se pueda acceder a algunos de ellos mediante direcciones de memoria preestablecidas. De esta forma se puede activar y desactivar el lenguaje BASIC, la ROM del S.O., el Self Test, y los distintos bancos de memoria extendida.
Por lo tanto, para modificar el S.O. hay que copiarlo desde la ROM hacia la RAM accesible en el mismo rango de memoria, y luego se retocan los parámetros o rutinas necesarias.
Una vez que el copiador estuvo estabilizado, el siguiente paso fue permitir el uso de bancos de memoria extendida que poseen los 130XE, con lo cual se podían obtener los 64K adicionales, usando el mismo registro PORTB. Después de las pruebas correspondientes, el programa resultante en esta segunda versión fue el que le entregué a SYFCOM.
Todas las rutinas de carga de SITRE estaban programadas en Assembler 6502, ya que es lo requerido para cargar juegos desde cassette (sin BASIC, es decir, con la tecla OPTION presionada además de la tecla START). Sin embargo, el grabador (copiador) estaba escrito en BASIC, ya que ahí es bastante simple controlar el flujo del programa, efectuar la interacción con el usuario, y acceder a DOS para la manipulación de los XEX.
Sin embargo, muchas de las actividades necesarias habrían sido lentas y requerido bastante código en BASIC (ocupando además la escasa memoria disponible), por lo que varias de las acciones fueron programadas en Assembler en modalidad de código relocalizable, y accediéndolas mediante la funcion USR de AtariBASIC. Entre esas rutinas estaban la copia de la ROM hacia la RAM, la lectura del XEX hacia los bancos de memoria y la grabación del XEX en los bloques de cinta, usando los parámetros precalculados como los IRG para pitos lentos.
Inicié este post con la intención de hacer en SITRE lo mismo que dogdark está haciendo con CAIN en otro hilo del foro, es decir, lograr copiar a cassette juegos que pesan más de 64K, usando ampliaciones de memoria compatibles con 130XE y RAMBO en 800XL.
Para evaluar el cambio, es necesario tomar en cuenta el diseño de SITRE. Éste se basó en las siguienes definiciones:
A primera vista parecía muy simple hacer el cambio, pero observando estas definiciones de diseño, me encuentro con bastante trabajo, principalmente porque los contadores ya no serían de 1 byte, sino que de 2, ya que se requiere utilizar 10 bits para manejar hasta 1024 bloques de 256 bytes (256K). Como se puede apreciar, el impacto es grande... los registros X e Y de la CPU no serán capaces de acceder a tablas completas en forma directa (las tablas ya están a su máxima capacidad y habría que hacerlas crecer) y la manipulación de contadores también requieren al menos el doble de instrucciones en ASM. ¡Y eso está en todos lados!
Han pasado 26 años, y lo que he escrito aquí es el resultado de la búsqueda y revisión de los códigos fuentes de cada componente entre mis viejos diskettes o sus respaldos que alguna vez pasé a PC usando SIO2PC o 1050-2-PC. Aún no los encuentro todos, pero he avazado bastante. Al menos ya tengo la última versión 2 estable de SITRE en BASIC y gran parte de las rutinas en Assembler (MAC/65) para la carga desde cinta (empotradas en el copiador en forma de strings). Los códigos fuentes que no pille, deberé generarlos a mano con algún desensamblador de 6502, pero habiendo perdido los comentarios y etiquetas relevantes para recordar y entender lo que se hace... nada tan grave después de todo.
Eso es todo por ahora... A ver si esto va dejando contentos a AsCrNet y Suppawer
ACTUALIZACIÓN: Acceso directo al los listados de SITRE 2.01 (original 130XE) y SITRE 3.02 (modificado para 256K).
- Copiar juegos en formato XEX.
- Cargador turbo, de esos que tienen una mayor tasa de transferencia (sonido más agudo) y menor tiempo de carga.
- Retomar cargas en el punto que fallaron ("rebobine X vueltas").
- Usar casseteras normales (sin sistema Injector).
- Copiar juegos que requerían pausas para inicialización ("pitos lentos").
S.I.T.R.E. quiere decir "Sistema Inteligente Turbo con Recuperación de Errores", pero en su fase inicial se llamó C.A.T.C.I. o "Cargador Automático Turbo Cassette Inteligente". Era muy feo el nombre original, y lo cambié por otro peor!!!
El desarrollo de SITRE lo realicé en mi 800XL estándar, sin memoria expandida, por lo que la primera versión sólo permitía copiar juegos de unos 24K. Con eso pude hacer todas las pruebas necesarias para poner las pausas de los pitos lentos y ajustar la velocidad máxima de grabación que permitiera hacer cargas sin fallos, y cuando forzaba los errores (por ejemplo presionando suavemente la tecla de pausa en la cassetera), podía retomar la carga retrocediendo la cinta un par de vueltas. Para ajustar los parámetros de grabación, era necesario modificar el S.O. en la ROM del Atari... ¡¿En la ROM?!
La arquitectura de los Atari XL/XE tiene un registro en memoria denominado PORTB, mediante el cual cambiando algunos bits se pueden activar o desactivar algunas ROM y RAM del sistema, haciendo que se pueda acceder a algunos de ellos mediante direcciones de memoria preestablecidas. De esta forma se puede activar y desactivar el lenguaje BASIC, la ROM del S.O., el Self Test, y los distintos bancos de memoria extendida.
Por lo tanto, para modificar el S.O. hay que copiarlo desde la ROM hacia la RAM accesible en el mismo rango de memoria, y luego se retocan los parámetros o rutinas necesarias.
Una vez que el copiador estuvo estabilizado, el siguiente paso fue permitir el uso de bancos de memoria extendida que poseen los 130XE, con lo cual se podían obtener los 64K adicionales, usando el mismo registro PORTB. Después de las pruebas correspondientes, el programa resultante en esta segunda versión fue el que le entregué a SYFCOM.
Todas las rutinas de carga de SITRE estaban programadas en Assembler 6502, ya que es lo requerido para cargar juegos desde cassette (sin BASIC, es decir, con la tecla OPTION presionada además de la tecla START). Sin embargo, el grabador (copiador) estaba escrito en BASIC, ya que ahí es bastante simple controlar el flujo del programa, efectuar la interacción con el usuario, y acceder a DOS para la manipulación de los XEX.
Sin embargo, muchas de las actividades necesarias habrían sido lentas y requerido bastante código en BASIC (ocupando además la escasa memoria disponible), por lo que varias de las acciones fueron programadas en Assembler en modalidad de código relocalizable, y accediéndolas mediante la funcion USR de AtariBASIC. Entre esas rutinas estaban la copia de la ROM hacia la RAM, la lectura del XEX hacia los bancos de memoria y la grabación del XEX en los bloques de cinta, usando los parámetros precalculados como los IRG para pitos lentos.
Inicié este post con la intención de hacer en SITRE lo mismo que dogdark está haciendo con CAIN en otro hilo del foro, es decir, lograr copiar a cassette juegos que pesan más de 64K, usando ampliaciones de memoria compatibles con 130XE y RAMBO en 800XL.
Para evaluar el cambio, es necesario tomar en cuenta el diseño de SITRE. Éste se basó en las siguienes definiciones:
- Utilizar los 4 bancos de 16K de memoria extendida, totalizando 64K máximo para un XEX (en 1989 no vi ningún juego en formato XEX que llegara a los 60K).
- Los bloques en cinta serían de 256 bytes de datos (más el overhead de control). Por lo tanto, el máximo de bloques en cinta sería 256.
- El análisis del juego en busca de pitos lentos generaba una tabla de 256 bytes, uno por cada gap (IRG) a grabar en cinta. Así se ponen pausas sólo donde se necesitan.
A primera vista parecía muy simple hacer el cambio, pero observando estas definiciones de diseño, me encuentro con bastante trabajo, principalmente porque los contadores ya no serían de 1 byte, sino que de 2, ya que se requiere utilizar 10 bits para manejar hasta 1024 bloques de 256 bytes (256K). Como se puede apreciar, el impacto es grande... los registros X e Y de la CPU no serán capaces de acceder a tablas completas en forma directa (las tablas ya están a su máxima capacidad y habría que hacerlas crecer) y la manipulación de contadores también requieren al menos el doble de instrucciones en ASM. ¡Y eso está en todos lados!
Han pasado 26 años, y lo que he escrito aquí es el resultado de la búsqueda y revisión de los códigos fuentes de cada componente entre mis viejos diskettes o sus respaldos que alguna vez pasé a PC usando SIO2PC o 1050-2-PC. Aún no los encuentro todos, pero he avazado bastante. Al menos ya tengo la última versión 2 estable de SITRE en BASIC y gran parte de las rutinas en Assembler (MAC/65) para la carga desde cinta (empotradas en el copiador en forma de strings). Los códigos fuentes que no pille, deberé generarlos a mano con algún desensamblador de 6502, pero habiendo perdido los comentarios y etiquetas relevantes para recordar y entender lo que se hace... nada tan grave después de todo.
Eso es todo por ahora... A ver si esto va dejando contentos a AsCrNet y Suppawer
ACTUALIZACIÓN: Acceso directo al los listados de SITRE 2.01 (original 130XE) y SITRE 3.02 (modificado para 256K).








(antes)
(durante)
(después)







"Commando"