viernes, 3 de noviembre de 2017

¿Cómo emulo una Commodore 64 en Ubuntu?

Desde su exilio en Caracas en 1956, Juan Perón reorganiza a las fuerzas peronistas para entablar el desgaste contra la dictadura a fin de promover su retorno que estimaba en breve, y en una de sus misivas centroamericanas enseña a emular una clásica Commodore 64 en Ubuntu.


Compañeros:

Un contratiempo jamás ha sido una derrota, pero hemos de saber volver a las nociones básicas para hacernos de nuevo, y ello implica no desconocer el Arte de la Conducción. Ya hemos realizado lo importante, y en condiciones mucho mas adversas, por lo cual las nuevas acciones no revistará problema alguno. La distancia que guardo aquí en Caracas ha de ser sólo temporal...

Ahora todo estriba, como siempre he repetido y encargado a ustedes, de avivar la resistencia para aumentar el desgaste, mientras nos organizamos y planeamos la destrucción de la dictadura y el exterminio de la reacción. Todo ello puede ser logrado si nos ponemos seriamente a hacerle la guerra sin cuartel, si trabajamos para tomar contacto con los que la combaten y los ayudamos desde aquí con todo lo que podemos, especialmente ofreciéndoles la acción coordinada de las demás partes que se mantienen contacto con nosotros.

Muchas cosas de las que haga la dictadura nos favorecerán, otras nos perjudicarán, y la mayor parte no serán ni favorables ni desfavorables pero nosotros en adelante sólo debemos confiar en lo que nosotros mismos seamos capaces de hacer para destruirla. Por eso la guerra sin cuartel debe ser declarada en todas partes y cada uno de nosotros se preguntará al fin del día si ha hecho algo contra la dictadura que azota al país. Sólo mediante esa persistencia y esa voluntad de vencer llegaremos a nuestrops objetivos con la satisfacción del éxito. Yo no tengo la menor duda que venceremos pero tampoco dudo que para ello será necesario luchar, quizá largo tiempo.

Volver a lo básico nos recuerda los condiciones de antaño, y las posibilidades que teníamos entonces, mucho más acotadas sin duda gracias al avance de una técnica que hemos dominado. Esto - de particular importancia en la lucha - no deja de ser verdad en la historia informática de Nuestro Movimiento.

Es por ello que os recordaré cómo emular tales situaciones para entrenarnos en las condiciones más básicas de la lucha.

El Sistema
Vean señores, en mis tiempos de cadete mi primera computadora fue la ampliamente popular Drean Commodore 64 ("La Computadora Personal con Poder Profesional"), equipo que se comenzó a producir en serie por Drean San Luis S.A. en 1984.

Este sistema informatizado me permitió comprender de mozo las verdaderas bondades del Software Libre, pues su código fuente se introducía directamente en la máquina, y el esfuerzo requerido por ello hacía imprescindible la participación del usuario en la libre modificación del código, su libre copia - y sobre todo - la excelencia de distribuirlo libremente entre los compañeros.

Desde el punto de vista del hardware, se trataba de un microordenador de arquitectura de 8 bits, formado inicialmente por una fuente de poder externa acondicionada a los 220 voltios con 50 ciclos del país, y un imponente teclado apodado "panera" color marrón grisáceo, que contenía una placa madre C64 "Revisión A". En ella descansaban la lógica electrónica: una unidad central de proceso MOS 6510 de 1 MHz (operando nominalmente a 985 kilociclos), su almacenamiento interno formado con 64 kilobytes de memoria RAM para el usuario y 20 kilobytes de memoria ROM de sistema. El chip de video MOS 6572 VIC-II sincronizado para la norma PAL-N, y el chip de sonido era el MOS 6581 "SID" que permitía 3 voces. Asimismo llevaba dos unidades para formar el chipset de control de entrada/salida, en forma de sendos MOS 6526 CIA.

