mameHispano-un sitio web para la comunidad hispana de MAME

Diseñe el siguiente sitio web para alojar toda la información posible sobre el emulador MAME, añadiré tutoriales , tips y trucos para todos los fans hispanos de este estupendo emulador , de igual manera desde este sitio estaré subiendo mi próxima versión del emulador ..la idea es básicamente:

  • substraer el core principal (lo cual ya hice)
  • actualizar la base de datos de roms y el código asociado para cada rom que considere relevante.
  • una función de búsqueda de actualizaciones automáticas de la base de roms soportados.
  • añadir dentro del mismo emulador una interfaz usando Gtk2, Wx o Tcl..esto supone re-definir main.c :

$ ./jiclmame  – - enable-ui   – -ui gtk2  – - vidmod 2  – -rp /rom/path   rom_name

Liga del Sitio: http://hackob.zobyhost.com/projects/mameHispano/index.php

;)

Hacking MAME for Linux – SF Mini Mix

Después de bastante tiempo dejar abandonado el proyecto MAME, me anime a meterle algo de código al emulador, no me tarde mucho pero no me fue muy sencillo ya que desde hace 7 o mejor dicho casi 8 años no me metía en el código fuente, cabe señalar que NO soy desarrollador oficial del proyecto ya que el mame team no acepto, por allá del año 2002, mi parche que permitía en ese entonces emular 3 nuevos juegos el cual uno de ellos, Metal Slug 4, estaba de moda en los salones de videojuegos, más sin embargo, posteriormente compile una nueva versión del emulador con las mejoras que había propuesto y lo nombre JICLMAME, el cual funciona solo para Microsoft Windows pero como los cambios que añadí son parte del core, no hay ningún problema en portar hacia otro sistema operativo como Linux, Mac OS..etc.

En esta ocasión añadí un juego que ya funciona desde hace tiempo en las mas nuevas versiones del emulador, me refiero al juego Street Fighter Gem Mini Mix, es un juego muy divertido el cual me gusta mucho y que realmente no lo llegue a ver en todos los salones de video juego salvo en algunos.

Estas notas que a continuación describo NO son la guía oficial de como añadir drivers o juegos que funcionen exitosamente en el emulador pero quizá te puedan ayudar para intentar hacer algo, pero necesitas el pcb(la tarjeta madre)  del juego para conocer acerca del “hardware” me refiero al cpu de vídeo, sonido, controles y dipswitches que usa el juego y si no la tienes pues investigar en los manuales de la pcb, por otro lado si ya sabes que el juego usa por ejemplo un cpu de un sistema como CPS2 (Capcom Play System 2) , inclusive el Z80, quizá puedas probar con lo que ya esta implementando en el emulador lo cual no es muy sencillo ya que tienes que descifrar muchas cosas, pero quizá pueda que funcione.

En primera instancia hay que descargar y descomprimir el código fuente de xmame, lamentablemente ya no es posible obtenerlo del sitio oficial http://x.mame.net ya que no existe más, voy a abrir más delante un fork y un sitio web para darle seguimiento.

Hay que tener en cuenta que necesitamos conocimientos entre básico avanzados en el lenguaje C, manejo de la memoria, hardware,  punteros entre otras loqueras.

¿Porque no usar una nueva versión de un emulador de MAME hermano para Linux?

porque las nuevas versiones van creciendo de tamaño y van necesitando mas recursos de cpu y memoria y yo lo que quiero es seguir usando el emulador en mi computadora de siempre, es una cuestión de decisión personal.

¿Qué es lo que sabemos de nuestro juego que posiblemente vamos a emular?

El hardware es: cpu 68000 @ 16 MHz y el famoso cpu Z80 @ 8MHz , el audio: Q-Sound @4MHz (CPS2)

La orientación del juego es horizontal a una resolución de 384×224 con una frecuencia de 59.629403Hz

También necesitamos el rom con los dumps que le pertenecen, para nuestro caso son:

