Emuladores de Jupiter Ace bajo Debian GNU/Linux

Descripción del contenido de esta página

Pruebas con emuladores de Jupiter Ace bajo Debian GNU/Linux.

La Jupiter Ace es una de las computadoras que me hubiera gustado programar desde que leí algo sobre ella y que gracias a los emuladores pude por fin programar, veintitantos años después.

¿Qué tiene de especial la pequeña y olvidada Jupiter Ace, una microcomputadora que sólo tuvo una vida comercial de apenas dos años, entre 1982 y 1984 y de la que apenas se vendieron seis mil unidades?

Sus diseñadores, Richard Altwasser y Steven Vickers, habían trabajado en Sinclair Research como parte importante del equipo que creó la ZX81 y la ZX Spectrum. En 1982 decidieron formar su propia empresa para hacer algo más interesante y arriesgado. Y lo lograron: Su pequeña computadora, de arquitectura muy similar a la Sinclair ZX81, llevaba incorporado el lenguaje Forth en lugar del omnipresente BASIC. Forth es más adecuado que BASIC para una microcomputadora con pocos recursos, como las de comienzos de los 1980, por varios motivos: es más compacto, es más rápido, es más productivo y enseña mejores técnicas de programación(1).

El fracaso comercial de la Jupiter Ace se debió a varias causas: carcasa frágil, imagen en blanco y negro, gráficos de poca resolución, poca memoria y... el lenguaje Forth, que a pesar de sus ventajas resultaba menos familiar que BASIC para el usuario medio. La Jupiter Ace no pudo competir con las otras microcomputadoras domésticas de su tiempo, especialmente con la estupenda ZX Spectrum, que supuso toda una revolución y reinó casi sin rival durante más de una década. Algunas limitaciones del diseño original de la Jupiter Ace se intentaron solucionar al poco tiempo en los nuevos modelos Jupiter Ace 16+ y Jupiter Ace 4000, pero ya era demasiado tarde.

Los pocos modelos de Jupiter Ace que aún se conservan son piezas de coleccionista. Afortunadamente, gracias a los emuladores es posible usar y programar una computadora sin tenerla: un programa emulador permite que una computadora funcione como si fuera otra diferente. Los emuladores son una de las facetas más fascinantes de la programación(2).

Alguna vez había probado emuladores de Jupiter Ace, pero siempre bajo sistemas Windows instalados temporalmente para hacer pruebas. Ahora quería intentarlo bajo mi Debian GNU/Linux (versión 5.0 «Lenny»).

A continuación relato mi experiencia con emuladores de Jupiter Ace bajo Debian en mayo y junio de 2009. Para hacer funcionar bajo Debian los emuladores programados para Windows utilicé el programa Wine.

Una nota sobre Wine: por algún motivo no funciona bien arrancado en una sesión de GNU screen bajo X-Windows; tuve que hacerlo desde una terminal xterm abierta a propósito.

Emulador ZZ Ace 09

Este emulador está escrito en Java por Troels Noergaard, autor también de otro similar para ZX Spectrum llamado ZZ Spectrum; es de 2005. Se puede probar ZZ Ace 09 en el sitio Jupiter Ace Resource Site.

Cuando visité la página Firefox me dijo, sabiamente, que sin intérprete de Java él no se atrevía a interpretar un programa en Java. Hacía falta instalar una máquina virtual de Java y el correspondiente conector para el navegador:


apt-get install sun-java6-jre sun-java6-plugin

Para mi sorpresa la broma ocuparía 100 megaoctetos de los 200 y pico que tenía libres en la tarjeta interna del Asus Eee. Seguí adelante sólo para poder probar el emulador; después desinstalaría el mostruo:

Se instalarán los siguientes paquetes extras:
  odbcinst1debian1 sun-java6-bin unixodbc
Paquetes sugeridos:
  binfmt-support sun-java6-fonts ttf-baekmuk ttf-unfonts ttf-unfonts-core ttf-kochi-gothic ttf-sazanami-gothic ttf-kochi-mincho ttf-sazanami-mincho ttf-arphic-uming
  libmyodbc odbc-postgresql libct1
