2020-05-08 RG350 DOSBox

DOSBox logo

DOSBox recrea un entorno MS-DOS virtual para permitir ejecutar los viejos juegos aparecidos en los 80-90 para esta plataforma. Soporta sonido, controles de entrada y gráficos.

Instalación

El emulador tiene forma de OPK, como la mayoría de los emuladores para el sistema de la RG350 (OpenDingux). Por tanto sólo tenemos que bajarlo de este enlace y copiarlo a una de las dos rutas que explora GMenu2X para mostrar los lanzadores, es decir:

  • Tarjeta interna: /media/data/apps
  • Tarjeta externa: /media/sdcard/apps

Una vez instalado se puede ejecutar el entorno sin ningún juego para así alcanzar algunas utilidades que ayudan a la configuración del mismo. Para conseguir llegar al prompt, hay que editar el lanzador de GMenu2X, dejar en blanco el parámetro Selector Directory (ojo porque cada vez que se arranca toma el valor /media, por lo que hay que limpiarlo cada vez) y poner OFF en el parámetro Selector Browser:

DOSBox Launcher options

Cuando lo lancemos aparecerá la típica pantalla de DOS. La pantalla tiene una resolución de 640x400 por lo que en la pantalla de la RG350 se verá muy mal por el reescalado a 320x240 (para esto puede venir bien la reciente publicación de un update que permite activar la salida de video HDMI que soporta esta resolución):

DOSBox prompt

Como se puede leer ahí, tecleando INTRO mediante el teclado virtual (que aparece pulsando L1) se nos muestran varias pantallas con información:

DOSBox Intro1 DOSBox Intro2 DOSBox Intro3

Configuración

El concepto más importante de entender en DOSBox es el del fichero de configuración o dosbox.conf. Cuando arrancamos por primera vez DOSBox, se genera un fichero de configuración genérico en el directorio /media/data/local/home/.dosbox. En concreto en la versión compilada para la RG350 este fichero tiene de nombre dosbox-SVN.conf. Dentro de él están todos los ajustes que aplicarán a los programas o juegos que ejecutemos en DOSBox. En particular hay un ajuste de la configuración que se volverá fundamental en la mayoría de los juegos y es el del mapeado del teclado. En la documentación de este fichero vemos que los controles tienen su propio fichero de configuración al que se apunta desde el dosbox.conf mediante el parámetro mapperfile.

Un fichero mapper típico contiene la relación entre los códigos de las teclas de un teclado de PC y las de los controles de la consola. En cada línea del fichero se indica un código de teclado de PC y a continuación entre comillas el código del pulsador de la RG350 con la palabra key delante separada del código por un espacio (más adelante se muestran ejemplos).

Los códigos de teclado de PC más importantes son:

  • key_a hasta key_z para las letras
  • key_0 hasta key_9 para los números
  • key_kp_0 hasta key_kp_9 para el teclado numérico
  • key_kp_enter para enter en teclado numérico
  • key_f1 hasta key_f12 para las teclas de función
  • key_up, key_down, key_left, key_right para las teclas de cursor
  • key_lalt, key_lctrl, key_lshift, key_alt, key_ctrl, key_shift para las teclas modificadoras
  • key_enter, key_esc, key_space, key_tab

Se adjunta aquí el fichero con el mapping predeterminado de DOSBox que incluye todos los códigos de teclado y joystick soportados.

Los códigos de los controles de la RG350 son los siguientes:

Control Código Tecla de PC en mapper predeterminado
A 306 key_lshift
B 308 key_space
X 32 key_r
Y 304 key_a
L1 9
L2 280 key_lctrl
R1 8 key_q
R2 281 key_s
UP 273 key_up
DOWN 274 key_down
LEFT 276 key_left
RIGHT 275 key_right
START 13 key_enter
SELECT 27 key_esc

Por ejemplo para mapear la tecla A de un PC al control A de la RG350 habría que incluir la siguiente línea en el fichero de mapper:

key_a "key 306"

Como ejemplo vamos a elaborar el mapper para el juego Prince of Persia. Un listado básico de los controles de este juego sería:

Tecla Efecto
Cursores Movimiento
LShift Paso lento/Coger/Luchar
Enter Empezar
Espacio Muestra tiempo que queda
Escape Pausa
Ctrl-R Termina el juego y vuelve a la secuencia de título
Ctrl-A Reinicia el juego al comienzo del nivel actual
Ctrl-S Apaga/enciende el sonido
Ctrl-Q Cierra el juego y retorna a MS-DOS

Así pues vamos a establecer las siguientes relaciones entre las teclas de un PC y los controles de la RG350 (la tecla L1 la evitaremos puesto que siempre saca el teclado virtual):

Tecla PC Control RG350
Cursor arriba UP
Cursor abajo DOWN
Cursor derecha RIGHT
Cursor izquierda LEFT
LShift A
Enter START
Espacio B
Escape SELECT
LCtrl L2
R X
A Y
S R2
Q R1

Lo que traducido a un fichero de mapper se convierte en:

key_up "key 273"
key_down "key 274"
key_right "key 275"
key_left "key 276"
key_lshift "key 306"
key_enter "key 13"
key_space "key 308"
key_esc "key 27"
key_lctrl "key 280"
key_r "key 32"
key_a "key 304"
key_s "key 281"
key_q "key 8"

