FS-UAE: Emulador de Amiga

Esta vez no hablaré de una videoconsola, sino de un ordenador personal: el Amiga 500, de Commodore. Este equipo fue muy popular a finales de los años 80, y merece mención en este blog (entre muchas otras cosas) por el catálogo tan extenso de videojuegos que tiene.

Commodore Amiga 500
Amiga 500

Desafortunadamente es un sistema que nunca he podido probar físicamente. Pero bendita sea la emulación que nos hace descubrir grandes juegos ya clásicos o revivirlos para los que sientan nostalgia o ya no tengan el cacharro original.

Dejémonos de parrafadas y vamos al tema.

Ingredientes

  • Emulador FS-UAE.
  • ROM Kickstart.
  • ¡Juegos!
  • Pelo en el pecho.

No se me asusten. Esto último es porque vamos a usar un poco el terminal, cosas muy sencillas, pero que igual espanta a los que sufran de ventanitis.

FS-UAE

El mundo de la emulación de Commodore Amiga tiene un padre: UAE. En él está basado el más famoso, WinUAE, del cual derivaron otros como E-UAE, PUAE y el que nos ocupa, FS-UAE.

FS-UAE emula estos modelos de Amiga:

  • Amiga 500
  • Amiga 500+
  • Amiga 600
  • Amiga 1200
  • Amiga 1000
  • Amiga 3000
  • Amiga 4000

Una de las características importantes que tiene este emulador es que es multiplataforma. Tenemos versiones para los siguientes sistemas:

  • Windows.
  • Mac OS X.
  • Linux.
  • FreeBSD.
  • OpenBSD.

En este artículo nos centraremos en la de Linux, versión 2.5.23dev 2.6.2, la actual en el momento de escribir estas líneas.

Algo que hay que tener muy en cuenta es que se trata de un emulador de un ordenador y la forma de operar no es tan simple como elegir un juego y darle al play (como sucede en las videoconsolas). No quiero asustar a nadie, no es complicado, sencillamente hay que entender cómo se trabajaba con estos ordenadores y hacer lo mismo desde el FS-UAE virtualmente. De forma esquemática, el uso del Amiga 500 consistía en:

  1. Encenderlo.
  2. Meter el disquette con el juego / programa.
  3. Disfrutar.
  4. Apagar.

Difícil, ¿verdad? En el resto del artículo veremos cómo ir haciendo esas operaciones a través del emulador.

Kickstart

Amiga cuenta con una serie de ROMs donde se almacena el código necesario para hacerlo funcionar. Este firmware de arranque se llama Kickstart y su propósito es inicializar el hardware y los componentes principales del sistema operativo (AmigaOS), y tratar de arrancar desde algún medio, por ejemplo, un disquete.

Este componente se puede conseguir de las máquinas originales o comprarlo desde Amiga forever, que cuenta con paquetes legales de emulación de Amiga desde unos 10 €.

Afortunadamente, FS-UAE incluye una alternativa fruto del proyecto AROS (un sistema operativo compatible con AmigaOS 3.1), que puede ser suficiente para la mayoría de los juegos. De todos modos, no provee el mismo grado de compatibilidad que las ROMs originales, así que si buscas la «perfección», hazte con el Kickstart versión 1.3 o 3.1. Venga, va, os dejo el enlace para descargaros uno y otro.

Juegos en ADF

El objetivo de este artículo es poder jugar a esos juegos de Amiga, así que ¿dónde están los juegos?

FS-UAE usa archivos de imagen hechos a partir de los disquetes originales de Amiga. Estos archivos tienen la extensión ADF (Amiga Disk File) y es el formato de fichero que Amiga utilizaba para almacenar una copia exacta de los discos. Haciendo una analogía con los CD/DVDs, sería como los archivos .iso

Como imagen que es, se puede extraer su contenido ya sea montando el disquete en un sistema operativo de Amiga (o compatible) o usando herramientas como unadf. Pero esto ahora no nos interesa ;-)

También es posible encontrarse con ficheros IPF (Interchangeable Preservation Format), que pretende preservar los discos originales de la forma más precisa posible. Es un formato abierto y también está soportado por FS-UAE.

Configuración del emulador

Si ejecutamos el emulador sin hacer nada más, obtendremos la siguiente pantalla:

AROS

Lo que vemos en esa imagen es la ROM que decíamos que se necesita para arrancar el sistema. Se queda a la espera de leer algo desde lo que poder arrancar, así que necesitamos meter un disquete con un juego, programa, etc.