Se instalarán los siguientes paquetes NUEVOS:
  odbcinst1debian1 sun-java6-bin sun-java6-jre sun-java6-plugin unixodbc
0 actualizados, 5 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 35,0MB de archivos.
Se utilizarán 100MB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s

Funcionó. El emulador se ejecutó en la página. Un formulario permitía elegir entre la máquina original, o bien con ampliación de memoria, o bien con algún juego cargado. Más de una vez tuve arrancar htop en una consola para matar alguno de los veintitantos procesos del insaciable mostruo Java, que se había quedado muy pero que muy ocupado, y recargar la página para volver a empezar.

Escribir un emulador en Java para poder hacerlo funcionar en línea es un trabajo de programación admirable, pero sin poder ejecutarlo de forma local no tiene mucha utilidad para trabajar con él. En principio es posible hacerlo funcionar fuera del navegador, pero no está disponible para su descarga.

Tras probar ZZ Ace 09 expulsé al enorme y voraz mostruo de mi máquina:


apt-get purge sun-java6-jre sun-java6-plugin

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Los siguientes paquetes se ELIMINARÁN:
  sun-java6-bin* sun-java6-jre* sun-java6-plugin*
0 actualizados, 0 se instalarán, 3 para eliminar y 0 no actualizados.
Se liberarán 99,5MB después de esta operación.
¿Desea continuar [S/n]? 

Por supuesto que deseo continuar.

Emulador xace

Hasta donde yo sé xace es el único emulador exclusivo de Jupiter Ace programado para X-Windows. El autor, Edward Patel, asegura que el programa ha sido probado en sistemas SGI, FreeBSD, GNU/Linux y SunOS. La última versión disponible, de febrero de 1999, es la 0.4.

xace está escrito en C y hay que compilarlo. No soy nada ducho en los complejos detallitos de las compilaciones de C, lenguaje que jamás me cayó simpático, tan poco como Java, y que apenas he practicado. Por fortuna el archivo incluye un fichero con instrucciones.

Como las instrucciones dicen que hace falta el programa xmkmf, del que no había oído hablar antes, hice una búsqueda con apt-cache search xmkmf y descubrí que debía instalar el paquete xutils-dev, del cual xmkmf forma parte:


apt-get install xutils-dev

Después hay que ir al directorio donde hayamos descomprimido el archivo xace-0.4.tar.gz y ejecutar xmkmf; en mi caso, así:


cd ~/ext/comp/jupiter_ace/emuladores/xace/xace-0.4
xmkmf

La salida que me mostró el programa fue:

mv -f Makefile Makefile.bak
imake -DUseInstalled -I/usr/lib/X11/config

A continuación debemos ordenar la compilación con el comando make. Tras hacerlo obtuve esto tan interesante:

rm -f xace
gcc -m32 -o xace -g -O2 -fno-strict-aliasing       xmain.o z80.o    -lX11 -lXext
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [xace] Error 1

Busqué en la red y di con la solución. Faltaba instalar un paquete con librerías de desarrollo para X-Windows:


apt-get install libx11-dev

Tras intentar otra vez la compilación con make obtuve un error diferente:

rm -f xace
gcc -m32 -o xace -g -O2 -fno-strict-aliasing       xmain.o z80.o    -lX11 -lXext   
/usr/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status
make: *** [xace] Error 1

Hacían falta más librerías. Una búsqueda con apt-cache search xext me dio la pista. Parecía que se trataba del paquete libext-dev. Lo instalé:


apt-get install libxext-dev

Volví a probar con make y la compilación funcionó sin errores por fin: el ejecutable xace había sido creado. Pero tras ponerlo en marcha sólo obtuve una ventana negra en el centro de la pantalla y el siguiente mensaje en la consola, aparentemente normal salvo por la última línea:

xace: Jupiter ACE emulator v0.4 (by Edward Patel)
Keys:
        ESC - Quit xace
        F1  - Delete Line
        F4  - Inverse Video
        F9  - Graphics
        Ctl - Break
        F12 - Reset
Line length=1024; expect strange results!

Pero ninguna combinación de teclas funcionaba con la ventana negra en primer plano. Corté la ejecución pulsando Ctrl-C en la consola.

