Compilando el MAME 0.36 beta 1
Obteniendo el MAME 0.36 beta 1
Obteniendo las bibliotecas necesarias para la compilación
Curiosidades en el código fuente del MAME
Estoy seguro que muchos habréis querido alguna vez compilar el MAME, ya sea para retocar algún driver (los menos) o simplemente para ver si es verdad que tenemos el código fuente de un emulador que funcione en nuestras manos (o para poder jugar al Metal Slug X que está desactivado, pero esto lo explicaré al final).
Pues para eso he hecho este archivo, se que existen otros documentos como este, pero en inglés, lo he leido y la verdad es que a veces te lía un poco cambiando las cosas de directorio de un sitio para otro sin explicar nada. Yo voy a intentar explicar para que sirve cada paso.
Obteniendo el MAME 0.36 beta 1
No hace falta que os diga de donde os podeis bajar el código fuente del MAME, pero de todas formas, pongo la dirección de la página oficial que es http://mame.retrogames.com .
| m36b1s.zip | MAME 0.36 beta 1 código fuente |
Para poder compilar MAME, se necesita el compilador gratuito DJGPP. Este compilador lo podeis encontrar en el CD de algunas revistas, o podeis ir a los sitios de distribución oficial. En España es RedIRIS, y la dirección es ftp://ftp.rediris.es/mirror/simtelnet/gnu/djgpp . Los archivos necesarios son:
| v2/djdev201.zip | Contiene muchas cosas, pero lo más útil es el archivo de configuracion DJGPP.ENV |
| v2gnu/bnu281b.zip | En este archivo están el Linker y el Ensamblador (que no se utiliza por utilizar una notación propia que es muy extraña) |
| v2gnu/gcc2721b.zip | El compilador propiamente dicho |
| v2gnu/mak3761b.zip | La utilidad MAKE, para que el compilador sólo compile los archivos que han cambiado y no todo cada vez que reconstruyamos el ejecutable. |
Puede ser que haya versiones nuevas de estos archivos en la distribución, estas son las versiones que uso yo, pero lo mejor es bajarse la más reciente que haya. Cada versión suele tener 3 archivos uno acabado en "b" con el ejecutable, otro en "d" con la documentación, y otro en "s" con el código fuente. El único que nos interesa es el ejecutable, así que os debeis bajar los que acaben en "b". Si quereis leer la documentación, os tendréis que traer tambien el paquete v2gnu/txi390b.zip que contiene el programa para leerla.
También es necesario un ensamblador, porque como ya he dicho antes, el del DJGPP (GASP) utiliza una notación propia, y no la notación estándar de Intel. El ensamblador que vamos a usar se llama NASM y es gratis. Lo podéis encontrar en www.cryogen.com/Nasm
| nasm097.zip | Netwide Assembler version 0.97 |
Obteniendo las bibliotecas necesarias para la compilación
A parte del compilador, también necesitaremos tres bibliotecas adicionales que añaden a MAME la funcionalidad de gráficos, sonido y compresión/descompresión.
Allegro
Es la biblioteca para gráficos. En esta versión la han cambiado y además tiene un pequeño error que hacía que no se leyeran bien las teclas extendidas del teclado. La podeis obtener en http://www.talula.demon.co.uk/allegro .
| all3923.zip | Allegro version 3.9.23 + WIP |
Seal
Es la biblioteca para sonido. Se puede obtener en la página oficial http://www.egerter.com/seal .
| seal106.zip | Seal version 1.0.6 |
ZLib
Es una biblioteca de compresión/descompresión gratuita. Se puede obtener en muchos sitios. Yo la bajé de http://www.cdrom.com/pub/infozip/zlib
| zlib113.zip | ZLib versión 1.1.3 (sólo código fuente) |
Primero, habréis observado que el archivo zip del MAME tiene dentro ¡otro archivo zip!, ¿a quien se le ocurre hacer estas cosas? ya llevamos 2 versiones haciendolo igual y creo que así no vamos a ningún sitio. Bueno, para descomprimir esta chapuzilla, haremos lo siguiente. Primero descomprimimos el archivo m36b1s.zip en cualquier sitio que queramos (C:\basura es un buen sitio) y obtendremos un archivo mame.zip, el cual procederemos a descomprimir al directorio de destino final. Yo lo tengo en C:\EMULS\MAME, ojo que no es el subdirectorio MAME\SRC, este se creará solo al descomprimir.
Para descomprimir no recomiendo utilizar el pkunzip porque algunas veces a mi me ha dado problemas, debido a que el compilador viene del compilador CC de UNIX y en UNIX importan las mayúsculas y las minúsculas en los nombres de archivo. Si lo descomprimis con pkunzip, tódos quedan en minúsculas y el compilador se vuelve loco cuando intenta buscar archivos como I8085.c (con la I mayúscua) y dice que no lo encuentra. Por esto recomiendo utilizar el WinZIP o el WinACE, que respetan los nombres originales. No se si esto sigue pasando, pero me paso con la 0.34 y desde entonces no uso el pkunzip. Si alguien lo usa y le funciona, pues mejor para él, pero recordad utilizar la opción -d para reconstruir los subdirectorios.
Nos crearemos un directorio en el que poner el compilador. Yo lo llamo C:\DJGPP
Descomprimimos en él todos los archivos (gcc2721b.zip, bnu281b.zip,mak3761b.zip,djdev201.zip) así:
pkunzip -d gcc2721b.zip C:\DJGPP\
pkunzip -d bnu281b.zip C:\DJGPP\
pkunzip -d mak3761b.zip C:\DJGPP\
pkunzip -d djdev201.zip C:\DJGPP\
atención, darse cuenta que el directorio de destino tiene que acabar el "\"
Con esto tendremos el compilador de C listo. Ahora le toca al NASM, para ello, le crearemos un directorio p ej: C:\NASM y lo meteremos allí.
pkunzip -d nasm097.zip C:\NASM\
Ahora tenemos que configurar el PATH para invocar al compilador desde cualquier sitio. Se puede tocar el AUTOEXEC.BAT, pero lo mejor es hacerse un archivo .BAT nuevo, por ejemplo C:\DJGPP\DJGPP.BAT.En él añadiremos las siguientes líneas:
set DJGPP=c:/djgpp/djgpp.env
set path=c:\djgpp\bin;c:\nasm;%path%
Atención que el directorio de arriba usa la barra normal, la que está sobre el 7 en el teclado.
Ahora ejecutamos el archivo DJGPP.BAT y ya estamos listos para empezar a compilar cosas.
La biblioteca SEAL no hace falta compilarla, simplemente la descomprimimos al directorio del compilador (C:\DJGPP) y nos creará un subdirectorio llamado AUDIO.
pkunzip -d seal106.zip C:\DJGPP\
y copiamos el archivo C:\DJGPP\AUDIO\LIB\DOS\LIBAUDIO.A al directorio C:\DJGPP\LIB para que el compilador pueda disponer de ella.
La biblioteca ZLib se distribuye sólo en forma de código fuente, por lo que tendremos que compilarla. Primero la descomprimimos en C:\DJGPP\ZLIB por ejemplo.
pkunzip -d zlib113.zip C:\DJGPP\ZLIB\
ahora vamos a ese directorio y escribimos
make -fmsdos\makefile.dj2
tras una sarta de mensajes incomprensibles obtendremos los archivos compilados y unos ejemplos inútiles. Ahora, el manual recomienda ejecutar un make install, pero como hay que tocar muchas cosas, mejor lo hacemos a mano.
Copiamos el archivo LIBZ.A a C:\DJGPP\LIB
copy LIBZ.A C:\DJGPP\LIB
y luego los archivos de cabecera a C:\DJGPP\INCLUDE
copy *.H C:\DJGPP\INCLUDE
Ahora viene lo bueno. Compilar las primeras versiones de Allegro era una tarea realmente dificil, pero parece que ahora ya lo han arreglado y funciona todo a la primera.
Descomprimimos allegro directamente sobre C:\DJGPP,y nos creará un subdirectorio llamado ALLEGRO.
pkunzip -d all3923.zip C:\DJGPP\
Antes de nada, tenemos que copiar un parche para que el problema de las teclas se solucione, para hacerlo, copiamos lo siguiente:
copy c:\emuls\mame\allegro\src\misc c:\djgpp\allegro\src\misc
Ahora vamos a C:\DJGPP\ALLEGRO y lo compilamos poniendo
make
Tras un buen rato (unos 10 minutos en mi PII 300) y otra sarta de lineas incomprensibles con opciones raras, tendremos Allegro listo (y el disco duro lleno de basura).
Una vez terminado, nos fijamos que dice Run make install ..., pues nada, hacemos lo que nos dice, no sea que se enfade. Ponemos:
make install
Y otra vez a compilar cosas (estoy seguro de que tiene que haber una manera mejor de hacer estas cosas). Cuando haya terminado, nos habrá puesto todos los archivos en su sitio y ya está todo listo para compilar.
Antes de compilar, tenemos que crear la estructura de directorios para que ponga los códigos compilados, para ello nos vamos al directorio C:\EMULS\MAME y escribimos
make makedir
Ahora ya estamos listos para la gran prueba final, ¡¡Compilar el MAME!! pues nada, ponemos la super orden compila-todo-final.
make
¿make?, ¿solo esto?, pues no es tan dificil. No, si una vez que tienes todo hecho, solo pones make y ya va, pero lo dificil es todo lo hay que hacer antes.
Ahora tras un laaargo rato (unos 20-25 minutos) y cienes y cienes de pantallas con palabros inpronunciables tendremos nuestro flamante mame.exe listo para jugar.
ATENCION!!! De vez en cuando, al hacer el make la primera vez, cuando lleva un rato, la compilación se para y da un error (Load Error: No DPMI Selectors). No pasa nada, poneis make otra vez y ya está, seguirá donde lo dejó. A mi sólo me pasa una vez cuando compilo todo.
Sobre todo no compileis desde MS-DOS puro (hacedlo desde una ventana desde Windows 98) porque si no, no os funcionará, ya que MS-DOS sólo permite 128 caracteres de máximo en las lineas de comando y vereis que algunas ocupan media pantalla.
Curiosidades en el código fuente del MAME
Metal Slug X y otros
Vais al directorio SRC, y editais el archivo DRIVER.C con cualquier editor. Ahora vais hasta el final del fichero y un poco má arriba, vereis una linea asi:
// DRIVER( mslugx ) /* 0250 (c) 1999 SNK */
para los que no sepais C, las // indican que es un comentario, así que las quitamos, grabamos el archivo y compilamos otra vez (poniendo simplemente make en el directorio del MAME) y ya tenemos el Metal Slug X jugable (aunque segun parece, a veces se peta por la protección anti copia, pero yo me lo he pasado entero sin que pete). Hay otros juegos de NeoGeo con las // que funcionan tambien.
Posibles nuevos drivers?
Esto es lo más interesante. Antes de cada lista de drivers, hay una explicación y una lista con los juegos que pertenecen a esa marca. Pues bueno, coged el editor y utilizando la funcion de búsqueda, poned CPS2. Le dais y oops!, una lista completa con los juegos de CPS2, pero debajo no hay nada, ni drivers, ni siquiera una explicación. ¿Podrían ser los próximos drivers a añadir?, ójala, pero de momento, sólo es una lista y a lo mejor no significa nada.
Miguel Angel Horna