El sistema había sido concebido originalmente por Jack Tramiel para la Commodores Bussiness Machines bajo el concepto Justicialista de "Computadora para las Masas", y se ensamblaba en el país integrando elementos locales (el plástico de teclado, las indicaciones de marca, la fuente de potencia, la caja y los manuales), en una necesaria política de sustitución de importaciones.
En nuestro país se modificó la electrónica original del sintonizador de radiofrecuencias NTSC por uno de normal PAL-N, lo que la hacía compatible con las TV autóctonas, conectándolo a través de la toma de antena de 75 Ohmnios o incluso a través de la toma de antena de 300 Ohmnios, como la que disponía mi TV Noblex Micro12 12NT343 blanco y negro, de 12 pulgadas.

Este tipo de computadoras debían programarse en lenguaje "BASIC V2", y ello hacía muy necesario contar con medios de almacenamiento de Masa: el datasette guardaba información en cintas casette, mientras que en mi caso personal contaba con una moderna unidad de disquetes magnéticos de 5 1/4" Commodore 1571.
Indudablemente, como complementos adicionales me fui haciendo con una impresora de línea Comodore MPS 803 y con un cartucho acelerador Kawa Turbo II para la C64, varios pares de joysticks, amén de montón de software siempre copiado y recuperado para el pueblo según marca el cánon Justicialista, en cuevas con mesa de mantel de hule, lugares como Red Point, Real Time, Danius Club.

Instalando el emulador VICE en Ubuntu
Si bien estas computadoras de aspecto básico fueron bien explotadas por toda una generación idealista que llamamos "el primer peronismo", pero con el tiempo cayeron en la obsolescencia en los primeros años de la década del noventa, y pasaron a convertirse en objetos de culto.

Afortunadamente, gracias al Software Libre GNU hoy podemos contar con poderosos emuladores de software que nos permiten simular en un equipo actual y miles de veces más poderoso, el comportamiento y funcionamiento de tales equipos y su software del ayer.

Os enseñaré a instalar en nuestro sistema operativo Ubuntu a VICE, el Emulador Versátil para Commodore. Se trata de una suite de emuladores pensados para simular toda la gama de la línea Commodore, y entre ellas especialmente la C64 y su sucesora, la C128. Para ello abrimos una Terminal con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:

cd ~
wget https://sourceforge.net/projects/vice-emu/files/releases/vice-3.1.tar.gz ;
tar xvzf vice-3.1.tar.gz ;
sudo apt-get  install build-essential libvte-dev libasound2-dev libgtk2.0-dev libgnome2-dev byacc bison flex ;

Nuestro GNU con Linux nos solicitará nuestra contraseña de usuario y comenzará la descarga de las librerías necesarias. Conforme haya finalizado, podremos ingresarle los comandos restantes para su compilación:

cd ~/vice-3.1/
./configure --enable-gnomeui
make

...opcionalmente, si nuestro sistema responde a una arquitectura de 64 bits,  debemos agregar:

cd /usr/local/lib
sudo ln -s ../lib64/vice .

...y finalmente ingresamos:

cd ~/vice-3.1/
sudo make install

Ahora podremos realizar los lanzadores para las aplicaciones. Los ejecutables se encontrarán en /usr/sbin. Para la Commodore 64 debemos lanzar /usr/sbin/x64. También tendremos otros emuladores en la suite, estos son:

x64   Emula la Commodore 64 y derivadas
x64sc Commodore 64 con precisión de ciclos.
xscpu64  Commodore 64 dotada con cartucho de expansión SuperCPU64 V2B.
xpet   Emula la serie Commodore PET 2001, 3032, 4032, 8032, 8096, 8296 and SuperPET (MicroMainFrame 9000)
xvic  Commodore VIC20.
x128  Emula la serie Commodore 128.
xcbm2  Emula las CBM-II, conjunto de máquinas derivadas de la 128 y pensadas para negocios
xcbm5x0
x64dtv   Emula la C64DTV revisiones 2 y 3
xplus4 Commodore Plus4