Creamos el fichero con el contenido anterior y lo dejamos en /media/data/local/home/.dosbox/mapper.txt. Finalmente editamos el fichero /media/data/local/home/.dosbox/dosbox-SVN.conf para que el parámetro mapperfile apunte al nuevo fichero. A partir de entonces podremos utilizar el juego con los nuevos controles. La tabla inicial de controles con los equivalentes en RG350 queda ahora:

Tecla PC Efecto Control RG350
Cursores Movimiento Cruceta
LShift Paso lento/Coger/Luchar A
Enter Empezar START
Espacio Muestra tiempo que queda B
Escape Pausa SELECT
Ctrl-R Termina el juego y vuelve a la secuencia de título L2 + X
Ctrl-A Reinicia el juego al comienzo del nivel actual L2 + Y
Ctrl-S Apaga/enciende el sonido L2 + R2
Ctrl-Q Cierra el juego y retorna a MS-DOS L2 + R1

Por último se incluyen a continuación una serie de enlaces de documentación que pueden servir de ayuda:

Juegos

Los juegos para DOSBox consisten simplemente en los ficheros originales del juego sin modificar, normalmente dentro de un directorio. DOSBox soporta el montaje de imágenes de CD-ROM para los juegos que venían en este formato, pero de momento no nos vamos a complicar con eso (estudiar los enlaces indicados un poco más arriba). Una vez que tengamos los ficheros del juego en un directorio sólo tendremos que abrir el OPK desde GMenu2X y explorar hasta localizar el directorio. Por defecto se nos filtrarán los ficheros con extensiones .exe, .com y .bat que eran los típicos ficheros ejecutables en MS-DOS. Seleccionando el ejecutable adecuado el juego arrancará. Por ejemplo en una instalación del juego Prince of Persia aparecen los siguientes ficheros como ejecutables:

Prince of Persia

El que tendremos que seleccionar es el de nombre prince.

Prince of Persia

Integración en frontends

DOSBox se integra bien con frontends puesto que permite seleccionar el ejecutable a lanzar mediante el explorador. Se recomienda filtrar únicamente la extensión .bat y generar un fichero de este tipo si no existe ya entre los ficheros del juego. De esta forma sólo aparecerá una entrada para arrancar el juego (y no 4 como hemos visto en el ejemplo anterior).

Personalización de controles para juegos

Del extenso apartado Configuración se desprende que la principal dificultad de instalar juegos MS-DOS en DOSBox es la del mapeo de controles. Además, a pesar de que el proyecto oficial permite cargar automáticamente un dosbox.conf desde el directorio del juego, la versión para la RG350 que se encuentra habitualmente, no parece soportar esta capacidad. Sin embargo no es complicado adaptarla para que lo consiga. Simplemente incluyendo dentro del OPK el siguiente script de nombre set_conf.sh que será el que se ejecute desde el fichero default.gcw0.desktop:

#!/bin/sh

DIRBASE=`dirname "${1}"`
if [ -f "$DIRBASE/dosbox.conf" ]
then
    ./dosbox "$1" -exit -conf "$DIRBASE/dosbox.conf"
else
    ./dosbox "$1" -exit
fi

En default.gcw0.desktop sustituiremos la línea correspondiente al parámetro Exec por lo siguiente:

Exec=set_conf.sh %f

El OPK resultante con estos cambios, que se puede utilizar en lugar del que se distribuye habitualmente, se puede descargar desde aquí: Dosbox_conf_mod.opk

Con este OPK simplemente tendremos que colocar el dosbox.conf que queremos que aplique en el mismo directorio del juego. El mapper al que se apunte desde este fichero (parámetro mapperfile, recordemos) también se deberá encontrar en el directorio del juego.

Configuración de scalers

Un parámetro interesante del dosbox.conf es el scaler que se encuentra dentro de la sección [render]. Permite seleccionar de entre una serie de filtros para producir efectos en la pantalla (como los típicos scanlines de los televisores CRT). Por ejemplo en el dosbox.conf predeterminado se ve esto:

[render]
# frameskip: How many frames DOSBox skips before drawing one.
#    aspect: Do aspect correction, if your output method doesn't support scaling this can slow things down!.
#    scaler: Scaler used to enlarge/enhance low resolution modes. If 'forced' is appended,
#            then the scaler will be used even if the result might not be desired.
#            Possible values: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, hq2x, hq3x, 2xsai, super2xsai, supereagle, tv2x, tv3x, rgb2x, rgb3x, scan2x, scan3x.

frameskip=0
aspect=false
scaler=none

Cambiando ese parámetro se pueden conseguir los distintos efectos, aunque al probarlos se ve que no resultan de mucha utilidad en la RG350. Supongo que dependerá mucho de la resolución original del juego. Es decir, si el juego se dibuja a 320x240, la mayoría de esos scalers no tienen mucho sentido.

A continuación se muestra el efecto de cada uno de los scalers sobre la pantalla de presentación del Prince of Persia que sin scaler aplicado se ve así:

scaler none

normal2x

scaler normal2x

advmame2x

scaler advmame2x

advinterp2x

scaler advinterp2x

hq2x

scaler hq2x

2xsai

scaler 2xsai

super2xsai

scaler super2xsai

supereagle

scaler supereagle

scaler_tv2x

scaler tv2x

rgb2x

scaler rgb2x

scan2x

scaler scan2x

Los siguientes scalers parecen no funcionar (supongo que porque será necesario que la resolución de pantalla juego sea el triple al menos de la del juego):

  • normal3x
  • advmame3x
  • advinterp3x
  • hq3x
  • tv3x
  • rgb3x
  • scan3x