name size crc set flags sha1
pcfu.03 524288 ac2e8566 sgemf 5975aae46bded231c0f478f40c7257434ade36b0
pcf.04 524288 f4314c96 sgemf c40ed74039bf0096eb3648b7243a8e697638e0a6
pcf.05 524288 215655f6 sgemf 242c0f4401520f2a3b0deafc3a807b18b987e496
pcf.06 524288 ea6f13ea sgemf 1bc924a8a9da1d2ad7667685cdb92fe317a39aba
pcf.07 524288 5ac6d5ea sgemf 9ce8e4668b565658597a868830545fb75a5eeaa6
pcf.13m 4194304 22d72ab9 sgemf 653efd95c34b4b9d2ab0d219f41a99ca84e12214
pcf.15m 4194304 16a4813c sgemf bf5fce6008214f353414d1b64bea4ed0c7673670
pcf.17m 4194304 1097e035 sgemf 4bd51e4e9447af27d2cac1f6d2201e37c949912b
pcf.19m 4194304 d362d874 sgemf 30c42af18440496cc05e4418e4efa41172ae4ced
pcf.14m 1048576 0383897c sgemf aba14afa1d0c971afcee4317f480e88117d77b5e
pcf.16m 1048576 76f91084 sgemf 3d1e32467f2aa5dd6fb96bd5c866ecc9691660fc
pcf.18m 1048576 756c3754 sgemf be2f709b90222a567f198f851cf07ffb0ad433d7
pcf.20m 1048576 9ec9277d sgemf b7ceeaca30dfcdf498b61a6961f0aa1a068b8ec4
pcf.01 131072 254e5f33 sgemf c413ec0630b9bdd15e64f42893eba8958a09b573
pcf.02 131072 6902f4f9 sgemf 9bfe4ddade3c666076d26a2b545120f6d059fd7c
pcf.11m 4194304 a5dea005 sgemf 3ae79baf6ff5bd527f82b26f164c7e3c65423ae2
pcf.12m 4194304 4ce235fe sgemf 795b94557e954cc0e45fd3778b609064d57a34a2

y adicionalmente necesitamos un extra dump para que el juego pueda ser emulado exitosamente, este dump lo pueden descargar de la siguiente liga http://www.arcadeathome.com/dl2.phtml?misc/pcfux.zip

Pueden googlear para encontrar el rom sgemf que es nuestra versión de rom que necesitaremos el cual tiene un tamaño de 15 M. posteriormente lo descomprimen a un directorio y añaden a ese directorio el archivo dump extra que acabamos de descargar de arcadeathome, es importante hacer notar que tienen que renombrar el directorio sgemf a sfmhack y si lo desean pueden comprimir (zippear, zip) este directorio.

Como el juego que vamos añadir es parte del ya no tan nuevo Sistema de Capcom versión 2(CPS2), entonces tenemos que definir una macro en el archivo raizEmuladorDir/src/drivers/cps2.c y la cual ya esta declarada en el archivo de cabecera raizEmuladorDir/src/romload.h , el código que hay que añadir tiene que ser algo como esto, depende del rom que MAME quieras que emule, el nombre del rom es sfmhack ya que es una versión de street figther gem mini mix hackeada por un servidor.

ROM_START( sfmhack )  /* street fighter mini mix hacked by jacob @ frenesssi.wordpress.com*/
ROM_REGION( CODE_SIZE, REGION_CPU1, 0 )      /* 68000 code */
ROM_LOAD16_WORD_SWAP( “pcfu.03″, 0×000000, 0×80000, CRC(ac2e8566) SHA1(5975aae46bded231c0f478f40c7257434ade36b0) )
ROM_LOAD16_WORD_SWAP( “pcf.04″,  0×080000, 0×80000, CRC(f4314c96) SHA1(c40ed74039bf0096eb3648b7243a8e697638e0a6) )
ROM_LOAD16_WORD_SWAP( “pcf.05″,  0×100000, 0×80000, CRC(215655f6) SHA1(242c0f4401520f2a3b0deafc3a807b18b987e496) )
ROM_LOAD16_WORD_SWAP( “pcf.06″,  0×180000, 0×80000, CRC(ea6f13ea) SHA1(1bc924a8a9da1d2ad7667685cdb92fe317a39aba) )
ROM_LOAD16_WORD_SWAP( “pcf.07″,  0×200000, 0×80000, CRC(5ac6d5ea) SHA1(9ce8e4668b565658597a868830545fb75a5eeaa6) )

ROM_REGION16_BE( CODE_SIZE, REGION_USER1, 0 )
ROM_LOAD16_WORD_SWAP( “pcfux.03″, 0×000000, 0×80000, CRC(652b7647) SHA1(03259f536e8c988b288de5e13df8b2ee22d8a168) )

