PlayStation 1: pcsx-reARMed
Contingut
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
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
- http://www.usgamer.net/articles/20-ps1-games-we-want-to-play-on-playstation-now
- http://retro-sanctuary.com/Top-100-PS1-Games-Page-1.html
- http://www.denofgeek.com/games/playstation/29182/the-top-50-underappreciated-ps1-games
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