En las instrucciones de compilación de xace disponibles en Jupiter Ace Resource Site se mencionaba un parche para el código fuente, pero su enlace estaba roto. Escribí a los gestores del sitio y amablemente lo corrigieron.

Descargué el parche, lo coloqué en el directorio del código fuente y lo instalé con el comando patch xmain.c xace-0.4.patch. patching file xmain.c fue el sencillo mensaje resultante; todo iba bien. Pero al ordenar la compilación con make obtuve otro error:

 
gcc -m32 -g -O2 -fno-strict-aliasing         -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L                               -D_POSIX_SOURCE -D_XOPEN_SOURCE                  -D_BSD_SOURCE -D_SVID_SOURCE                                 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64                                                            -DFUNCPROTO=15 -DNARROWPROTO    -DSCALE=1 -DWHITE_ON_BLACK   -c -o xmain.o xmain.c
xmain.c:36:27: error: X11/Intrinsic.h: No existe el fichero o el directorio
make: *** [xmain.o] Error 1

¿Así que esta vez no sabemos dónde está Intrinsic.h? Yo tampoco. Con ayuda de apt-get search intrinsic deduje que el paquete que faltaba ahora era libxt-dev. Lo instalé:


apt-get install libxt-dev

Después compilé una vez más con make. No salió ningún error... Puse en marcha el programa con ./xace y... ¡funcionó! La misma ventanita negra en el centro de la pantalla, la pantalla del Jupiter Ace, mostraba ahora un cuadradito blanco en la esquina inferior izquierda: el cursor de entrada. Bastaba teclear vlist para ver la lista de todas las palabras del Forth del Jupiter Ace. Perfecto.

Al contrario que otros emuladores, xace me aceptaba todas las teclas de mi teclado que para él eran válidas, es decir: mi disposición de teclado Dvorak funcionaba perfectamente para todos los caracteres que formaban parte del repertorio del Jupiter Ace. Esto era estupendo. Es muy frustante usar emuladores que llevan codificada internamente la disposición de teclado, en lugar de usar la del sistema operativo anfitrión. La sensación de estar escribiendo con un teclado Dvorak en una Jupiter Ace me dio ganas de empezar de inmediato a escribir algún programa en Forth para esta maquinita tan especial...

Las características que más me gustan de xace son:

Todo ello permite trabajar con la Jupiter Ace y programarla como si estuviéramos usando la máquina real.

Pero algo importante le falta a xace: no lee ni escribe «congelados» (snapshots), ni ficheros de cinta. Esto impide cargar programas ajenos, que casi siempre se distribuyen en dichos formatos, o grabar nuestros programas en ellos.

Estoy trabajando en la versión 0.5 de xace para dotarla de algunas capacidades nuevas.

Emulador MESS

MESS es un emulador múltiple. En el manual de MESS puede leerse que el programa emula más de 250 sistemas de los últimos 50 años. Entre ellos está la computadora Jupiter Ace.

Descargué la última versión, la 0.131b, descomprimí el archivo e intenté arrancar el ejecutable con Wine:


wine mess.exe &

Obtuve una bonita pantallita que decía:

No systems found. Please check the rompath specified in the mess.ini file.

If this is your first time using MESS, please see the config.txt file in the docs directory for information on configuring MESS.

Todo estaría muy bien si los ficheros mess.ini y config.txt estuvieran en el archivo zip, pero no estaban. De modo que consulté la página de MESS en busca de la información. La primera pista que encontré me llevó a solicitar ayuda:


wine mess.exe -help &

Y este fue el resultado:

MESS v0.131 (May  3 2009)
Multi Emulator Super System - Copyright (C) 1997-2009 by the MESS Team
MESS is based on MAME Source code
Copyright (C) 1997-2008 by Nicola Salmoria and the MAME Team

MESS is an emulator: it reproduces, more or less faithfully, the behaviour of
several computer and console systems. But hardware is useless without software
so a file dump of the ROM, cartridges, discs, and cassettes which run on that
hardware is required. Such files, like any other commercial software, are
copyrighted material and it is therefore illegal to use them if you don't own
the original media from which the files are derived. Needless to say, these
files are not distributed together with MESS. Distribution of MESS together
with these files is a violation of copyright law and should be promptly
reported to the authors so that appropriate legal action can be taken.