Como pueden observar en la lista de emuladores de la suite, se nos proveen dos emuladores de Commodore 64. El emulador rápido x64 presenta una emulación completa relativamente precisa del chip de video VIC-II, todos sus registros y modos de memoria. Sin embargo, su precisión alcanza al ciclo de refresco. El emulador x64sc en cambio ofrece una emulación completa en refresco de píxels del chip VIC-II, aunque con el inconveniente de requerir una máquina mucho más potente que el necesario para correr el emulador x64. Os sugiero comenzar probando el primer emulador, y en caso de poseer un sistema veloz, avanzar al segundo (tengamos en cuenta que nuestro procesador actual, se verá requerido para emular los pulsos de la señal PAL / NTSC llegado el caso).

Al dar inicio a x64, veremos la típica pantalla color azul de la Commodore 64 dentro de la ventana del emulador VICE, con el cursor parpadeante cuadrado.
 
En la barra inferior del emulador, se nos presenta el status de velocidad del emulador VICE y los cuadros por segundo que el mismo está reproduciendo, así como el estado de las unidades de disco y el datasette emulado, que operaremos más adelante.

Programando en la Commodore 64
Si bien la C64 arrancaba instantáneamente con sólo presionar su interruptor de encendido lateral, para operarla debíamos escribir los comandos en lenguaje BASIC, el llamado CBM DOS. Esto nos obligaba a programar incluso para operar el equipo en sus funciones más básicas, o de lo contrario recibir el inefable "?sintax error".

En la época se proveían libros y manuales de mayor o menor dificultad que especificaban los listados de instrucciones, el código fuente. Notemos que debemos pegar las órdenes en minúsculas, para evitar los clásicos símbolos del Commodore. Por ejemplo, pegando este programa, cargaremos en memoria el código del do-re-mi:

Aquí os dejo el código fuente en BASIC para que lo puedan pegar directamente a la pantalla del emulador y de esta forma cargar en el banco de memoria de la C64:

5 rem escala musical
7 for l=54272 to 54296:poke l,0:next
10 poke 54296,15
20 poke 54277,7:poke 54278,133
50 read a
55 if a=-1 then end
60 read b
80 poke 54273,a:poke 54272,b
85 poke 54276,17
90 for t=1 to 250:next:poke 54276,16
95 for t=1 to 50:next
100 goto 20
110 data 16,195,18,209,21,31,22,96
120 data 25,30,28,49,31,165,33,135
999 data -1

...y una vez cargado el listado en memoria, podremos correrlo (ejecutarlo) ingresando el comando:

run

Indudablemente, podremos buscar en la red los listados en formato prg (simplemente el código fuente del programa en BASIC), pero también los podemos encontrar en archivos PDF dentro de los libros más famosos de la era. Gracias al software libre, hoy podremos utilizar las funciones de un programa de reconocimiento óptico de caracteres (como el justicialista OCRFeeder) para pasar tales escaneados a texto y luego pegarlos al emulador. ¡Mas de uno hubiese entregado un huevo por esta característica!

El manual online del emulador es muy completo lo podremos encontrar aquí (en inglés). Naturalmente que si quisiéramos ver opciones mas avanzadas podremos consultar los manuales en castellano de la C64, así como un manual online (en inglés) (aplicable al emulador), así como documentación real del mismo.También podremos aprender sobre programación en BASIC en la Wiki no oficial del sistema.  
Cargando discos y cintas emulados a la C64
Como ya he mencionado, el emulador VICE también nos permite virtualizar los clásicos dispositivos de masa de la marca, el datasette y la diskettera. Gracias a ello podremos cargarle al emulador imágenes espejo de los de diskettes, (ficheros .d64), o imágenes de cintas casettes (ficheros .t64). También de cartuchos ROM (.c64).
Estos archivos los podremos descargar desde toda una cadena de sitios con software retro y parafernalia peronista para la C64, por ejemplo aquí. Podremos descargar ROMs de juegos aquí. También podremos descargar cintas para la C64 en formato tap, y herramientas para la C64.

En el caso de la diskettera, para montar una imagen de diskette d64 de forma sencilla podremos usar la combinación Alt+a e indicar la ruta hacia el fichero d64, tap o zip. Luego presionamos el botón Autoarranque. Esto emulará que insertamos el disco o cinta y la autoejecutamos. Por ejemplo, podríamos descargar el juego de Truco y autoarrancarlo con Alt+a.

