PlayStation 1: pcsx-reARMed

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Hem de compilar a la RPi2. No cal provar-ho a la Rpi B+.

Compilació

Descarreguem el projecte:

$ git clone --recursive https://github.com/notaz/pcsx_rearmed.git
$ ./configure 
architecture        arm
platform            generic
built-in GPU        unai
sound drivers        oss alsa pulseaudio sdl
plugins             gpu_gles.so gpu_unai.so gpu_peops.so spunull.so 
C compiler          gcc
C compiler flags     -mfpu=vfp -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -D_FILE_OFFSET_BITS=64 -Wno-unused-result
libraries           -L/usr/lib/arm-linux-gnueabihf -lSDL -lpulse -lasound -lpng  -ldl -lm -lpthread -lz
linker flags        
enable dynarec      yes
ARMv7 optimizations no
enable ARM NEON     no
TI C64x DSP support no
tslib support       yes
OpenGL ES output    yes

Compila sense problemes a la RPi2.

$ make
$ ./pcsx

NOTA: el mateix codi (pcsx_rearmed) l'he compilat i funciona en el portàtil, encara que no sigui arquitectura ARM. Per tant, puc practicar la configuració en el portàtil.

Execució i configuració

La primera vegada que executem ens avisa de què no tenim la bios file, que s'ha de copiar a la carpeta bios/.

Llegir:

The emulator can simulate BIOS, which means BIOS files are not required,
however implementation is not complete and some games still need real BIOS
to work. To use real BIOS, copy uncompressed BIOS files to bios/ directory
which itself should be in main emulator directory.

When the file is copied, BIOS should be selected in Options->BIOS/Plugins menu

Descarrego la BIOS de http://www.freeroms.com, que conté el fitxer bios.bin

(i tinc una altra versió, que conté moltes bios?)

$ scp PSX.zip  pi@192.168.1.38:/home/pi/pcsx_rearmed/bios

i descomprimim

Descarrego les ROMs de

Per exemple, provo Ace Combat 2 (345MB).

$ ./pcsx

Puc navegar pel menú i escollir la rom (no és una rom, és un CD image). Puc veure una mica com funciona tot això.

$ ./pcsx --help
PCSX-ReARMed r22-7-gcc37681
 pcsx [options] [file]
	options:
	-cdfile FILE	Runs a CD image file
	-cfg FILE	Loads desired configuration file (default: ~/.pcsx/pcsx.cfg)
	-psxout		Enable PSX output
	-load STATENUM	Loads savestate STATENUM (1-5)
	-h -help	Display this message
	file		Loads a PSX EXE file

Per executar el Ace Combat 2:

$ ./pcsx -cdfile /home/pi/roms/pcsx/ace_combat_2.bin

El fitxer de configuració està a: (per tal de què es creï el fitxer hem de fer Save Global Config)

/home/pi/pcsx_rearmed/.pcsx/pcsx.cfg

i aquí tinc totes les opcions per les quals puc navegar en el menú. Les opcions més importants són:

Bios = bios.bin

És possible que si algun joc no funciona amb aquesta bios, en pugui escollir una altra per la qual sí que funciona.

plat_target.vout_fullscreen = 1

Els controls per defecte:

binddev = sdl:keys
bind backspace = Fast Forward
bind escape = Enter Menu
bind c = player1 SELECT 
bind d = player1 TRIANGLE
bind e = player1 L2
bind r = player1 R1
bind s = player1 SQUARE
bind t = player1 R2
bind v = player1 START
bind w = player1 L1   
bind x = player1 CIRCLE
bind z = player1 CROSS 
bind up = player1 UP   
bind down = player1 DOWN
bind right = player1 RIGHT
bind left = player1 LEFT  
bind f1 = Save State
bind f2 = Load State
bind f3 = Prev Save Slot
bind f4 = Next Save Slot
bind f5 = Toggle Frameskip
bind f6 = Take Screenshot 
bind f7 = Show/Hide FPS   
bind f11 = Toggle fullscreen

Sortir del joc i de l'emulador amb el 0

En la configuració per defecte, la tecla important és la ESC per entrar en el menú. Des del joc, puc entrar en el menú i escollir Exit (amb Enter). Des del frontend de l'emulador el mateix. El meu objectiu és que sempre entraré directament a un joc, i que amb el botó 0 surto del joc i de l'emulador.

Com és habitual utilitzem el find:

$ find /home/joan/ -type f -print | xargs egrep -i MA_MAIN_EXIT | more
./frontend/menu.c:	MA_MAIN_EXIT,
./frontend/menu.c:	case MA_MAIN_EXIT:
./frontend/menu.c:		emu_core_ask_exit();
./frontend/menu.c:	mee_handler_id("Exit",               MA_MAIN_EXIT,        main_menu_handler),