Usage:  MESS <system> <device> <software> <options>

        MESS -showusage    for a brief list of options
        MESS -showconfig   for a list of configuration options
        MESS -listdevices  for a full list of supported devices
        MESS -createconfig to create a mess.ini

See mess.txt for help, readme.txt for options.

Lo cual también estaría muy bien si los citados ficheros mess.txt y readme.txt estuvieran incluidos, pero no era así.

Pero la ayuda sí sirvió de algo: primero decía que con el emulador no se incluía ninguna ROM de los sistemas emulados; y despues listaba cuatro parámetros de ayuda adicionales. Los parámetros showusage y showconfig mostraban a su vez listas de parámetros y opciones de configuración respectivamente. Pero lo primero que había que hacer era usar el parámetro createconfig para crear un fichero de configuración:


wine mess.exe -createconfig

Perfecto. Ya teníamos un mess.ini. Como había que proporcionarle al emulador los ficheros de ROM que necesitaba, creé un directorio roms (tal como está indicado en mess.ini, aunque es posible cambiarlo) y en él creé enlaces simbólicos a algunos ficheros de ROM de varias computadoras, como ZX81, ZX Spectrum y Jupiter Ace. Probé suerte:


wine mess.exe &

Apareció un menú que sólo mostraba la ZX81, pero cuando la elegí apareció un mensaje de error que decía que al «juego» le faltaba algún fichero ROM o CHD, y que eligiera otro.

Sospeché que el motivo de que sólo apareciera la ZX81 era el nombre de los ficheros en el directorio roms. El emulador tenía un directorio hash con un archivo por cada sistema emulado, todos con la extensión hsi. Busqué en él los correspondientes a las tres computadoras cuyos ficheros de ROM había usado: efectivamente, el nombre del de la ZX81 coincidía pero los de las otras dos no. La solución parecía evidente: renombré los enlaces de la Spectrum y de la Jupiter Ace como spectrum.rom y jupiter.rom respectivamente.

Probé de nuevo:


wine mess.exe &

Mi intuición no me había engañado: Ahora el menú mostraba las tres computadoras. Sin embargo al elegir cualquiera de ellas el mensaje de error era el mismo que antes:

The selected game is missing one or more required ROM or CHD images. Please select a different game.

Ya me estaba dejando de hacer gracia que el emulador llamara «juego» a la arquitectura de una computadora. Sin muchas esperanzas, reemplacé los enlaces simbólicos por copias de los ficheros de ROM; no sirvió de nada.

Hice algunas búsquedas en la red pero no saqué nada en claro: había quien aseguraba que bastaba con que los ficheros de ROM tuvieran el nombre adecuado, y que aunque el mensaje de error saliera el emulador arrancaba después (no era así en mi caso); otros sospechaban que el emulador hacía alguna suma de comprobación con el fichero de ROM y que tras fallar mostraba ese error, pero no parecía haber forma de desactivar esa comprobación.

En el manual de MESS sí encontré algunas pistas, como que los ficheros del directorio roms debían estar comprimidos con el formato ZIP (lo hice así pero nada cambió); o que los ficheros del directorio hash contenían, para cada sistema emulado, información sobre las sumas de control de los ficheros, en formato XML (así es, pero en ellos no estaba la ROM correspondiente, sólo aplicaciones y juegos del sistema).

De modo que MESS quedó en espera de mejor inspiración... Hasta que casualmente descubrí que entre los paquetes de Debian había una versión de MESS:

Emulador xmess

xmess es la versión de MESS para X-Windows. Para instalarlo en Debian basta el siguiente comando:


apt-get install xmess-x

Que en mi caso mostró la siguiente información antes de proceder:

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
  xmess-common
Paquetes sugeridos:
  xmame-common
Se instalarán los siguientes paquetes NUEVOS:
  xmess-common xmess-x
0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 8358kB de archivos.
Se utilizarán 33,3MB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? 

Pero la documentación era casi inexistente. De hecho man xmess mostraba el manual de MAME, el proyecto hermano en el que está basado. Tras indagar por la red descubrí que podía crear un fichero de configuración con xmess -sc xmessrc y luego moverlo al directorio /.xmess.

