miércoles, 1 de marzo de 2017

Ionic 2: Selección de fecha y hora (2)

Este artículo viene a añadir más posibilidades a la app creada en el artículo "Ionic2: Selección de fecha y hora".

Selección del mes por su nombre

A la hora de mostrar el mes, tanto para su selección como para su visualización, debemos conocer el formato que nos ofrece el componente DateTime de Ionic 2. La propiedad displayFormat posee un rico repertorio de posibilidades para configurar esto. En el caso del mes, tenemos estos formatos:
  • M: Número de mes (1..12)
  • MM: Número de mes (01..12)
  • MMM: Nombre corto de mes (Jan, Feb...)
  • MMMM: Número completo del mes (January, February...)

Por defecto, los nombres vienen dados en inglés, pero es posible modificar sus literales a través de las siguientes propiedades:
  • monthNames="Enero, Febrero...": Especifica los literales para los nombres completos
  • monthShortNames="Ene, Feb...": Especifica los literales para los nombres cortos


Para ver ésto en acción, podemos añadir otra tarjeta al ejemplo:



Formatos de fecha y hora

En la siguiente lista se muestran todos los formatos disponibles para la fecha:
  • YYYY: Año en cuatro dígitos (2017)
  • YY: Año en dos dígitos
  • M: Número de mes (1..12)
  • MM: Número de mes (01..12)
  • MMM: Nombre corto del mes (January)
  • MMMM: Nombre completo del mes (Jan)
  • D: Número del día (1..31)
  • DD: Número del día (01..31)
  • DDD: Nombre Corto del día (Mon)
  • DDDD: Nombre completo del día (Monday)


En esta otra lista se muestran todos los formatos disponibles para la hora:
  • H: Hora en formato 24h (1..23)
  • HH: Hora en formato 24h (01..23)
  • h: Hora en formato 12h (1..12)
  • hh: Hora en formato 12h (01..12)
  • m: Minuto (0..59)
  • mm: Minuto (00..59)
  • s: Segundo (0..59)
  • ss: Segundo (00..59)
  • a: Período 12h (am / pm)
  • A: Período 12h (AM / PM)


Para modificar los literales de los nombres:
  • monthNames="Enero, Febrero...": Nombres completos del mes
  • monthShortNames="Ene, Feb...": Nombres cortos del mes
  • dayNames="Domingo, Lunes...": Nombres completos del día
  • dayShortNames="Dom, Lun...": Nombres cortos del día


Formato ISO 8601

Los valores de fecha del componente DateTime no trabajan con el tipo Date de JavaScript, a fin de evitar problemas de parseo o de formateo de los valores. En su lugar, utiliza el formato string (cadena de texto), utilizando la sintaxis de ISO 8601: YYYY-MM-DDTHH:mm:ssZ