./frontend/main.c:	printf("Exit..\n");
menu.c, línia 2230
	case MA_MAIN_EXIT:
		emu_core_ask_exit();
		return 1;
		
menu.c, línia 2280
mee_handler_id("Exit",               MA_MAIN_EXIT,        main_menu_handler),

main.c, línia 644
	while (!g_emu_want_quit) -> aquest és el bucle principal
	{ ... }
./frontend/menu.c:	} while (!ready_to_go && !g_emu_want_quit);
./frontend/main.h:extern int ready_to_go, g_emu_want_quit, g_emu_resetting;
./frontend/main.c:int ready_to_go, g_emu_want_quit, g_emu_resetting;
./frontend/main.c:	g_emu_want_quit = 1;
./frontend/main.c:	while (!g_emu_want_quit)
main.c, línia 449
void emu_core_ask_exit(void)
{
	stop = 1;
	g_emu_want_quit = 1;
}
main.c, línia 645
	while (!g_emu_want_quit)
	{
		stop = 0;
		emu_action = SACTION_NONE;

		psxCpu->Execute();
		if (emu_action != SACTION_NONE)
			do_emu_action();
	}

Aquest és el bucle principal del joc. do_emu_action(); representa que el joc està funcionant (o més aviat psxCpu->Execute();)

./frontend/main.c:void do_emu_action(void)

Ja ho tinc: main.c, línia 173

	case SACTION_ENTER_MENU:
		toggle_fast_forward(1);
		menu_loop();
		return;

queda de la següent manera:

	case SACTION_ENTER_MENU:
		g_emu_want_quit = 1; //CANVI
		toggle_fast_forward(1);
		//menu_loop(); //CANVI
		return;

i ara només falta en el fitxer de configuració, dir que la tecla per entrar al menú no és ESC sinó també el 0:

bind escape = Enter Menu
bind 0 = Enter Menu

Per tornar a compilar només cal fer make una altra vegada.

Ja podem entrar al joc, i en fer 0 sortim del joc (i de l'emulador):

$ ./pcsx -cdfile /home/pi/roms/pcsx/ace_combat_2.bin

Configuració dels botons

Mando psx.jpg

Si vull recordar el layout del mando de PSX he de canviar la configuració tradicional que he estat fent dels botons:

    *TR     *L1


*QU      *ROD     *R1


    *CR

Per al Player1, el Start és el botó P1, i el Select el botó de COIN. No disposo dels botons de L2 i R2.

Per al Player2, és el mateix, però el problema és que no disposo de dos botons de COIN. La solució és fer dos botons de select (select1 i select2), i que el primer sigui COIN. Per tant, tinc un altre botó, que seria el G.

Amb aquesta configuració puc jugar als jocs de MAME. El que sí que s'ha de mirar és la configuració de SNES i MegaDrive, que potse ara és més intuïtiva.

Player 1:

   *1-P1START    *2-SEL1/COIN

    *TR-7   *L1-8


*QU-6    *ROD-4   *R1-5


    *CR-3

Player 2:

   *G-SEL2/COIN    *9-P2START

    *TR-E   *L1-F


*QU-D    *ROD-B   *R1-C


    *CR-A

I el fitxer de configuració quedaria de la següent manera:

$ joe .pcsx/pcsx.cfg

bind escape = Enter Menu
bind 0 = Enter Menu
bind 1 = player1 START
bind 2 = player1 SELECT
bind 9 = player2 START
bind g = player2 SELECT

bind 3 = player1 CROSS 
bind 4 = player1 CIRCLE
bind 5 = player1 R1
bind 6 = player1 SQUARE
bind 7 = player1 TRIANGLE
bind 8 = player1 L1
bind e = player1 R2
bind w = player1 L2   

bind left = player1 LEFT
bind right = player1 RIGHT
bind up = player1 UP   
bind down = player1 DOWN

bind a = player2 CROSS 
bind b = player2 CIRCLE
bind c = player2 R1
bind d = player2 SQUARE
bind e = player2 TRIANGLE
bind f = player2 L1
bind u = player2 R2
bind y = player2 L2  

bind j = player2 LEFT
bind l = player2 RIGHT
bind i = player2 UP   
bind k = player2 DOWN

Els millors jocs

Els jocs els puc descarregar de:

Muntar el llapis USB

Està explicat aquí:

Funciona bé, tot i que surt la icona de què consumeix corrent i la font d'alimentació va justa. Per tant, el millor seria continuar utilitzant una targeta SD amb la més capacitat possible, i escollir només els millors jocs. Però es pot utilitzar un USB i muntar-lo.


creat per Joan Quintana Compte, març 2016