Otra opción consiste en emular la inserción de un diskette para luego acceder a la unidad con el comando de BASIC correspondiente a la lectura de la diskettera. En el críptico de la C64, este comando de organización era:

load "$",8

Una vez "montada" la tabla de ficheros del diskette virtual a memoria de la C64, podríamos listar los ficheros del diskette con:

list

...el sistema debería devolvernos un listado del contenido del diskette virtual, entre ellos algunos ficheros con extensión .prg. Entonces podremos "subir" el cursor en la pantalla con las flechas del cursor, y modificar las líneas del programa.prg para que quede de la siguiente forma:

load "programa.prg",8,1

...al presionar Return (Enter) en dicha línea, se cargará el programa a memoria. Cuando la C64 nos devuelva READY, podremos ejecutar el programa con:

run

En el caso de los juegos clásicos, operaban con la máxima performance de los sprites del chip VIC-II, a 320x200 pixels con una paleta de 16 colores. Sin embargo, estos presentaban entrelazado de líneas y el clásico efecto empalizada de los televisores PAL/NTSC. Los mejores títulos presentaban incluso una pantalla de presentación mientras se cargaba el mismo. Esto era así pues era normal que el diskette tardara unos 15 segundos en cargar (un coarto de eso con el cartucho acelerador), y a partir de la cintas casette podían tardarse hasta varios minutos.
Podremos acelerar el proceso de carga desde la velocidad real de la C64 hasta la máxima velocidad que permita nuestro sistema, mediante la combinación Alt+w. De esta manera los programas se cargarán en memoria en menos de lo que tardamos en gritar al cielo un estruendoso "¡Viva Perón!". Era normal que durante la carga se presentaran "rayas" en los bordes de la pantalla.

Luego sólo nos queda disfrutar del programa.
 En el caso de cargar "cassettes" emulados, el procedimiento es mas sencillo, solamente presionamos Commodore+Run/Stop y cuando aparezca la señal "Press play on tape" hacemos clic sobre el ícono del datasette en la barra inferior del emulador, y presionamos Play, seguido de Alt+w para acelerar la carga (de lo contrario tardaría varios minutos). Una vez que el sistema nos devuelve Ready, ingresamos el comando run y presionamos return.
Con ello podremos demostrar nuestra habilidad en Boulder Dash, Commando Commando 86, Park Patrol, Tetris, Chessmaster 2000, Operation Wolf, Operation Thunderbolt (el de matar al árabe), Ferromodelismo, Last Ninja II, International Karate, G.I. Joe, King Speed, Outrun, Pit Stop 2, Scaletrix, Motocross, KANE (Aci), Afterburner, Thundercats, Teenage Mutant Ninja Turtles, F-18 Hornet, y muchos mas que ustedes me recordarán.

Periféricos de entrada y teclado
El VICE emula joysticks conectados al sistema Linux, pero si no tuviésemos ninguno podríamos hacer uso del teclado numérico (el botón 0 del teclado numérico hace las veces del botón del joystick). En tanto, existen dos formas de emular el teclado en VICE.

La manera por defecto es mapeado simbólico, donde toda combinación de teclas corresponde a la combinación de la máquina real: por ejemplo, si en un teclado inglés presionamos *, que está asociado a Mayúsculas+8 en un teclado en inglés, el en emulador aparecerá el * sin mayúsculas (ya que * no tiene mayusculas en el teclado de la C64). Del mismo modo, al presionar ' en el teclado inglés sin presionar mayúsculas provocará la combinación Mayúsculas+7 en la C64 emulada. De esta manera se hace obvio qué teclas deben ser presionadas para obtener todos los símbolos.

Sin embargo, existe un problema con el mapeado simbólico: algunas teclas realmente necesitan ser mapeadas específicamente a pesar de todo. El ejemplo mas importante en la C64 es que la tecla CONTROL está mapeada como Tab y que la tecla Commodore está mapeada como Ctrl derecha. La tecla RUN/STOP está mapeada como la tecla Esc en el teclado de PC.