El problema era dónde colocar los ficheros de ROM. Deduje que podía ser en /usr/share/games/xmess/ o en /usr/share/games/xmess/software/ o en /usr/share/games/xmess/bios/ pero ningua opción dio resultado. Además el comando xmess jupiter daba el siguiente mensaje de error:

GLERROR: cannot access OpenGL library libGL.so
GLERROR: dlerror() returns [libGL.so: cannot open shared object file: No such file or directory]
Use of OpenGL mode disabled
XDGAOpenFramebuffer failed
Use of DGA-modes is disabled
info: trying to parse: /etc/xmame/xmessrc
error: unknown option sysinfo_file, on line 11 of file: /etc/xmame/xmessrc
   ignoring line
error: unknown option messinfo_file, on line 12 of file: /etc/xmame/xmessrc
   ignoring line
error: unknown option fuzzycmp, on line 30 of file: /etc/xmame/xmessrc
   ignoring line
error: unknown option skip_disclaimer, on line 32 of file: /etc/xmame/xmessrc
   ignoring line
info: trying to parse: /home/marcos/.xmess/xmessrc
error: geometry requires an argument, on line 52 of file: /home/marcos/.xmess/xmessrc
   ignoring line
info: trying to parse: /etc/xmame/xmess-x11rc
info: trying to parse: /home/marcos/.xmess/xmess-x11rc
info: trying to parse: /etc/xmame/rc/jupiterrc
info: trying to parse: /home/marcos/.xmess/rc/jupiterrc
xmame: could not connect to socket
xmame: No such file or directory
LIRC disabled
loading rom 0: jupiter.lo                      
loading rom 1: jupiter.hi                      
done
jupiter.lo   NOT FOUND
jupiter.hi   NOT FOUND
ERROR: required files are missing, the game cannot be run.

¿jupiter.lo y jupiter.hi? En la página de MESS sobre Jupiter Ace encontré la pista que necesitaba: el emulador esperaba la ROM de la Jupiter Ace en dos ficheros de 4 KiB en lugar de en uno de 8 KiB. Pues no hay problema; del fichero original hice dos mitades con el comando split y las renombré como correspondía:


split -b 4096 jupiter.rom
mv xaa jupiter.lo
mv xab jupiter.hi

Pero no sirvió de nada. El emulador no se daba por enterado: no encontraba jupiter.lo y jupiter.hi en ninguno de los tres directorios. ¿Podría ser que la suma de control de los ficheros no diera el resultado esperado por el emulador? Si fuera así el mensaje de error debería cambiar, aunque nunca se sabe.

Estaba a punto de rendirme. Al fin y al cabo, la emulación de Jupiter Ace con MESS no incluye grabación del estado de la máquina. Esto quiere decir que no serviría para trabajar con ella, sólo para jugar; y yo ya había «jugado» bastante intentando poner MESS en marcha.

Pero entre los resultados de mis búsquedas en la red había una página que ofrecía un archivo con muchos ficheros de BIOS para el emulador MESS. En el archivo faltaba el fichero de la Jupiter Ace pero copié algunos otros al directorio /usr/share/games/xmess/bios/ y funcionaron. Por ejemplo, tras copiar el fichero spectrum.zip podía arrancar el emulador de ZX Spectrum con el comando xmess spectrum.

Entonces tuve la idea: cada sistema venía comprimido en un archivo ZIP que contenía uno o varios ficheros de ROM... Había que probarlo: Comprimí ambas mitades de la ROM de la Jupiter Ace en un archivo ZIP:


zip jupiter.zip jupiter.lo jupiter.hi

Y después lo intenté una vez más: xmess jupiter. ¡Arrancó! La negra y bonita pantallita de la Jupiter Ace ocupó un cuadrado en el centro de la pantalla. Misión cumplida. Desgraciadamente, como he dicho antes, sin posibilidad de grabación, una Jupiter Ace así sólo servía para juguetear.

Por si alguien lo necesita, dejo disponible el archivo que preparé con la