ROM_REGION( 0×1400000, REGION_GFX1, 0 )
ROMX_LOAD( “pcf.13m”,   0×0000000, 0×400000, CRC(22d72ab9) SHA1(653efd95c34b4b9d2ab0d219f41a99ca84e12214) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.15m”,   0×0000002, 0×400000, CRC(16a4813c) SHA1(bf5fce6008214f353414d1b64bea4ed0c7673670) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.17m”,   0×0000004, 0×400000, CRC(1097e035) SHA1(4bd51e4e9447af27d2cac1f6d2201e37c949912b) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.19m”,   0×0000006, 0×400000, CRC(d362d874) SHA1(30c42af18440496cc05e4418e4efa41172ae4ced) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.14m”,   0×1000000, 0×100000, CRC(0383897c) SHA1(aba14afa1d0c971afcee4317f480e88117d77b5e) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.16m”,   0×1000002, 0×100000, CRC(76f91084) SHA1(3d1e32467f2aa5dd6fb96bd5c866ecc9691660fc) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.18m”,   0×1000004, 0×100000, CRC(756c3754) SHA1(be2f709b90222a567f198f851cf07ffb0ad433d7) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( “pcf.20m”,   0×1000006, 0×100000, CRC(9ec9277d) SHA1(b7ceeaca30dfcdf498b61a6961f0aa1a068b8ec4) , ROM_GROUPWORD | ROM_SKIP(6) )

ROM_REGION( QSOUND_SIZE, REGION_CPU2, 0 ) /* 64k for the audio CPU (+banks) */
ROM_LOAD( “pcf.01″,   0×00000, 0×08000, CRC(254e5f33) SHA1(c413ec0630b9bdd15e64f42893eba8958a09b573) )
ROM_CONTINUE(         0×10000, 0×18000 )
ROM_LOAD( “pcf.02″,   0×28000, 0×20000, CRC(6902f4f9) SHA1(9bfe4ddade3c666076d26a2b545120f6d059fd7c) )

ROM_REGION( 0×800000, REGION_SOUND1, 0 ) /* QSound samples */
ROM_LOAD16_WORD_SWAP( “pcf.11m”,   0×000000, 0×400000, CRC(a5dea005) SHA1(3ae79baf6ff5bd527f82b26f164c7e3c65423ae2) )
ROM_LOAD16_WORD_SWAP( “pcf.12m”,   0×400000, 0×400000, CRC(4ce235fe) SHA1(795b94557e954cc0e45fd3778b609064d57a34a2) )
ROM_END

Hacking MAME for Linux

en el trozo de código anterior se definen varias cosas importantes como la carga de los dumps de un rom los cuales se dividen para el procesador, usuario, efectos o gfx’s y sonido, estos dumps tienen varias formas de ser validados como la suma CRC, SHA1 y los cuales deben de coincidir con los dumps del rom que se esta intentado emular, si no es así MAME te indicara con un error al momento que intentes emular el juego.no me meto en más detalles ya que técnicamente hay varias cosas que explicar y esto da para varios posts, como por ejemplo la expansión de las macros ROM_LOAD, ROM_START, ROM_END, ROM_REGION..etc.

En el mismo archivo que estamos editando cps2.c , añadimos al final de el una entrada como la siguiente:

GAME( 1997, sfmhack,    0,       cps2, sfmhack,   cps2, ROT0,   “Capcom”, “Super Gem Fighter Mini Mix Hacked by jacob (US 970904)”, 0 )

esta definición de la expansión de la macro tiene varios parámetros:

*el año.

*el nombre del driver o controlador.

*el nombre del rom padre si es que existe alguno si no se especifica con un 0(cero),

*el cuarto parámetro indica el driver o controlador para el sistema de hardware que necesita para ser emulado, en este caso cps2.

*el quinto parámetro establece el nombre de las definiciones y como serán mapeados los puertos de entrada que usara el rom específicamente como controles de mando y dipswitches, estos se definen a tiempo de ejecución y se construye dinamicamente un puntero a una función como por ejemplo : construct_ipt_sfmhack.

*el sexto parámetro indicas el nombre del driver que va ser inicializado en este caso cps2, esto sirve para desencriptar el acceso al rom entre otras cosas importantes.

*el séptimo parámetro permite definir como va rotar el juego a 90, 180, 270..básicamente consiste en 3bits (X,Y,XY) y eso esta definido por varias macros que después comentare, por ejemplo pacman tiene que rotar a 90 ya que es la orientación es vertical.

*el octavo parámetro define la empresa quien desarrollo el juego.

*el noveno elemento establece un nombre amigable para el rom.

* el ultimo elemento define el estado del rom , esto permite saber si funciona , si no esta emulado al 100%, si tiene problemas de sonido..etc. de igual forma hay macros para esto, en este caso como es un rom que estoy añadiendo y sabiendo que no hay problemas habrá que poner un 0(cero).

A continuación hay que añadir en raizEmuladorDir/src/mamedriv.c la siguiente linea:

DRIVER ( sfmhack )

la cual define un  array de drivers que se van añadiendo recursivamente, quizá les interese verificar el código fuente.

En el archivo de cabecera raizEmuladorDir/src/driver.h se define la macro para el paso anterior que he descrito

#define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS)        \
game_driver driver_##NAME =                                     \
{                                                                                       \
__FILE__,                                                               \
#PARENT,                                                                \
#NAME,                                                                  \
system_bios_0,                                                  \
FULLNAME,                                                               \
#YEAR,                                                                  \
COMPANY,                                                                \
construct_##MACHINE,                                    \
construct_ipt_##INPUT,                                  \
init_##INIT,                                                    \
rom_##NAME,                                                             \
(MONITOR)|(FLAGS)                                               \
};

Existen muchas cuestiones que describir pero ya será para otro post mas técnico y formal, esto es solo una pequeña introducción informal y puesto que lo que nos interesa es ver el resultado, les dejo algunos pantallazos:

Hacking MAME for Linux

Hacking MAME for Linux

Enhorabuena hemos añadido un nuevo juego a nuestro querido emulador favorito de arcades MAME.

Nota: A fin de año es muy posible que deje en linea los binarios y fuentes del emulador como software libre 100%, ya que es un trabajo derivativo del proyecto MAME el cual he bautizado como JICLMAME for Linux y el cual merece su propio sitio web ya que de aquí se separa como un proyecto aparte.

Referencias:

http://cps2shock.retrogames.com/techinfo.html

http://caesar.logiqx.com/php/emulator_game.php?id=m1_linux&game=sgemf

http://www.solvalou.com/subpage/arcade_roms/S/sgemf


MAME, Xv and OpenGL , X11 Extensions

En lo que terminaba de compilar Mono 2.4.2.3, me compile Xmame, aunque ya es una versión vieja me gusta bastante el desempeño del emulador al final de cuentas siempre termino corriendo los mismos de roms de toda la vida. La compilación del emulador tronaba en algún punto y se me hizo raro ya que nunca había tenido problemas para compilar este emulador.

El primer conjunto de errores fue:

jacob@mobile-home:~/Software/Games/emu/xmame-0.106$ make
[OSDEPEND] Compiling src/unix/video-drivers/xv.c ...
src/unix/video-drivers/xv.c:14:31: error: X11/extensions/Xv.h: No such file or directory
src/unix/video-drivers/xv.c:15:34: error: X11/extensions/Xvlib.h: No such file or directory

Lo primero que hice fue revisar si en mi sistema si tenia los “headers” que me indicaba el compilador que no encontraba, por lo que busque en /usr/include/X11/extensions , y efectivamente no tenia instalado varias extensiones de X11 por lo que procedí a instalarlas, en este momento lo hice desde Ubuntu Jaunty ya que no inicie mi computadora con Gentoo como acostumbro a diario.

para esto hay que hacer: #sudo apt-cache search libxv y posteriormente ejecutar: sudo apt-get install libxv-dev

Después de esto pude continuar con la compilación de Xmame, cabe señalar que para que Xmame use las extensiones que acabo de añadir es necesario que no este comentado la linea en el archivo makefile.unix que indico a continuación:

# MIT-Shared Memory X Extensions
X11_MITSHM = 1
# Use Xv extension for hardware scaling.
X11_XV = 1

Una vez que termino la compilación pude verificar las opciones en linea de comándos que se añaden como las que muestro a continuación y para esto solo hay que ejecutar:  ./xmame.x11 – -help

*** X11-window Related ***
-[no]mitshm / -[no]ms   Use/don't use MIT Shared Mem (if available and compiled in)                                    

*** XV Related ***
-force-yuv <int>        Force XV YUV mode:              
 0 Autodetect                                    
 1 Force YUY2                                    
 2 Force YV12                                    
-[no]perfect-yuv        Use perfect (slower) blitting code for XV YUV blits

Al ejecutar algun rom deberas ver algo parecido en la terminal o consola:

MIT-SHM & XV Extensions Available. trying to use.
Initialized no effect: bitmap depth = 16, color format = RGB 888 (32bpp)
Using Xv & Shared Memory Features to speed up
Average FPS: 50.975033 (14265 frames)

De esta manera puedes redimensionar tu ventana que contiene la ejecución del rom a tiempo de emulación sin mayor problema, ademas hay varias optimizaciones a tiempo de emulación.

Mas información sobre Xv puedes consultar en Wikipedia http://en.wikipedia.org/wiki/X_video_extension