Disquetera Amiga 500
Disquetera del Amiga 500: donde comenzaba la acción.

Si hubiésemos configurado el emulador para arrancar con algún Kickstart, veríamos estas otras pantallas:

Kickstart 1.3
Kickstart 3.1

Antes de mancharnos las manos, para que veais que el emulador funciona, vamos a descargarnos el R-Type y lanzar el emulador desde un terminal de la siguiente manera:

fs-uae --floppy-drive-0=/ruta/del/juego/R-Type.adf

R-Type

¿Es o no épica la música que arranca el juego? Perdón, ¿por dónde iba? Ah, sí. Con la opción que acabamos de pasarle al ejecutable del emulador, acabamos de crear una disquetera (floppy drive) a la que hemos metido el disquete con el juego R-Type.

Quizás te haya llamado la atención:

  • Ese ruido extraño.
  • La lentitud.
  • La carpeta FS-UAE aparece como por arte de magia.

Respecto a lo primero, FS-UAE nos muestra el trabajo de la disquetera en forma de sonido, igual que ocurre con una disquetera de verdad, así que oiremos cuándo se está leyendo el disquete. No os preocupéis, es algo que se puede silenciar.

Todo carga muy lento, efectivamente. Culpa de ello lo tienen las limitaciones del Commodore Amiga 500:

  • CPU: Motorola 68000 @ 7.09 MHz
  • Memoria: 512 kB
  • Media: disquetes de 880k
  • Año: 1987

Ya no sólo se trata de la CPU, sino que la lectura de disquetes es lenta de por sí. La ventaja que tenemos con el emulador es que podemos aumentar la velocidad de lectura y activar una especie de turbo llamado warp mode.

Como comentaba, se habrá creado en tu carpeta personal la siguiente estructura de directorios:

FS-UAE/
├── Cache
│   ├── Logs
│   │   ├── debug.uae
│   │   └── fs-uae.log.txt
│   └── Modules
├── CD-ROMs
├── Configurations
├── Controllers
├── Floppies
├── Hard Drives
├── Kickstarts
├── Save States
│   └── Default
└── Themes

Esta es la configuración por defecto de las carpetas que usa FS-UAE. Sin embargo, vamos a crear nuestro propio fichero de configuración donde personalizaremos aspectos del emulador y los directorios que usará. Llamadme maníatico, pero me gusta tener un control sobre dónde va cada cosa, y ensuciar el sistema a mi gusto, que para eso es mío :-P

Fichero de configuración

FS-UAE utiliza ficheros de texto plano para su configuración. En ellos se almacenan las opciones y sus valores.

En la web oficial tenéis una muy buena documentación. Aquí hablaré de las más recomendables para poder ponernos a jugar cómodamente.

kickstart_file

Indica dónde está el fichero con el Kickstart. Recordad que si no lo ponemos, arrancará el del proyecto AROS (el de los ojos de felino).

Ejemplo: kickstart_file = ruta/al/kickstart.rom

chip_memory

Cantidad de KB de memoria RAM. Por defecto, FS-UAE emula una Amiga 500, que cuenta con 512 KB, así que si queremos más, lo podemos indicar con esa opción. Siempre múltiplos de 512 (1024, 1536, 2048, etc).

Ejemplo: chip_memory = 1024

base_dir

El directorio del que FS-UAE leerá los demás ficheros de configuración, disqueteras, discos duros, etc.

Ejemplo: base_dir = /directorio/con/las/configuraciones

floppies_dir

Lugar donde FS-UAE va a buscar los disquetes. Así, al pasarle las opciones por línea de comandos, no tenemos que poner toda la ruta, sino la relativa. Por ejemplo, si nuestros juegos están en /home/jm/juegos/amiga/, y le ponemos ese directorio en la opción anterior, cuando lanzemos el emulador podremos hacerlo como fs-uae --floppy-drive-0=juego.adf, en lugar de pasar toda la ruta: fs-uae --floppy-drive-0=/home/jm/juegos/amiga/juego.adf

Ejemplo: floppies_dir = /directorio/de/las/disqueteras

keep_aspect

Si queremos que mantenga la proporción de aspecto aunque se cambie la resolución. Por defecto, FS-UAE hace que la imagen ocupe toda la ventana o pantalla. El problema es que hoy en día, con los monitores panorámicos, estira la imagen para poder llenar todo el espacio haciendo que todo se vea más aplastado. Si no queremos que esto ocurra, le ponemos un 1 a esa opción.