Sin embargo, ISO 8601 permite trabajar en diferentes formatos:
  • YYYY: Año (2017)
  • YYYY-MM: Año y mes (2017-03)
  • YYYY-MM-DD: Fecha completa (2017-03-01)
  • YYYY-MM-DDTHH:mm: Fecha y hora (2017-03-01T15:04
  • YYYY-MM-DDTHH:mm:ssTZD: Zona horaria UTC (2017-03-01T15:04:37.598Z)
  • YYYY-MM-DDTHH:mm:ssTZD: Zona horaria Offset (2017-03-01T15:04:37.598+1:00)
  • HH:mm: Hora y minuto (15:04)
  • HH:mm:ss: Hora, minuto y segundo (15:04:37)


displayFormat y pickerFormat

La propiedad displayFormat del componente DateTime especifica cómo visualizar el valor de la fecha/hora dentro del propio componente.

La propiedad pickerFormat especifica qué columnas, en qué orden y en qué formato se muestran los campos a seleccionar por el componente DateTime




Rango de fechas

Las propiedades min y max del componente DateTime definen la fecha mínima y máxima que se puede seleccionar. En el ejemplo habíamos introducido únicamente el año, por lo que asume, por defecto, el 1 de Enero de el año para la propiedad min, y el 31 de Diciembre para el año en la propiedad max.

Para especificar rangos más concretos, se debe concretar las fechas en formato YYYY-MM-DD. Por ejemplo, para especificar un rango entre el 15 de Mayo y el 30 de Junio de 2017, la configuración sería la siguientes:

min="2017-05-15" max="2017-06-30"

Enlaces de interés

Ionic 2: Selección de fecha y hora

En el siguiente ejemplo vamos a mostrar paso a paso cómo construir una sencilla app en Ionic 2, la cual permitirá al usuario introducir y visualizar fechas y horas.


Crear la app en Ionic 2

El primer paso será crear la aplicación, construyendo toda la estructura necesaria. Para ello, accederemos a la consola del sistema y accederemos al directorio en donde vayamos a construir la aplicación. A continuación, introduciremos el siguiente comando:

$ ionic start fechas blank --v2 --ts

Este comando creará el directorio fechas, dentro del cual se creará toda la estructura necesaria para nuestra app. Los parámetros utilizados son:

  • fechas: nombre de la app
  • blank: Nombre de la plantilla (template) que se utilizará para esta app
  • --v2: La app se creará en Ionic 2 (si se omite ser creará en Ionic 1)
  • --ts: Uso de TypeScript

Editar la app

Una vez construida la app, el siguiente paso será abrir el proyecto en un editor o, preferiblemente, en un IDE. Recomiendo utilizar Visual Studio Code o Atom, pero puedes usar el que más te guste.

Código de home.ts

El archivo home.ts (contenido en la carpeta fechas/src/pages) contiene la lógica de negocio de la página principal (y única de la app). Para este ejemplo, no se necesitará nada más que declarar e inicializar las propiedades de dicha página:
  • fechaCorta: Fecha utilizada para la fecha corta (Mes y Año)
  • fecha: Fecha utilizada para la fecha completa (Día, Mes y Año)
  • minFecha: Fecha mínima a gestionar. En este caso se hará por año, que será el año actual menos cinco años
  • maxFecha: Fecha máxima a gestionar. En este caso se hará por año, que será el año actual más cinco años
Al inicializar las fechas, éstas obtendrán el momento actual: día, mes, año, hora, minuto, segundo y milisegundo.

La fecha se almacenará en una cadena (string) con formato ISO 8601: YYYY-MM-DDTHH:mm:ssTZD.

El código para home.html será el siguiente:

import { Component } from '@angular/core';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  fechaCorta: string = new Date().toISOString();
  fecha: string = this.fechaCorta;
  minFecha: string = (new Date().getFullYear()-5).toString();
  maxFecha: string = (new Date().getFullYear()+5).toString();
}

Código de home.html

El archivo home.html contiene la vista de la página. En esta vista se visualizarán tres bloques o secciones (card), cada uno de los cuales gestionará y visualizará un ejemplo de fecha y/o hora.

Comenzaremos con el esqueleto básico de esta página:


La parte de ion-heade mostrará, en la parte superior de la página, una cabecera con un título (Fechas). Esta cabecera es común en todas las apps, donde, además de mostrar el título de la página, permite también albergar elementos de navegación, como botones para volver atrás, o sidemenus (el típico botón "hamburguesa", con tres líneas, que despliega un menú lateral).

El contenido de la página estará encerrado en el componente ion-content, declarado entre las etiquetas correspondientes. Se han declarado tres comentarios TODO, que sustituiremos en cada caso.

Card 1: Fecha corta

Ionic 2 posee un rico repertorio de componentes, los cuales poseen características concretas de la app, y que tratan de emular, tanto el diseño como la experiencia de usuario, propios de la interfaz de usuario del smartphone.

