Ver el código de XL Dual-OS

Hola amigas y amigos atarianos. Hace muchos años modifiqué un computador Atari 800XL para que pudiera arrancar usando ((https://www.atariware.cl/wiki/Proyectos/XLMulti-OS uno de 10 posibles sistemas operativos (OS))). 

Dicha modificación requería, además de una EPROM con los 10 sistemas operativos, una pequeña placa con resistencias, un interruptor BCD de 10 posiciones y un orificio en la carcasa. Posteriormente el computador en el que realicé la modificación comenzó  a evidenciar distintos problemas. Esto, sumado al poco uso que le daba a la mayoría de los sistemas operativos instalados, me hicieron plantear la posibilidad de un mod mucho más simple, el cual describo en este artículo.

Los primeros computadores de Atari, conocidos como modelos 400 y 800, venían con una versión del sistema operativo conocida como OS-B. El desarrollo de su sucesor, el computador Atari 1200XL, implicó varios cambios no sólo a nivel de hardware, sino que también a nivel de sistema operativo (Por ejemplo, la adición del SELF TEST).

A esta nueva versión del firmware se le denominó XL-OS, que es la que usan sus sucesores, los computadores 600XL, 800XL y 65XE, con pequeñas modificaciones (No usan la pantalla de bienvenida ATARI con colores del arcoíris). Los cambios realizados en el nuevo sistema operativo provocó que algunos programas desarrollados para los computadores 400 y 800 no se ejecutaran correctamente (o no se ejecutaran para nada) en modelos posteriores como el 600XL y 800XL. 

Para solucionar este problema, Atari puso a disposición de sus usuarios un diskette denominado "((http://www.atarimania.com/utility-atari-400-800-xl-xe-translator-_29943.html THE TRANSLATOR))", que contenían una copia modificada del OS-B que podía ser cargada desde diskette en la memoria RAM del 600XL (con módulo de expansión de memoria 1064) u 800XL, y con esto poder cargar programas desde diskette o cassette que sólo son compatibles con el OS-B. 

¿Pero qué pasa con los programas disponibles en cartridge que son incompatibles con los computadores XL/XE? En este caso la solución anterior no es posible, y se requiere de una más radical: remover la ROM del computador XL/XE, que contiene la versión XL-OS del sistema operativo, y reemplazarlo por una EPROM programado con la versión OS-B. Esto nos deja un computador XL funcionando con la ROM OS-B, pudiendo ejecutar programas diseñados para los computadores 400 y 800 que se encuentran disponibles en cassette, diskette y cartridge, pero perdiendo todas las características del XL-OS, como por ejemplo, la posibilidad de ejecutar el SELF TEST.

Pero, ¿No sería mejor contar con lo mejor de ambos mundos? Poder cambiar de versión de sistema operativo cada vez que sea necesario, sin necesidad de abrir el computador XL/XE y reemplazar la EPROM OS-B con la ROM-XL… ese es el objetivo del presente mod.

Los materiales necesarios son los siguientes:

  * 1 base de 28 pines.
  * Una resistencia de 47K Ohm.
  * Unos 30 cms. de cable unifilar
  * Una EPROM 27C256.

Y eso es todo.

El XL-OS está contenido en una ROM de 16 KB, con número de serie CO61598B, y está identificado en la placa madre como U5:

((https://www.atariware.cl/archivos/dual-os/dual_os_01.jpg align=center))
%%(wacko wrapper=text wrapper_align=center)**Arriba se puede apreciar la ROM que contiene el BASIC (U4). Abajo, la ROM del XL-OS (U5).**%%

La ROM del XL-OS tiene 28 pines y es compatible con una EPROM 27C128, por lo que podemos sacar la ROM y poner una EPROM en su lugar. Para poder hacerlo necesitamos quitar la ROM e instalar una base de circuitos integrados. 

El proceso de desoldar la EPROM es bastante complicado, y trae el riesgo de dañar las pistas de la placa madre en el proceso. Para poder hacerlo se debe contar con un extractor de soldadura (ya sea manual o eléctrico) o una pistola de calor, y mucha paciencia. Yo no hice eso en este caso, sino que con un alicate de precisión corté cada uno de los pines de la ROM y luego con un cautín desoldé los pines para después, con un extractor de soldadura manual, despejar los hoyos de la placa madre. 

Luego de esto se limpia bien con alcohol todo rastro de suciedad y se instala una base de circuitos integrados de 28 pines, teniendo ojo en respetar la orientación (Marca semicircular hacia la izquierda):

((https://www.atariware.cl/archivos/dual-os/dual_os_18.jpg align=center))

Con esto podemos probar que todo sigue bien: Programamos una EPROM 27C128 con el XL-OS, lo insertamos en la base de 28 pines respetando la orientación, y arrancamos el Atari sin ningún dispositivo conectado (Diskettera, cassettera, cartucho). Debería aparecernos en la pantalla el mensaje de bienvenida READY. Si por algún motivo esto no sucede, y en su lugar somos redirigidos a la sección MEMORY TEST del SELF TEST, debemos apagar el Atari y comprobar el trabajo realizado, buscando que no haya pistas cortadas o que estén haciendo contacto entre ellas. También podría pasar que sólo aparezca la pantalla en negro. En este caso, además de comprobar lo anterior, se debe verificar que la EPROM haya sido insertada respetando la orientación.

Como ya tenemos una base de 28 pines en el lugar donde va la ROM de sistema operativo, ahora podemos grabar una EPROM 27C128 con otro sistema operativo y utilizarlo en nuestro computador XL sin problemas. Las posibilidades son amplias: podemos grabar una EPROM con el sistema operativo Árabe, o el sistema operativo QMEG, o el Speeder OS, entre otros disponibles. Pero volvamos a nuestro objetivo: poder usar en nuestro computador XL tanto el XL-OS como el OS-B. El sistema operativo OS-B es de menor tamaño que el XL-OS. De hecho, pesa 10 KB (10.240 bytes). Si queremos grabarlo en una EPROM 27C128, debemos concatenarle 6KB de ceros (o unos, o cualquier dígito de $00 a $FF) para que en total su tamaño sea de 16 KB.

Para poder realizar lo descrito, usamos un editor hexadecimal, como el WinHex. Primero creamos un archivo vacío que tenga un tamaño de 6 KB. En WinHex hacemos File \ New, y en "Desired file size" ingresamos 6 KB. 

((https://www.atariware.cl/archivos/dual-os/dual_os_02.jpg align=center))
((https://www.atariware.cl/archivos/dual-os/dual_os_03.jpg align=center))

Luego hacemos File \ Save y le ponemos el nombre "ceros.bin":

((https://www.atariware.cl/archivos/dual-os/dual_os_04.jpg align=center))
Luego debemos concatenar el archivo que contiene el OS-B con el archivo que acabamos de crear. Para esto en WinHex hacemos click en Tools \ File Tools \ Concatenate:

((https://www.atariware.cl/archivos/dual-os/dual_os_06.jpg align=center))
WinHex nos pide que ingresemos el nombre del archivo de destino, el que contendrá el resultado de la concatenación. Ingresamos "OS-B-16K.bin":

((https://www.atariware.cl/archivos/dual-os/dual_os_07.jpg align=center))
Luego en "Choose Source File #1" seleccionamos el archivo "ceros.bin" y hacemos clic en el botón Append:

((https://www.atariware.cl/archivos/dual-os/dual_os_08.jpg align=center))
Luego en "Choose Source File #2" seleccionamos el archivo que tiene la ROM del OS-B y hacemos clic en el botón Append:

((https://www.atariware.cl/archivos/dual-os/dual_os_09.jpg align=center))
Finalmente hacemos clic en el botón Done:

((https://www.atariware.cl/archivos/dual-os/dual_os_10.jpg align=center))
Con esto creamos el archivo OS-B-16K.bin, el que podemos grabar en una EPROM 27C128 y probarlo directamente en nuestro computador XL. Al encenderlo, en vez del clásico READY, veremos el mensaje de bienvenida que se usa en los computadores 400/800: "ATARI COMPUTER – MEMO PAD".

A continuación debemos crear el archivo que grabaremos en la EPROM 27C256.

De manera similar a lo descrito, usamos la herramienta Concatenate del WinHex de la siguiente manera:

En Choose Destination File, seleccionamos "XL-OS-B.bin"
En Choose Source File #1, seleccionamos "XLOS.ROM"
En Choose Source File #2, seleccionamos "OS-B-16K.bin"

Al hacer clic en el botón Done, como resultado obtenemos un archivo de 32KB (32.768 bytes) llamado "**XL-OS-B.bin**". Es este el archivo que debemos grabar en nuestra EPROM 27C256.

Ahora necesitamos un mecanismo con el cual poder activar la mitad de la EPROM que contiene ya sea el XL-OS o el OS-B. Para esto podemos usar un interruptor de 2 posiciones conectado al pin A14 de la EPROM y una resistencia, de la siguiente manera:

((https://www.atariware.cl/archivos/dual-os/dual_os_11.jpg align=center))
El esquema utiliza una configuración llamada resistencia de polarización (((https://en.wikipedia.org/wiki/Pull-up_resistor Pull-up resistor))) para que cuando el interruptor esté abierto, el voltaje aplicado al pin 27 de la EPROM sea de +5 volts, y cuando esté cerrado, sea de 0 volts.
Preparamos nuestra EPROM levantándole el pin 27 y doblamos la resistencia hasta que queden como se muestra en la siguiente imagen:

((https://www.atariware.cl/archivos/dual-os/dual_os_12.jpg align=center))
La idea es soldar un extremo de la resistencia al pin 28 (+5V), y el otro extremo al pin 27 (A14) de la EPROM. Debe quedar de la siguiente manera:

((https://www.atariware.cl/archivos/dual-os/dual_os_13.jpg align=center))
Luego soldamos un extremo del cable al pin 27 de la EPROM:

((https://www.atariware.cl/archivos/dual-os/dual_os_14.jpg align=center))
Luego usamos un trozo de tubo termorretráctil para proteger el pin y la soldadura y montamos la EPROM en la base de 28 pines. El otro extremo del cable debe ir al interruptor de 2 posiciones. Podríamos usar un interruptor como el de la siguiente imagen:
((https://www.atariware.cl/archivos/dual-os/dual_os_15.jpg align=center))
Pero para poder usarlo deberíamos realizar un agujero en la carcasa, y montarlo en él. Pero los computadores de la línea XL ya tienen un interruptor de fábrica: el selector de canal "2-CHAN-3". Y este es el que utilizaremos para este mod. Sólo basta con soldar el otro extremo del cable donde indica la flecha roja en la siguiente imagen, justo debajo del modulador:

((https://www.atariware.cl/archivos/dual-os/dual_os_16.jpg align=center))
La modificación debe quedar como en esta imagen:

((https://www.atariware.cl/archivos/dual-os/dual_os_17.jpg align=center))
Como se puede apreciar, yo removí el modulador, pero para realizar este mod no es necesario hacerlo.

Con esto hemos finalizado el mod. 

El selector "2-CHAN-3" funcionará de la siguiente manera: en la posición 2 (a la izquierda), seleccionará el XL-OS. En la posición 2 (a la derecha), seleccionará el OS-B. El cambio de posición de este interruptor debe realizarse con el computador APAGADO. So lo haces mientras el computador está encendido, el computador entrará en un estado indeterminado ("Crash") y básicamente perderás cualquier trabajo que hayas realizado en él.

En el siguiente video se puede apreciar que el computador está en modo XL (Corriendo el SELF TEST), luego lo apago, cambio el interruptor de posición, lo prendo, y ya está en modo OS-B (400/800):

{{embed url="https://www.youtube-nocookie.com/embed/w4agzf-uivc" width=480 height=360 align=center}}

Espero que este mod sea de utilidad para todos aquellos propietarios de computadores de la línea XL que siempre quisieron ejecutar esos programas incompatibles originalmente diseñados para la línea 400/800.

**Agradecimientos**

  * A ((http://www.retrobits.net/ Dan Vernon)), por su mod Supercart, que inspiró el mod XL Multi-OS y por transición el presente mod XL Dual-OS.
  * A Ascrnet, por ceder generosamente un espacio en su wiki para la publicación de este artículo.

**Links:**

http://ftp.pigwa.net/stuff/collections/nir_dary_cds/ROMS/

Muchos ROMs para los computadores Atari. Los que se usaron para este mod fueron sacados del archivo osromv33.zip y renombrados para claridad.

https://x-ways.net/winhex/

Sitio web donde descargar la última versión del WinHex