La segunda forma es el mapeado posicional, que consiste en mapear toda la tecla del teclado C64 con una tecla que tenga la misma posición en el teclado de PC. De esta no existen variaciones con las Mayúsculas (con la excepción de F2, F4, y F8, que requieren la tecla Shift en los teclados Commodore. De esta forma el teclado es más cómodo de usar en esos programas (como los juegos) que requieren que las teclas estén en las posiciones correctas.

CUIDADO: A diferencia de la C64 real, el emulador VICE "presiona" la tecla Mayúsculas junto con la tecla a cambiar, de modo que la presión de Shift debe ser forzada. En la mayoría de los casos estos debería funcionar correctamente, pero como algunas rutinas de teclado son algo complejas, tienden a no reconocer la tecla Mayúsculas por esta razón. Por ejemplo, F6 (que en la C64 real se obtiene con Mayúsculas+F5) podría ser reconocida como F5. En tal caso, debemos usar manualmente la tecla Mayúsculas (por ejemplo, tipear Shift+F5 en lugar de apretar F6 en el teclado de PC). La tecla RESTORE está mapeada como AvPág (o RePág) por defecto.


6 comentarios:

  1. ¡Qué gran aporte compañero! Un pueblo esclarecido, es un pueblo libre. Permítanos sugerirle a la radioescucha de su espacio que utilice la nuevas técnicas aprendidas para ejecutar nuestras obras inspiradas en las más profundas tradiciones nacionales. De entre las cuales destaca sin lugar a dudas el "Cancionero Argentino vol.1" baluarte de soberanía y adaptado para correr sin contratiempos en las commodores nacionales Drean.
    https://www.youtube.com/watch?v=dzeQ2irb04k
    Abrazo fraterno desde el conurbano profundo, Pungas de Villa Martelli

    ResponderEliminar
  2. Estimado Pungas de Villa Martelli:

    La Lucha por la Liberación es una que nunca se pierde, pero ha de darse en todo tiempo y en todo lugar.

    Enhorabuena por su aplicación del chip SID con sus tres voces y sus arpegiados obligados. Sin embargo, debería contar ya con una versión 8bits de la Marcha de los Muchachos peronistas en su cancionero. Conminado de tal proceder, hago llegar a ustedes un abrazo muy afectuoso! e incorporaremos el video en el artículo designado a reproducir música para el chip SID en Ubuntu que ya he realizado y publicado hace un tiempo.

    Atte.

    Juan Perón

    ResponderEliminar
  3. ¡Por supuesto compañero! La marcha de nuestro General está entre las primeras obras de nuestro repertorio. Hacia el final de nuestro disco musical primigenio intitulado "¡Arriba las manos!" (para vitorear al General y a la bienamada Evita) podrá deleitarse con nuestro homenaje, por supuesto humilde y siempre indigno de la ilustre figura de nuestro guía máximo.
    https://youtu.be/ls-WDuvTTaQ?t=25m19s

    ResponderEliminar
  4. Mi General!! Poseo una auténtica diskettera VIC-1541, ¿es posible conectarla a la PC y usarla con el emulador?

    ResponderEliminar
  5. Estimado Unknown:

    Es posible conectar una unidad de diskettes real como la VIC-1541 y VIC-1541 II a un host Linux con puerto de impresora paralelo, utilizando el cable XA1541 o XM1541, si lo compila con la librería OpenCBM (https://sta.c64.org/linuxprg.html#cbm4linux).

    Este cable es difícil de conseguir armado, pero muy fácil de armar ya que consta de fichas normalizadas Centronic paralelo y DIN. https://sta.c64.org/pccbmgenser.jpg El plano de armado lo encontrará aquí. https://sta.c64.org/xm1541c.html También encontrará documentación sobre el uso del mismo, y programas para convertir los diskettes a archivos TAP o D64.

    Atte.
    Juan Perón

    ResponderEliminar