Emulador NeoGeo a la RPi
Contingut
Introducció
Instal.lació
Com es comenta dono permisos al frame buffer device.
$ sudo chmod 777 /dev/fb0
Per mi no se si és important, però ho faig per si de cas.
- http://www.raspberrypi.org/forums/viewtopic.php?t=22302
- http://blog.sheasilverman.com/2012/06/neo-geo-emulation-on-the-raspberry-pi/
- http://cogemelamatricula.net/gngeo-jugando-a-la-neo-geo-desde-linux/
post recent:
Gngeo-Pi is compliant with roms set of mame 0.138.
Descarrego la última versió (0.8) de:
Descomprimeixo i instal.lo directament sobre /home/pi:
wget -O gngeo-pi-0.85.tar.gz https://github.com/ymartel06/GnGeo-Pi/blob/master/releases/sources/gngeo-pi-0.85.tar.gz?raw=true tar xvfz gngeo-pi-0.85.tar.gz -C /home/pi/ ./configure --host=arm-linux --target=arm-linux --disable-i386asm --prefix="/home/pi/gngeo-pi-0.85/installdir" make sudo make install
I l'executable és
/home/pi/gngeo-pi-0.85/installdir/bin/arm-linux-gngeo
Help:
/home/pi/gngeo-pi-0.85/installdir/bin/arm-linux-gngeo --help
La manual page està a:
man /home/pi/gngeo-pi-0.85/installdir/share/man/man1/arm-linux-gngeo.1
LLegim detingudament la manual page:
Like MAME, the memory layout of each game is defined by a driver, which
is simply a plain text description of the game's characteristics needed
by the emulator. The driver database is installed in
/usr/local/share/gngeo/romrc. If a new program is wanted to be run in
gngeo, it must be added to that database.
The simplest form of operation is the following:
$ gngeo <game>
where <game> is the MAME name of a Neo-Geo ROM set corresponding to a game.
$ gngeo <file>
where <file> point to a zip that contain the Neo-Geo ROM set.
By default, gngeo looks for the BIOS images and ROM collection in
/usr/share/gngeo. This can be changed with the -i or --rompath option.
For example:
$ gngeo -i /home/flurbly/neogeo/roms mslug2
The ROM location, as well as any other options, can be persistently set
in the $HOME/.gngeo/gngeorc. A sample gngeorc can be found in
/usr/share/doc/gngeo; copy it into your .gngeo directory and adapt it
to your needs.
Configuració
Seguint les instruccions, la meva configuració serà:
cd /home/pi mkdir roms_neogeo
Copiem la bios image en el mateix directori que contindrà les roms:
$ mv neogeo.zip roms_neogeo/
(nota: no tots els fitxers neobios.zip que es troben per la xarxa funcionen).
Faig una prova amb dues roms. Copio les roms al directori adient:
$ scp mslug.zip pi@192.168.1.35:/home/pi/roms_neogeo $ scp garoun.zip pi@192.168.1.35:/home/pi/roms_neogeo ...
Fixar-se que aquestes ROMs són bastant pesades.
-d, --romrc=[path]
Give the path to locate the romrc file. This defines the layout
of the games and is required to run any Neo-Geo games.
Aquest fitxer el trobem a /home/pi/gngeo-pi-0.85. És la base de dades de tots els jocs. Si volem jugar a un joc que no estigui a la llista, s'haurà d'actualitzar.
Invoquem el programa, encara que sabem que de moment no funcionarà:
$ /home/pi/gngeo-pi-0.85/installdir/bin/arm-linux-gngeo -d /home/pi/gngeo-pi-0.85 -i /home/pi/roms_neogeo mslug
The ROM location, as well as any other options, can be persistently set
in the $HOME/.gngeo/gngeorc. A sample gngeorc can be found in
/usr/share/doc/gngeo; copy it into your .gngeo directory and adapt it
to your needs
NOTA: l'opció -d fa referència al directori on es troba el datafile: gngeo_data.zip. És possible que el tingui a /home/pi/gngeo-pi-0.85/installdir/share/gngeo/gngeo_data.zip. En qualsevol cas, en comptes de fer servir l'opció -d el millor és definir el fitxer de configuració /home/pi/.gngeo, on hi ha l'opció datafile. El mateix podem dir per al directori on es troben les roms: no cal utilitzar l'oopció -i, sinó fer servir la directiva rompath i biospath que es troba en el fitxer de configuració. Recordar que el fitxer neogeo.zip és la bios, i és obligatori.
El fitxer de configuració d'exemple està a ~/gngeo-pi-0.85/sample_gngeorc. El copiem a .gngeo
mkdir /home/pi/.gngeo cp /home/pi/gngeo-pi-0.85/sample_gngeorc /home/pi/.gngeo/gngeorc joe /home/pi/.gngeo/gngeorc ... rompath /home/pi/roms_neogeo biospath /home/pi/roms_neogeo datafile /home/pi/gngeo-pi-0.85/installdir/share/gngeo/gngeo_data.zip
i després hi ha molts altres temes relacionats amb la visualització i la configuració del teclat/joystick.
Invoquem:
$ /home/pi/gngeo-pi-0.85/installdir/bin/arm-linux-gngeo -d /home/pi/gngeo-pi-0.85 mslug
Efectivament està funcionant el fitxer de configuració /home/pi/.gngeo/gngeorc doncs en invocar l'executable surten llsitades totes les opcions que s'han definit en aquest fitxer.
Les instruccions bàsiques per començar a jugar són:
- Press 3 to give Player 1 a credit, 4 to give Player 2 a credit. Press 1 to start player 1, 2 to start player 2. Up down left and right control player 1, and z, x, a, and s map to the Neo Geo’s A B C and D buttons.
I és que el sistema NeoGeo funciona amb 4 botons (A, B, C i D) a part del joystick.
ROMs
Jocs importants de NeoGeo:
- King of Fighters 98
- Metal Slug X
- Metal Slug – Super Vehicle-001
- Samurai Shodown 2
- Blazing Star
- Fatal Fury Special (set 1, set 2)
- Magical Drop III
- Neo Turf Masters
- Pulstar
- Street Hoop
- The Last Blade (set 1, set 2)
- Windjammers
- Waku Waku 7
- King of Monsters
Les ROMs per a gngeo han de ser compatibles amb la versió 0.138 de MAME. No sé si és aquest el cas, però al final tinc un joc de ROMs que funciona, l'he tret de:
NeoGeo Set Part 01 NeoGeo Set Part 02 NeoGeo Set Part 03 NeoGeo Set Part 04
que es descomprimeixen tots junts com a Neo-Geo.
NOTA. En el cas de què hagués tingut problemes amb la versió de les ROM, hi ha un programa, clrmamepro, que funciona amb wine, i que pot fer la conversió entre versions de ROM.
Snapshots de les ROMs
En aquesta direcció hi ha molts recursos per descarregar, snapshots de les diferents consoles.
Registre:
- username: joanillo
- joanqc@gmail.com
- jq****
Resolució 640x480
Més Configuració
Per tal de què es vegi el joc a pantalla sencera hi ha l'opció scale2x. Jugo amb les diferents configuracions. (Fer una còpia de com queda al final rl fitxer .gngeo/gngeorc)
Configuració original del teclat:
# Qwerty configuration: # Key configuration # order : A,B,C,D,START,COIN,UP,DOWN,LEFT,RIGHT # please see SDL_keysym.h for key definition # or push F4 during game : the keysym code of # keys will be printed (also work for joysticks) # same thing as joypads for hotkeys # Azerty configuration: # p1: w,x,q,s,&,",up,down,left,right # p2: l,m,o,p,é,',NUM 8,NUM 5,NUM 4,NUM 6 #p1key 119,120,113,115,38,34,273,274,276,275 #p2key 108,109,111,112,233,39,264,261,260,262 # Qwerty configuration: # p1: z,x,a,s,1,3,up,down,left,right # p2: l,;,o,p,2,4,NUM 8,NUM 5,NUM 4,NUM 6 # p1: z,x,a,s,1,3,up,down,left,right # p2: l,;,o,p,2,4,NUM 8,NUM 5,NUM 4,NUM 6 p1control A=K122,B=K120,C=K97,D=K115,START=K49,COIN=K51,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27 p2control A=K108,B=K59,C=K111,D=K112,START=K50,COIN=K52,UP=K264,DOWN=K261,LEFT=K260,RIGHT=K262,MENU=K27
A NeoGeo hi ha 4 botons que es fan servir, i en la meva màquina els hauria de fer servir. En les màquines NeoGo originals els botons ABCD estan alineats amb una mica de corba.
Integració amb el frontend joanillo_arcade_frontend
Puc cridar a l'emulador fent que entri a un joc directament, o entrant al menú principal de l'emulador:
$ /home/pi/gngeo-pi-0.85/installdir/bin/arm-linux-gngeo -d /home/pi/gngeo-pi-0.85 mslug
El problema està en què després de jugar a un joc, amb la tecla ESCAPE surto del joc, i em quedo en el menú principal de l'emulador. Aleshores he d'anar a EXIT i ENTER. La integració amb joanillo_arcade_frontend significa que desde el frontend he de llençar al joc, i quan surti del joc (amb la tecla ESCAPE oiginalment, que s'ha de canviar a la tecla 0), he de tornar al front-end, sense passar pel menú.
Per aconseguir aquesta funcionalitat s'ha de fer canvis en el codi i recompilar el codi. Les diferents proves que s'han fet estan en un document. Els canvis que s'han de fer finalment són els següents.
El primer que vull és que la tecla 0 serveixi per sortir del joc i tornar al front-end (originalment és el ESCAPE):
fitxer emu.c sí
línia 495
switch (scancode) {
case SDLK_0:
neo_emu_done = 1;
break;
case SDLK_ESCAPE:
neo_emu_done = 1;
break; // ESC
fitxer event.c (aquest és el canvi important)
línia 217
case SDLK_ESCAPE:
return 1;
break;
case SDLK_0:
return 1;
break;
Ara vull que en sortir del joc també es surti de l'emulador (i per tant tornarà al front-end, si crido a l'emulador des del front-end):
prova 10: menu.c línia 1014
int menu_event_handling(struct GN_MENU *self) {
//static SDL_Event event;
GN_MENU_ITEM *mi;
int a;
LIST *l;
return MENU_EXIT; //nova línia
switch (wait_event()) {
...
La clau està en introduir la línia return MENU_EXIT;, és a dir, no deixo entrar en el bucle.
Treure tota la verbositat de les opcions quan comença el joc: (TBD) deu estar a main.c, línia 88
cf_init(); /* must be the first thing to do */ cf_init_cmd_line(); cf_open_file(NULL);
Canviar el nivell de joc per defecte
Dins del joc, amb F3 accedeixo al test. Vaig a DIP SOFT o algo així, i aleshores puc canviar opcions de joc per defecte com ara el level. El tema és que el nivell per defecte de Kings of Fighter està a 4, que és massa difícil, i ho deixo a 2. Hauria de revisar el level per a tots els jocs, per ex, canviant-los a nivell 0 o 1. (amb el botó 3 entrem, i 4/5 canviem i guardem, crec).
La configuració del joc es guarda en un fitxer de configuració per cada joc. Per ex, per a Metal Slug:
~/.gngeo/mslug.nv
Per tant, aquesta carpeta també s'ha de copiar per tal de no haver de repetir tota la feina de canviar el nivell de dificultat dels jocs.
Modificació dels botons
/usr/include/SDL/SDL_keysym.h
SDLK_0 = 48,
SDLK_1 = 49,
SDLK_2 = 50,
SDLK_3 = 51,
SDLK_4 = 52,
SDLK_5 = 53,
SDLK_6 = 54,
SDLK_7 = 55,
SDLK_8 = 56,
SDLK_9 = 57,
#p1control A=K122,B=K120,C=K97,D=K115,START=K49,COIN=K51,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27
p1control A=K51,B=K52,C=K53,D=K54,START=K49,COIN=K50,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27
Això implica que si vull tindre el botó D hauré de tenir 7 botons en comptes de 6, i que el START i el COIN han de ser botons diferents. Això implica un canvi en la configuració del mame4all i en el disseny dels CPOs. Seran 3 botons a dalt i 4 a baix. Per al mame4ll, com que sobra un botó, puc fer-lo servir de PAUSE.
El CPO (Control Panel Overlay) per a un sol jugador quedarà:
ESC START COIN * * * * * * * A B C D CAT FAV EMU PAUSE
creat per Joan Quintana Compte, gener 2015