ROM de Jupiter Ace para MESS (6.93 KiB). Aunque al día siguiente me di cuenta de que un fichero igual ya existía en la página de descarga de ficheros de ROM de Jupiter Ace en Jupiter Ace Resource Site... Por una parte pensé ¡Por qué no se me ocurrió mirarla antes! y por otra me gustó tener la sensación de haber reinventado la rueda una vez más.

Emulador EightyOne

EightyOne emula varias computadoras de los años 1980, entre ellas la Jupiter Ace. Probé la versión 1.0a de mayo de 2008, la última disponible. El primer intento de arranque con Wine no tuvo éxito:

Unhandled page fault on read access to...

Buscando en la red encontré una pista. Alguien tenía el mismo problema con Wine al intentar arrancar cierto juego para Windows y la receta que le dieron fue esta:

Solution: disable Shader Pixel in Wine configuration

Lo hice así: deshabilité la opción shader pixel en la configuración de Wine y eso solucionó el problema, pero no todos los problemas: El programa arrancaba en modo de emulación de una ZX81 con 16 KiB, pero no había manera de hacer uso de él: ni el teclado ni el ratón surtían efecto. Además, la pantalla de la máquina emulada mostraba, en lugar de un color uniforme, una fina cuadrícula de líneas grisáceas algo sospechosa.

Wine mostraba este mensaje:

fixme:richedit:RichEditWndProc_common WM_STYLECHANGING: stub
fixme:richedit:RichEditWndProc_common WM_STYLECHANGED: stub
fixme:mountmgr:harddisk_ioctl unsupported ioctl 74004

Pero no estoy seguro de que que tenga que ver con el problema.

Emulador MTM

MTM es un emulador múltiple para Windows 95; ofrece emulación de ZX80, ZX81, ocho modelos de ZX Spectrum, cinco modelos de Amstrad CPC, Enterprise y Jupiter Ace. La última versión es la 1.30b, del 16 de junio de 1998. Dispone de un instalador típico de Windows. Tanto el instalador como el propio programa funcionaron sin problemas con Wine.

En el caso del Jupiter Ace, MTM permite leer «congelados» (snapshots) en formato ACE, y leer ficheros de cinta en formato TAP, TZX o VOC. Pero no permite grabar, lo que impide cualquier uso no recreativo del emulador.

Por otra parte, el teclado corresponde al del sistema anfitrión pero sólo para los caracteres alfanuméricos: al resto hay que acceder en la posición que tienen en el propio teclado del Jupiter Ace, lo que hace la escritura muy incómoda.

Emulador Vace

Vace es la versión para Windows de xace, escrita por el mismo programador. Para hacerlo funcionar bajo GNU/Linux hay que usar Wine:


wine Vace.exe

Pero no funcionó. El mensaje de error era muy claro:

err:module:import_dll Library MFC42.DLL (which is needed by L"E:\­\ext\comp\jupiter_ace\emuladores\vace\Vace.exe") not found

Tras echar un vistazo por el ciberespacio en busca de esa librería de Windows hallé un sitio llamado File Searching muy útil para encontrar ficheros en servidores FTP. Fue fácil. Tras descargar el fichero MFC42.DLL en el directorio de Vace, el emulador arrancó a la primera con Wine:


wine Vace.exe

Lógicamente, funcionando bajo Wine era mucho más lento que su hermano xace, que funcionaba de forma nativa en X-Windows; escribir se hacía penoso. Además, al contrario que xace, no tenía ninguna facilidad añadida; bueno, en realidad tenía una: una opción de menú para reiniciar la máquina. Por lo demás sus opciones para grabar y leer ficheros son las mismas.

Emulador Ace 32

Ace 32 es un emulador de Jupiter Ace para MS-DOS, y al parecer el primer emulador que se programó para esta máquina. Su autor es Paul Robson. La última versión disponible es la 1.4, del 3 de noviembre de 1997.

El paquete no trae documentación pero en Jupiter Ace Resource Site hay una página con instrucciones de manejo de Ace 32.

Para hacer funcionar Ace 32 bajo Debian hay que usar a su vez un emulador de DOS para GNU/Linux, como DOSBox y DOSEMU, o bien una máquina virtual como QEMU.

Ace 32 en DOSEMU