Ejemplo: keep_aspect = 1

La resolución de los juegos puede variar al vuelo, y el emulador se encargará de ir cambiándola automáticamente. Sin embargo, podemos establecer el tamaño de la ventana (que por defecto está en 960×540):

window_width = 640
window_height = 400

controllers_dir

Dónde irán las configuraciones de los mandos. Esto lo explicamos más adelante.

controllers_dir = path/to/dir

amiga_model

Podemos indicar el modelo de Amiga a emular. Por defecto es A500, pero lo podemos cambiar con la siguiente variable:

amiga_model = A1000

Al configurar el modelo, automáticamente se configurarán las características accuracy, ntsc_mode, chip_memory, slow_memory, fast_memory y kickstart_file a los valores por defecto de ese modelo.

uae_chipset

El chipset es otra cosa que podemos especificar. Aunque cada modelo de Amiga usa uno, podemos personalizarlo con otros:

  • ocs
  • ecs_agnus
  • ecs_denise
  • aga

Ejemplo: uae_chipset = aga

title

Si queremos cambiar el título de la ventana en la que se ejecuta el emulador:

Ejemplo: title = Mi Amiga molona

Nuestro fichero de configuración podría quedar tal que así:

[config]

kickstart_file = /home/jm/games/amiga/Kickstart 1.3.rom
base_dir = /home/jm/.config/fs-uae/
floppies_dir = /home/jm/games/amiga/
floppy_drive_volume = 0

window_width = 800
window_height = 520

keep_aspect = 1

Si queremos que FS-UAE utilice ese fichero de configuración, se lo pasamos como argumento:

$ fs-uae /ruta/al/fichero/configuracion.fs-uae

Tanto el nombre como la extensión del fichero de configuración no son importantes, podéis poner lo que queráis.

Uso del emulador

Durante la emulación, podemos acceder al menú usando la tecla F12.

Menú del emulador FS-UAE

Como vemos, desde aquí podemos realizar una serie de operaciones básicas. Se acepta con la tecla Enter y volvemos atrás con Esc.

Además, tenemos estas otras combinaciones de teclas:

  • F12 + G: capturar / liberar ratón. También se puede emplear el botón central del ratón.
  • F12 + F: pantalla completa.
  • F12 + W: activar / desactivar modo warp.
  • F12 + P: pausa la emulación. También vale el botón Pausa del teclado.
  • F12 + Q: salir del emulador.

El modo warp es lo que más utilizaremos si no queremos esperar por los tiempos de lectura del disquete y acelerar la emulación. Mientras estemos en este modo, no habrá sonido ni límite de frames.

La lista completa de atajos de teclado la podéis consultar en la web oficial.

No todas las teclas del Amiga están en los teclados modernos, y viceversa. Muchas funcionarán igual, pero aquí tenéis una lista de las originales y cómo prenteder pulsarlas en un teclado actual:

  • Amiga Help = Fin (End)
  • Amiga Delete = Delete
  • Amiga paréntesis izquierdo teclado numérico = Inicio (Home)
  • Amiga paréntesis derecho teclado numérico = Av Pág (Page Up)
  • Amiga A izquierda= Re Pág (Page Down) o tecla Windows derecha.
  • Amiga A derecha = Tecla Windows izquierda
  • Amiga Ctrl = Ctrl izquierdo.
  • Amiga tecla a la izquierda de Backspace = Insert
Teclado de Amiga 500
Detalle del teclado de un Commodore Amiga 500

Juegos con varios discos

Hasta ahora sabemos lo suficiente para arrancar el emulador con juegos de un solo disquete. Pero 880 kB no son gran cosa para juegos «grandes», así que nos encontraremos con que muchos necesitan 3, 4 o hasta 14, como el Beneath a Steel Sky.

En el caso de Amiga 500, incluía únicamente una disquetera, así que cada vez que era necesario, había que extraer un disquete e insertar el siguiente que nos pidiese. Si tenías dinero, podías comprar más disqueteras externas, claro.

FS-UAE nos va a ahorrar un tiempo precioso diciéndole antes los disquetes que vamos a necesitar y poder extraerlos e introducirlos desde el propio menú.

Por ejemplo, imaginemos que queremos jugar al Cannon Fodder. Este juego se compone de 3 disquetes. Los he llamado cannon1.adf, cannon2.adf y cannon3.adf.

Cannon Fodder: inserta otro disco