El componente card representa un bloque de contenido (una tarjeta). Pero no nos engañemos: en Ionic 2, una tarjeta puede ser simple o muy compleja, dependiendo del contenido que deseemos mostrar (consultar más info en: http://ionicframework.com/docs/v2/components/#cards).


El código de esta tarjeta es el siguiente (sustituir el primer comentario TODO):



Para nuestro ejemplo, la tarjeta será muy simple. La tarjeta es gestionada por el componente ion-card. Dentro de la tarjeta, podremos definir una cabecera (ion-card-header), la cual contendrá un título. La tarjeta debe mostrar un contenido (ion-card-content). Este contenido, será una lista (ion-list) con dos elementos (ion-item).

El primero de estos elementos, mostrará una etiqueta Fecha (mediante label)

El componente ion-datetime mostrará la fecha actual. Si el usuario toca (pulsa o hace clic) sobre dicha fecha, en la parte inferior de la pantalla aparecerá un elemento visual que permitirá al usuario seleccionar otra fecha, cambiando el mes y el año. Una vez seleccionado, el usuario podrá Cancelar la operación (con lo que retornará a la página principal sin cambios) o aceptar (OK) los cambios realizados, retornano a la página principal. El formato de la fecha (mes y año) se configura mediante las propiedades displayFormat y pikerFormat.

Por último, el segundo elemento de la lista mostrará, en la parte inferior de la tarjeta, un literal (Valor de la fecha:) y la fecha actualmente seleccionada.

El componente ion-datetime actualiza automáticamente el valor de la propiedad fechaCorta, gracias a la directiva [(ngModel)]. Dicha directiva de Angular realiza una vinculación de datos (o data binding) en doble sentido (lee y escribe) a la propiedad fechaCorta. Es decir, que visualiza (lee) el valor de la propiedad, y guarda los cambios (escribe) en la propiedad.



En el segundo elemento de la lista, se produce una vinculación de un único sentido. Cuando se encierra una expresión entre dobles llaves ({{ expresión }}), Angular sustituirá dicha expresión por el valor resultante. Esta vinculación lee el valor de la propiedad fechaCorta y a continuación extrae los 7 primeros caracteres de su valor (usando la función substr() de JavaScript), dando como resultado el año y el mes (recordemos que el valor de esta propiedad es un string que contiene la fecha capturada al iniciar la app, en formato ISO 8601: YYYY-MM-DDTHH:mm:ssTZD).


Card 2: Fecha completa

Esta tarjeta es similar a la anterior. Las diferencias son:
  • Permite manipular y mostrar también el día en la fecha (día, mes y año). Para ello, se modificarán las propiedades displayFormat y pikerFormat
  • Permite establecer un rango de fechas (desde cinco años atrás a cinco años adelante). Estas limitaciones se consiguen mediante las propiedades min y max del componente ion-datetime, y que obtienen sus valores a través de las propiedades minFecha y maxFecha, definidas en home.ts


El código de esta tarjeta es el siguiente (sustituir el segundo TODO):



Para separar el valor de la fecha con respecto al de la tarjeta anterior, se utiliza la propiedad fecha, en lugar de fechaCorta.

Card 3: Hora corta

La mecánica de esta tarjeta es muy similar al de la primera tarjeta. La diferencia radica en que el formato de la fecha es la hora y el minuto, lo que se consigue mediante las propiedades code>displayFormat y pikerFormat. Como sólo afecta al tiempo y no al día, se utiliza también la propiedad fecha.


El código de esta tarjeta es el siguiente (sustituir el tercer TODO):


Ejecutar la app

Para probar la app, ejecutar el siguiente comando en la consola del sistema:

$ ionic serve

Esto compilará todo el código y lo empaquetará en el directorio www de la estructura del proyecto, y a continuación lanzará un navegador web, mostrando la aplicación desde la URL http://localhost:8100/. Recomiendo lanzar la aplicación en Google Chrome, ya que nos permite abrir el entorno de desarrollo y visualizar la app con una apariencia muy parecida a un smartphone o una tablet, pudiendo elegir también dicho dispositivo. Este entorno de desarrollo se obtiene pulsando las teclas Ctrl + Shift + I, o mediante el menú de opciones (tres puntos), opción "Más herramientas" y la opción "Herramientas para desarrolladores". En la parte superior del panel de control, habrá un icono que representa un dispositivo móvil (también se puede pulsar las teclas Ctrl + Shift + M).

Para llevar la app a un dispositivo móvil, previamente hemos de instalar Android Studio (en el caso de un terminal Android) o XCode (en el caso de un terminal iOS). Sin este requerimiento, no se puede compilar y generar los paquetes para dichas plataformas.

El siguiente paso sería agregar la plataforma que deseamos a nuestra aplicación. Para ello, ejecutar los siguientes comandos en la consola del sistema (según corresponda):

$ ionic platform add android
$ ionic platform add ios


Para ejecutar la app en el emulador, ejecutar los siguientes comandos en la consola del sistema (según corresponda):

$ ionic emulate android
$ ionic emulate ios


Si lo que queremos es ejecutar la app directamente en el dispositivo, conectar éste al ordenador y ejecutar los siguientes comandos en la consola del sistema (según corresponda):

$ ionic run android
$ ionic run ios


Enlaces de interés

martes, 4 de octubre de 2016

MAME: una máquina recreativa en tu PC

Recuerdo en mi lejana niñez aquellas vivencias mágicas y sorprendentes en torno a las máquinas recreativas. Ahorraba con ansia algunas monedas de cinco duros (25 pesetas) para controlar aquellos monigotes de luz que surgian de la pantalla: naves, monos, hamburguesas, guerreros, soldados, coches, superhéroes... podías interpretar y controlar casi cualquier personaje y hacer cosas increíbles.

Me vienen a la cabeza títulos como Asteroids, Space Invaders, Galaga, Pacman, Moon Cresta, R-Type, Commando, Green Beret, Tetris, Golden Axe, Altered Beast, Outrun, Ghost'n'Goblins, Bomb Jack, Street Fighter, Double Dragon, Donkey Kong, Metal Slug, 1942... La lista parece interminable, y los recuerdos y experiencias afloran como un incansable manantial.

Podemos revivir todos aquellos juegos gracias al emulador de MAME (Multi Arcade Machine Emulator), el cual está disponible de forma gratuita para Windows, MacOS y Linux, en la siguiente URL: http://www.mame.net


Instalación de MAME


En este artículo explicaré cómo instalar el emulador de MAME en Linux, más concretamente para distribuciones basadas en Ubuntu.

Para ello, abriremos la consola de comandos y ejecutaremos el siguiente comando:

sudo apt-get install mame mame-extra mame-tools mess gnome-video-arcade

Recomiendo también instalar la librería SDL (Simple Directmedia Library, https://wiki.libsdl.org/FrontPage), una librería especial multiplataforma diseñado para proveer una capa para acceso a audio, teclado, joystick y hardware via OpenGL y Direct3D, y es utilizada por emuladores de juegos:

sudo apt-get install libsdl2-dev libsdl-ttf2.0-dev

La interfaz de usuario no es muy atractiva que digamos, por lo que ejecutaremos el siguiente comando:

sudo ln -s /usr/share/games/mame /usr/share/games/xmame

Otra interfaz alternativa es ejecutar directamente Gnome Video Arcade desde la consola:

gnome-video-arcade

La primera vez tardará bastante, pues creará una base de datos con todos los juegos instalados, y analizará cada uno de ellos en búsqueda de problemas.

Cuando instales nuevos juegos, puedes reconstruir la base de datos mediante el siguiente comando:

gnome-video-arcade -b



Nota: Si tienes problemas al instalar los paquetes, posiblemente necesitarás configurar previamente los repositorios:

sudo add-apt-repository ppa:c.falco/mame


Configuración previa


Antes de empezar, hemos de crear el directorio de configuración y generar el archivo de configuración mame.ini mediante estos comandos (atención al punto previo a "mame"):

mkdir $HOME/.mame
cd $HOME/.mame
mame -cc

Si editamos el fichero mame.ini veremos una línea con el parámetro rompath, el cual, por defecto, apunta a las siguientes rutas:

/usr/local/share/games/mame/roms;/usr/share/games/mame/roms

Este parámetro indica al emulador de MAME dónde se encuentran los juegos (o ROMS). Podemos dejar estas rutas, pero prefiero una ruta más fácil de recordar, por lo que la he cambiado por:

rompath        $HOME/mame/roms

Guardo los cambios realizados y creo dicha ruta con los siguientes comandos:

mkdir $HOME/mame
mkdir $HOME/mame/roms

Por último, en el directorio $HOME/.mame deben existir las siguientes carpetas (si no existen, hay que crearlas):
  • cfg
  • comments
  • diff
  • inp
  • memcard
  • nvram
  • roms
  • snap
  • sta

Configurar el joystick o el gamepad

Si vas a utilizar un joystick o un gamepad para disfrutar de tus juegos, será conveniente saber como instalar el joystick en Linux.

El comando lsusb de Linux listará los dispositivos conectados a los puertos USB, para detectar si el joystick o el gamepad está conectado y reconocido.

Con el siguiente comando:

ls -l /dev/input | grep js

Mostrará, de forma secuencial, las conexiones de joystick. Así, el primer joystick será js0, el segundo joystick será js1, y así, sucesivamente.


Si no lo detecta, necesitaremos la herramienta joystick.

En Debian/Ubuntu/Linux Mint:

sudo apt-get install joystick


En Fedora:

su -c 'yum install joystick'

Para que los juegos puedan calibrar el joystick o gamepad, será preciso que configuremos el dispositivo en el directorio correspondiete, para que tenga todos los permisos de escritura y lectura:

sudo chmod 666 /dev/input/js0
sudo chmod 666 /dev/input/js1


Instalar las BIOS de MAME

De fábrica, el emulador de MAME posee un conjunto básico de BIOS, por lo que muchos juegos no funcionarán, y aparecerá un mensaje que vuelve loco a más de uno:

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

Hay que recordar que cada máquina era de un fabricante y tenía su propia BIOS. A veces, había juegos con BIOS específicas y requerían de otros sets.

Podemos conocer la lista de BIOS necesarias en la siguiente URL:

http://www.mamedb.com/category/BIOS

Name Year Manufacturer File Category Score
Acclaim PSX  1995  Acclaim  acpsxBIOS7.51
Arcadia System BIOS  1988  Arcadia Systems  ar_biosBIOS7.50
Atari PSX  1996  Atari  atpsxBIOS3.29
Atlus PSX  1996  Atlus  atluspsxBIOS4.08
Baby Phoenix/GV System  1995  Konami  konamigvBIOS8.00
Crystal System BIOS  2001  BrezzaSoft  crysbiosBIOS7.11
DECO Cassette System  1981  Data East Corporation  decocassBIOS7.00
Hyper NeoGeo 64 Bios  1997  SNK  hng64BIOS6.95
Max-A-Flex  1984  Exidy  maxaflexBIOS7.60
Mega Play BIOS  1993  Sega  megaplayBIOS6.62
Mega-Tech  1989  Sega  megatechBIOS6.57
Multi Amenity Cassette System BIOS  1995  I'Max  macsbiosBIOS8.00
Neo-Geo  1990  SNK  neogeoBIOS6.83
Nintendo Super System BIOS  1969  Nintendo  nssBIOS7.45
PGM (Polygame Master) System BIOS  1997  IGS  pgmBIOS7.57
PlayChoice-10 BIOS  1986  Nintendo of America  playch10BIOS6.50
PS Arcade 95  1997  Eighting / Raizing  psarc95BIOS7.00
ST-V Bios  1996  Sega  stvbiosBIOS7.26
Super Kaneko Nova System BIOS  1996  Kaneko  sknsBIOS7.75
System GX  1994  Konami  konamigxBIOS5.00

Name Year Manufacturer File Category Score
Taito FX1  1995  Taito  taitofx1BIOS7.36
Taito GNET  1997  Taito  taitognBIOS8.20
TPS  1997  Tecmo  tpsBIOS6.45
ZN1  1995  Capcom  cpzn1BIOS7.90
ZN2  1997  Capcom  cpzn2BIOS9.00

Y descargar las BIOS buscando entre las ROMS de Emuparadise:

http://www.emuparadise.me/M.A.M.E._-_Multiple_Arcade_Machine_Emulator_ROMs/7

También podemos buscar las BIOS necesarias y descargarlas individualmente (vienen empaquetadas y comprimidas en archivos ZIP):

http://www.emulab.it/test/index-bios.php?t=1&order=2&dir=ASC

También lo puedes encontrar aquí:

http://www.emuline.org/topic/692-all-bios-mame

Pero es recomendable buscar una BIOS pack, en el que tendrás todas las BIOS en un único archivo comprimido. En esta URL puedes descargarte la BIOS pack:

http://www.planetemu.net/roms/mame-bios-pack

Una vez descargado, hay que descomprimir el archivo. Aparecerán todas las BIOS estándar disponibles, cada una en un fichero ZIP.

El siguiente paso será copiar todos esos archivos al directorio configurado para las ROMs (en mi caso en $HOME/mame/roms).

IMPORTANTE: Para asegurar el máximo éxito en la ejecución de los juegos, asegúrate que las BIOS son las más actuales. La versión de la BIOS pack debería coincidir con la última versión (o la más aproximada) a la versión del emulador de MAME (ver en la página oficial de MAME). La última versión en Septiembre de 2016 es la v0.178).


Descargar e instalar los juegos

Ahora viene la parte interesante: los juegos.

Los juegos para las máquinas recreativas estaban encapsulados en chips de memoria no volátil, es decir, que ya estaban grabados y eran imborrables y no reutilizables. Estos chips eran memorias de sólo acceso, o ROMs. Hay multitud de sitios en los cuales descargar juegos para la MAME. He aquí algunos de ellos:

Emuparadise: http://www.emuparadise.me/M.A.M.E._-_Multiple_Arcade_Machine_Emulator_ROMs/7
Free ROMS: http://www.freeroms.com/mame.htm
Cool ROM: http://coolrom.com/roms/mame
ROM World: http://www.rom-world.com/dl.php?name=MAME
Planet Emu: http://www.planetemu.net/roms/mame-roms

Particularmente, prefiero Emuparadise. Además de tener una colección muy completa, posee una gran información sobre cada ROM, en donde podemos conocer qué BIOS pack mínima es necesaria y qué otras BIOS o CHDs son necesarios para que el juego funcione.

Por ejemplo, si buscamos el juego Ghost'n Goblins (seleccionando la letra 'G' en la parte superior),  al bajar hasta la sección "Direct Download Links", además de tener el enlace a la ROM, debajo de éste encontraremos que necesita de una ROM "padre" (o parent ROM) llamada "Ghost'n Goblins (World? set 1)". Sin esta ROM, el juego no funcionará, con el consabido mensaje.


Archivos CHD


Los juegos arcade más modernos, a partir de los años 90, necesitaban muchos más datos para funcionar, y para ello, utilizaban unidades de disco duro, disco láser o CD ROMs. En MAME, Estos juegos necesitan estas unidades comprimidas en archivos CHD, como el Street Figher III.

Para instalar un archivo CHD y poder disfrutar de tu juego, además de la ROM zipeada e instalada en tu directorio ROMS, necesitarás el archivo CHD. Este archivo suele estar zipeado, pero tendrás de descomprimirlo y obtener así el archivo CHD. Una vez obtenido, tendrás que copiarlo en una carpeta con el mismo nombre que el juego, la cual debe estar dentro del directorio ROMS. Así, por ejemplo, en el juego de Street Fighter III, la ROM principal se llama sfiii y el archivo es sfiii.zip. Este archivo se copia a la carpeta ROMS. Este juego posee dos archivos CHD (sf3000.chd y cap-sf-3.chd). Ambos archivos se deben copiar a la carpeta sfiii dentro de la carpeta ROMS.

En Emuparadise, las ROMs de los juegos suelen incluir también los enlaces a sus archivos CHD correspondientes. No obstante, en DOPEROMS podrás encontrar los CHDs que puedas necesitar. El enlace es el siguiente: http://www.doperoms.com/roms/Mame_Chd/S.html


¿Por qué no funcionan algunas ROMS de MAME?


Tranquilo, no eres el único al que le pasa. Intentas lanzar un juego y MAME te dice que faltan algunos ficheros, que el juego no funciona al 100%, que falta alguna ROM...

Intentaré explicar por qué pasa.

Una de las razones es por el cambio de releases de MAME. Si te fijas en Emuparadise, el enlace de descarga de cada ROM viene acompañada de la release o versión de MAME a partir de la cual funciona.

Algunos juegos requieren de su propia BIOS. Esto lo encontrarás en juegos de Neo-Geo, Playchoice-10, Convertible Video System, Deco Cassette, MegaTech, MegaPlay, ST-V Titan u otros. De las BIOS ya hablamos al principio, y se instalan como si fueran ROMs de juegos.

Otra razón es que algunos juegos requieren de CHDs. Como se comentó anteriormente, un CHD es un dispositivo de almacenamiento adicional (disco duro, CDROM, Laser Disc) que necesita el juego. El contenido de este dispositivo es comprimido en un archivo especial llamado CHD, y debe incluirse en el directorio de juego correspodiente.

Algunos juegos son clones de juegos originales, o bien versiones alternativas de dichos juegos. Estos juegos se solapan y modifican propiedades tales como fechas de copyright, bootlegs, etc.  Para conocer los juegos clonados, puedes ejecutar desde la consola el comando mame -listclones

De un juego pueden aparecer multitud de versiones. Tanto las versiones como algunos juegos clonados necesitan de una ROM padre (parent ROM), la cual debe estar alojada en el directorio ROMS para que puedan funcionar.

Podemos comprobar si una ROM es correcta mediante el siguiente comando:

mame -verifyroms

Por ejemplo, para verificar el juego Combat School, utilizaremos:

mame -verifyroms combatsc

Si encontrase algún problema, informaría sobre el mismo, indicando qué archivo/s está/n generando dicho problema.


Consejos para descargar ROMs

EmuParadise es una gran base de datos que incluye ROMs de diversas máquinas, en diferentes idiomas y las diferentes versiones que éstas lanzaron. He aquí algunos consejos para no volvernos locos:

1) Evitar aquellas ROMs que no vienen acompañadas de una screenshot (pantallazo)
2) Evitar aquellas ROMs que son de máquinas lúdicas, propias de casinos o casas de apuestas. Las reconocderás rápidamente por que, además de venir sin screenshot, en el nombre, entre paréntesis, indican que máquina es. He aquí algunas de ellas: Scorpion, Bellfruit, Maygay, Ace, Empire, Mazooma. Casino, Barcrest, Mdm, Vivid. JPM, SYSTEM5, Bwb, Crystal, Impulse, EPOCH...
3) Evitar aquellas ROMs que sean de máquinas de Pinball. Se reconocen rápidamente porque en la Screenshot aparecerá el texto Pinball.
4) ROMs que funcionan en un alto porcentaje: las de NeoGeo y Deco Cassete (no olvidar tener estas BIOS instaladas), las de Taito
5) Entre varias ROMs, buscar la versión más alta o bien la ROM padre
6) Fijarse bien si necesita de otras ROMs o de CHDs. En tal caso, descargar también éstas
7) Hay muchos clones de juegos originales. Desde luego, si utilizas solamente el original, te evitarás tener varios juegos clonados, a no ser que el clon sea algo diferente del original y te guste.
8) Entre varios lenguajes, te recomiendo descargar la inglesa (US o USA) o la internacional (World)
9) Los ROMs de tipo "bootleg" son ediciones no autorizadas que se hacen pasar como originales. Por tanto, puedes ahorrarte esta descarga