AdvanceMame

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Fins ara havia utilitzat l'emulador mame4all amb el romset de MAME 0.37b5. Ara és el moment d'utilitzat també el advancemame (amb el romset 0.106) per complementar molts jocs que no estan al mame4all o que no funcionen

MAME4ALL is a MAME fork that is built for Mobile devices (Phones, Tablets, Portable Linux Consoles etc.) and as such, configuration options are more limited. PiMAME4ALL is a good deal faster (250-300%) than AdvMAME although this is not immediately noticeable due to both being able to run many titles fullspeed. It is particularly evident with higher performance boards, Neo-Geo Titles, Smash TV, OutRun, N.A.R.C, Mortal Kombat etc. which AdvMAME cannot run anywhere close to 100%.

El tema del so a mame4all no és cap meravella. Sembla ser que a AdvanceMame és millor.

La idea és no repetir jocs. Els jocs que funcionen bé amb mame4all deixar-los, i complementar-los amb els jocs de Advancemame que no tinc. Una llista completa dels jocs que trobarem a AdvanceMame la trobem a:

Instal.lació i configuració

Utiltiza la versió de les roms de MAME 0.106

A MAME and MESS port with an advanced video support for Arcade Monitors, TVs, and PC Monitors. It also contains a bootable Linux LiveCD/USB, a frontend with animated MNG/MP3 snapshots, a rom manager, and recompression utilities for compressed files.

A mi només m'interessa el binari i la configuració dels botons. No m'interessa el frontend, etc. Descarreguem la versió 1.2

$ ./configure
$ make
...
obj/mame/linux/blend/cpu/sh2/sh2.o
src/cpu/sh2/sh2.c: In function ‘sh2_get_info’:
src/cpu/sh2/sh2.c:3217:1: error: unrecognizable insn:
(insn 2002 2001 2003 183 (set (subreg:SI (reg:DI 362 [ sh2.irq_line_state ]) 0)
        (sign_extend:SI (mem/s/j/c:QI (plus:SI (reg/f:SI 361)
                    (const_int 260 [0x104])) [0 sh2.irq_line_state+0 S1 A32]))) src/cpu/sh2/sh2.c:3111 -1
     (nil))
src/cpu/sh2/sh2.c:3217:1: internal compiler error: in extract_insn, at recog.c:2109
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
Coniguració del format de la pantalla: és important ficar el format de la pantalla que faig servir. Per exemple, en la tele SAMSUNG:

To fix the error in my build, I removed the optimisation settings from the Makefile as follows:
Original:
CONF_CFLAGS_OPT= -O2 -fomit-frame-pointer -fno-merge-constants -Wall -Wno-sign-compare -Wno-unused
Modified:
CONF_CFLAGS_OPT= -fomit-frame-pointer -fno-merge-constants -Wall -Wno-sign-compare -Wno-unused
If you are still having problems you can just comment out the whole optimisation line with a # and then if will definitely compile.

M'he trobat amb un altre problema, però finalment compila bé (triga molt). L'executable està a l'arrel del projecte com a enllaç simbòlic:

advmame -> obj/mame/linux/blend/advmame

All the Advance programs require a configuration process to work correctly. To create a default configuration file run the application from a command shell and a standard configuration .rc file will be created. In Linux, Mac OS X and other Unix, the configuration file is created in the user home directory in the subdirectory .advance/.

Fitxer de configuració:

$ joe .advance/advmame.rc
dir_rom /home/pi/.advance/rom:/home/pi/pimame/roms/advmame
actualitzo on jo tinc les roms:
dir_rom /home/pi/roms/advancemame:/home/pi/.advance/rom:/home/pi/pimame/roms/advmame

Les roms que m'he descarregat estant totes en majúscules (ex PACPLUS.ZIP). Per tal de què funcioni ho he de renombrar a minúscules (pacplus.zip), però el fitxer és el correcte.

./advmame pacplus

Si no ho converteixo a minúsuscula, diu que no troba els fitxers. Però els fitxers que no troba són els que hi ha dins de la ROM, que vol dir que tinc la versió del fitxer correcte.

Aquí trobo la llista de totes les roms que hi ha a les roms 0.106 de MAME:

Com que està en format XML, he de parsejar el fitxer tal com es fa aquí:

Format de la pantalla:

display_aspectx 16
display_aspecty 9

i en un monitor 4:3:

display_aspectx 4
display_aspecty 3

translucency: per tal de veure bé els menus de configuració que s'accedeixen amb TAB, és important ficar:

ui_translucency 0.8 

velocitat: RPi B+ / RPi 2

Ho he compilat per primera vegada amb La RPi B+. I el primer joc que he provat és el pacplus, que funcionava de meravella (full-speed). Però d'altres jocs que he provat com el 1942, P47 o Pang van lents. Les bones notícies és que amb la RPi2 van perfecte (full-speed). Ho he provat amb el Pang, però amb els altres hauria de ser també.