Si lo hacemos desde el fichero de configuración:

floppy_drive_0 = /ruta/juego/cannon1.adf
floppy_image_0 = /ruta/juego/cannon1.adf
floppy_image_1 = /ruta/juego/cannon2.adf
floppy_image_2 = /ruta/juego/cannon3.adf

La idea es tener una disquetera (floppy_drive) en la que metemos el primer disquete, y una lista de todas las imágenes (floppy_image) que necesitaremos, es decir, los 3 discos.

Desde la línea de comandos lo haríamos de la siguiente manera:

fs-uae --floppy_drive_0 = /ruta/juego/cannon1.adf --floppy-image-0 = /ruta/juego/cannon1.adf --floppy-image-1 = /ruta/juego/cannon2.adf --floppy-image-2 = /ruta/juego/cannon3.adf

Y ahora vamos extrayendo y metiendo a través del menú (F12), en la sección Medio removible, eligimos la disquetera (DF0), le damos a Extraer, volvemos a elegir la disquetera, e insertamos el disco que queramos.

Cambiando de disco en FS-UAE
Pasos para cambiar de disco en FS-UAE

La otra opción es ir «creando» disqueteras y así tener todos los discos metidos a la vez:

fs-uae --floppy-drive-0 = /ruta/juego/cannon1.adf --floppy-drive-1 = /ruta/juego/cannon2.adf --floppy-drive-2 = /ruta/juego/cannon3.adf

Ahora en el menú veremos que en Medio removible tenemos las tres imágenes de disquete, así que cuando el juego nos pida el siguiente disquete, no tendremos que hacer nada, solo esperar a que lo lea :-)

Cannon Fodder pidiendo introducir disco

Si te da pereza esto de los disquetes, existen versiones WHDLoad de algunos juegos. Se trata de versiones que se pueden instalar en el disco duro y hacer así casi instantánea la carga de los juegos. Pero esa es otra historia y debe ser contada en otra ocasión ;-)

Configurar mando

El mando que uso para los emuladores es el Dual Shock, de PlayStation. FS-UAE soporta los mandos más habituales, así que salvo que sea uno muy extraño, no habrá que hacer prácticamente nada.

La operación consiste en averiguar el nombre que el sistema le da al mando, así que lo enchufamos en el ordenador y utilizamos la aplicación jstest (incluida en el paquete joystick) para ver la información que nos interesa:

$ jstest /dev/input/js0 
Driver version is 2.1.0.
Joystick (Twin USB Joystick) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
and 12 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6).

Lo ha detectado como Twin USB Joystick. Es lo que necesitaremos para decírselo a FS-UAE. En el fichero de configuración, añadimos:

joystick_port_1 = Twin USB Joystick

Si tuviésemos otro más, pues tan sencillo como:

joystick_port_2 = Nombre del joystick

Podría darse la casualidad de que haya más de uno del mismo modelo conectado, entonces les añadimos #2, #3, y así sucesivamente:

joystick_port_1 = Twin USB Joystick
joystick_port_2 = Twin USB Joystick #2

Si tienes la mala suerte de tener un mando no soportado automáticamente, hay que crear un fichero .ini con el nombre que da jstest, pero en minúsculas y sin espacios. Tomando el ejemplo de antes: twin_usb_joystick.ini con el siguiente contenido:

Ejemplo de configuración:

[default]
include = common/gamepad
axis_0_neg = lstick_left
axis_0_pos = lstick_right
axis_1_neg = lstick_up
axis_1_pos = lstick_down
axis_2_neg = rstick_left
axis_2_pos = rstick_right
axis_3_neg = rstick_up
axis_3_pos = rstick_down
button_0 = west_button
button_1 = south_button
button_2 = east_button
button_3 = north_button
button_4 = left_shoulder
button_5 = right_shoulder
button_6 = left_trigger
button_7 = right_trigger
button_8 = select_button
button_9 = start_button
button_10 = lstick_button
button_11 = rstick_button
button_12 = menu_button
hat_0_left = dpad_left
hat_0_right = dpad_right
hat_0_up = dpad_up
hat_0_down = dpad_down

Podéis hacer las asignaciones de botones que queráis, claro. Lo guardamos en el directorio que donde le hayamos indicado que está la configuración de los mandos:

controllers_dir = /ruta/a/carpeta/controllers/

Más información sobre la configuración de joystick en la web oficial.

Guardar estados