DOSEMU respetó la distribución de teclado Dvorak de Debian, lo que me permitió trabajar cómodamente; pude arrancar Ace 32, pero algo no funcionó bien: El emulador de Jupiter Ace se iniciaba con un monitor de código máquina que lleva incorporado y no encontré la manera de salir de él... Las teclas de función no respondían correctamente.

Ace 32 en DOSBox

DOSBox se me hizo casi inmanejable porque (comprensiblemente) no respetaba la distribución de teclado Dvorak; tuve que apañármelas con la decimonónica QWERTY, además en su versión original useña, lo que me obligaba a escribir lentamente.

La documentación decía que para obtener en GNU/Linux el fichero de configuración de DOSbox hay que escribir el comando config -writeconf dosbox.conf. Sin embargo, no logré que el emulador reconociera, tras arrancar de nuevo, los cambios que introduje en dicho fichero (distribución de teclado QWERTY castellana, a falta de Dvorak, y el montaje de las unidades virtuales). A pesar de ello logré arrancar Ace 32 creando un enlace simbólico de ace32.exe a mi directorio /bin y montando éste como disco C en DOSbox con el comando mount c ~/bin/. Por desgracia el resultado fue exactamente igual que con DOSEMU.

Ace 32 en QEMU

Lo logré. Instalé QEMU y FreeDOS y dentro de la nueva «máquina» puse en marcha Ace 32, que funcionó perfectamente.

La opción que más me interesaba probar de Ace 32 era la de alimentar su entrada con un fichero de texto: Al pulsar F9 el emulador lee el fichero spool.txt y usa su contenido como si lo estuviora tecleando el usuario. Esto permite escribir programas para la Jupiter Ace con un editor de texto externo.

Sin embargo comprobé que el programa no reconoce los finales de línea de Unix. Era de esperar en un programa de DOS. El caso es que el texto del programa fue apareciendo en la pantalla de la Jupiter Ace hasta que su búfer de entrada se llenó, como si se tratara de una sola línea de texto, y lógicamente ahí se quedó esperando. Además, aunque es posible montar en Debian el fichero de imagen que es utilizado por QEMU para contener FreeDOS, y así grabar en él ficheros de Debian, no me fue posible hacerlo con mi usuario normal, sólo como administrador. Eso y la necesidad de grabar cada fichero en cuestión con el nombre spool.txt no hacían muy cómoda la operación.

Resultaba demasiado complicado usar tantas «capas» (máquina virtual, fichero de imagen que hay que montar como administrador, ficheros de programas que hay que pasar a formato de DOS y renombrar).

Yo ya estaba desarrollando una versión 0.5 de xace que tenía activada esa misma función de leer como entrada un fichero de texto a elegir del sistema anfitrión, con lo cual esa opción no era tan importante. La ventaja de Ace 32 es que me permite grabar ficheros con el formato ACE, algo que xace no puede hacer.

Información sobre la Jupiter Ace

Como suplemento al análisis de los emuladores, he aquí unos enlaces para quien sienta curiosidad por conocer algo más sobre la computadora Jupiter Ace:

Notas

  1. Quien quiera conocer algo sobre el lenguaje de programación Forth puede encontrar bibliografía en mi artículo Libros sobre Forth.
  2. Para iniciarse en la emulación recomiendo los siguientes artículos divulgativos de Santiago Romero en MagazineZX: Introducción a la emulación (I) e Introducción a la emulación (II).

Glosario

BASIC
Beginner's All-Purpose Symbolic Instruction Code (código polivalente de instrucciones simbólicas para principiantes)
BIOS
Basic Input/Output System (sistema básico de entrada y salida)
DOS
Disk Operating System (sistema operativo de disco)
FTP
File Transfer Protocol (protocolo de transferencia de ficheros)
GNU
GNU's Not Unix (GNU no es Unix)
KiB
kibiocteto (1024 octetos)
MAME
Multiple Arcade Machine Emulator
MESS
Multi Emulator Super System
MTM
Multi-platform multi-machine emulator
ROM
Read Only Memory (memoria inalterable)
Wine
Wine Is Not an Emulator (Wine no es un emulador)
XML
eXtensible Markup Language (lenguaje extensible de marcación)