El fet de què hi hagi jocs que van bé amb la RPi2 i no amb la RPi B+ té certa lògica. A la romset 0.106 que fa servir AdvanceMame hi ha molts més jocs (5000 aprox), i que abarquen des dels jocs antics dels 80 fins als més nou de finals dels 90. És lògic que els que són més nous, pesen més i tenen més gràfics no vagin bé amb la RPi B+. Per exemple, en el romset 0.106 trobem jocs com el mslug o jocs de nintendo.

Per tant, a l'hora de classificar jocs té certa lògica en classificar si són jugables amb la RPi B+ o només amb la RPi 2.

NOTA: advancemame només ho implemento amb la RPi 2. La majoria de roms van lentes amb la RPi B+.

Configuració de les tecles

Les tecles es poden configurar accedint amb TAB, però és millor tocar directament el fitxer de configuració. He de vigilar que no hi hagi tecles que es repeteixin. (Només les tecles que hem editat són les que apareixen en el fitxer de configuració).

input_map[start1] keyboard[0,1]
input_map[start2] keyboard[0,9]
input_map[start3] 
input_map[start4] 
input_map[coin1] keyboard[0,2]
input_map[coin2] 
input_map[coin3] 
input_map[coin4] 
input_map[service_coin1] keyboard[0,x]
input_map[p1_up] keyboard[0,up]
input_map[p1_down] keyboard[0,down]
input_map[p1_left] keyboard[0,left]
input_map[p1_right] keyboard[0,right]
input_map[p1_doubleright_up] 
input_map[p1_doubleright_down] 
input_map[p1_doubleright_left] 
input_map[p1_doubleright_right] 
input_map[p1_doubleleft_up] 
input_map[p1_doubleleft_down] 
input_map[p1_doubleleft_left] 
input_map[p1_doubleleft_right] 
input_map[p1_button1] keyboard[0,3]
input_map[p1_button2] keyboard[0,4]
input_map[p1_button3] keyboard[0,5]
input_map[p1_button4] keyboard[0,6]
input_map[p1_button5] keyboard[0,7]
input_map[p1_button6] keyboard[0,8]
input_map[p1_mahjong_a] 
input_map[p1_mahjong_b] 
input_map[p1_mahjong_c] 
input_map[p1_mahjong_d] 
input_map[p1_mahjong_e] 
input_map[p1_mahjong_f] 
input_map[p1_mahjong_g] 
input_map[p1_mahjong_h] 
input_map[p1_mahjong_i] 
input_map[p1_mahjong_j] 
input_map[p1_mahjong_k] 
input_map[p1_mahjong_l] 
input_map[p1_mahjong_m] 
input_map[p1_mahjong_n] 
input_map[p1_mahjong_bet] 
input_map[p2_up] keyboard[0,i]
input_map[p2_down] keyboard[0,k]
input_map[p2_left] keyboard[0,j]
input_map[p2_right] keyboard[0,l]
input_map[p2_button1] keyboard[0,a]
input_map[p2_button2] keyboard[0,b]
input_map[p2_button3] keyboard[0,c]
input_map[p2_button4] keyboard[0,d]
input_map[p2_button5] keyboard[0,e]
input_map[p2_button6] keyboard[0,f]

Sortir amb el '0'

La paraula clau per saber mapejar la tecla de sortida de l'emulador, que per defecte és ESCAPE, és: KEYCODE_ESC.

Uiltitzo find i em porta, seguint diferents pistes, als fitxers mame.c, usrintrf.c, inptport.h i finalment inptport.c.

./mame.c:			current_phase = MAME_PHASE_EXIT;
./mame.c:	exit_pending = TRUE;
./mame.c:	add_exit_callback(destroy_machine);
./usrintrf.c:		mame_schedule_exit();

void mame_schedule_exit(void)
{
	exit_pending = TRUE;
	
/* if the user pressed ESC, stop the emulation as long as menus aren't up */
if (menu_handler == NULL && input_ui_pressed(IPT_UI_CANCEL))
	mame_schedule_exit();
		
INPUT_PORT_DIGITAL_DEF( 0, IPG_UI,      UI_CANCEL,			"UI Cancel",			SEQ_DEF_1(KEYCODE_ESC) )

Per tant, els canvis que s'han de fer al fitxer inptport.c són:

//INPUT_PORT_DIGITAL_DEF( 0, IPG_UI,      UI_CANCEL,			"UI Cancel",			SEQ_DEF_1(KEYCODE_ESC) )
INPUT_PORT_DIGITAL_DEF( 0, IPG_UI,      UI_CANCEL,			"UI Cancel",			SEQ_DEF_1(KEYCODE_0) )

Però el keycode 0 ja s'està utilitzant:

//INPUT_PORT_DIGITAL_DEF( 0, IPG_OTHER,   SERVICE2,			"Service 2",    		SEQ_DEF_1(KEYCODE_0) )
INPUT_PORT_DIGITAL_DEF( 0, IPG_OTHER,   SERVICE2,			"Service 2",    		SEQ_DEF_1(KEYCODE_MINUS) )

Finalment, per tal de què no surti el pop-up empipador de confirmar que volem sortir, en el fitxer de configuració principal fiquem:

misc_safequit no 

creat per Joan Quintana Compte, gener 2016