Otro punto muy interesante de la mayoría de los emuladores es la opción de guardar el estado, es decir, guardar el punto exacto del juego en ejecución. No hace falta esperar a que el juego nos dé la posibilidad de guardar la partida, sino que podemos hacerlo en cualquier momento. Así, posteriormente, al cargar ese estado que habíamos guardado, el emulador continuará desde ese preciso momento.

Primero hay que configurar el directorio que guardará los estados. En el fichero de configuración se haría así:

save_states_dir = /ruta/a/los/estados

Ahora, con el FS-UAE funcionando y ejecutando algún juego, podemos ir al menú (F12) y seleccionar Guardar Estado, elegir cualquiera de los lugares que nos deja y pulsar Enter. Se guardará con la fecha y hora actuales.

Desde ese momento, podemos ir a Cargar Estado, elegir alguno de los que nos aparezcan, y al pulsar Enter el emulador continuará desde ese estado, tal cual lo habíamos dejado.

Los estados, en nuestro sistema Linux, se irán guardando con el nombre Saved State X.uss, donde la X es un número que se incrementa automáticamente. Así que cuando queramos borrar algún estado, basta con eliminarlo de la carpeta correspondiente.

Temas

Esto es algo puramente estético. FS-UAE soporta temas, y como es más fácil verlo que explicarlo, aquí tenéis una imagen:

FS-UAE con un tema
FS-UAE emulando Cannon Fodder con el tema de Ambermoon

Mola, ¿a que sí?

Podéis descargarlo desde aquí. Lo descomprimís donde queráis y en el fichero de configuración le indicáis ese directorio en la opción theme, así:

theme = 1084x_night_wall_white_1.0

No he visto que se pueda establecer un directorio personalizado para los temas, así que debe ser en ~/FS-UAE/Themes.

Si queréis personalizar ese o crear un nuevo tema, en la web oficial tenéis las opciones que podéis usar.

FS-UAE Launcher

Si habéis aguantado el tutorial hasta aquí, os merecéis una recompensa. Toda esta configuración manual, se puede hacer a golpe de clic desde una herramienta: FS-UAE Launcher.

  • Configuraciones diferentes para cada juego.
  • Configurar partidas en red (sí, sí, como lo lees).
  • Tener carátulas y capturas de pantalla de los juegos.
FS-UAE Launcher
FS-UAE Launcher en todo su esplendor

FS-UAE Launcher se incluye junto con FS-UAE. Os dejo a vosotros que investiguéis su uso. Seguro que no tenéis problemas ;-)

Conclusión

Este artículo pretende mostrar la configuración sencilla y uso de FS-UAE. Su propósito secundario, que no menos importante, es (re)descubrir un gran sistema de finales de los ochenta. Quedan cosas en el tintero como muchísimas más opciones que permite el emulador, instalación de algún sistema operativo tipo Amiga, o la posibilidad de jugar en red. Aunque he querido centrarme en ponernos a jugar lo antes posible, no descarto ampliar este tutorial algún día para cubrir más aspectos de este fantástico emulador. Además, algo tendré que dejar para que os rompáis vosotros la cabeza, ¿no? ;-)

Recursos

6 thoughts on “FS-UAE: Emulador de Amiga

  1. Hola amigo, muy bueno este post que has hecho.
    Tengo un problema y es que he descargado el tema que has puesto, lo meto en la carpeta de temas y cuando quiero aplicarlo no consigo verlo desde el emulador, los otro que trae por defecto si los veo en el emulador pero no en la carpeta, ni siquiera como archivo oculto, trabajo desde mac y tengo la ultima version del fs-uae, gracias amigo

    • Hola, jesus,

      En su momento, al menos para la versión de Linux, los temas tenían que copiarse al directorio personal ~/FS-UAE/Themes/. Por ejemplo, para el que enlazo en el artículo, su ruta debería ser ~/FS-UAE/Themes/1084x_night_wall_white_1.0.

      No tengo ningún equipo con OS X, así que no puedo confirmarte, pero prueba eso y me comentas.

      Muchas gracias por pasarte por aquí :-)

    • Muy buenas, Lorenzo,

      No he probado a cargar desde un HDF, pero lo tengo pendiente. Cuando pruebe, si tengo resultados satisfactorios, te comento.

      ¡Saludos!

    • Muy buenas, Fernando,

      ¿Estás utilizando el mismo emulador que comento en el artículo (FS-UAE)? El comportamiento normal es cargar ficheros .adf. ¿Cómo estás probando? ¿Qué error te da?

      ¡Saludos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.