Emuladors Gameboy (Mednafen)
Contingut
Gameboy - Gearboy (descartat)
Introducció
Instal.lació
Install and configure SDL 2 for development.
$ scp SDL2-2.0.3.tar.gz pi@192.168.1.35:/home/pi $ cd ~/SDL2-2.0.3 Instal.lo les dependències per a la RPi (veure més avall): $ sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev $ sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev $ ./configure $ make $ sudo make install
$ sdl2-config --version 2.0.3
Un cop instal.lada la llibreria SDL 2.0 (de fet ja tenia la versió 2.0.1 instal.lada...), procedeixo a instal.lar l'emulador gearboy:
$ scp Gearboy-master.zip pi@192.168.1.35:/home/pi/
MILLOR: En comptes de descarregar el zip també puc baixar l'estat actual del projecte:
$ svn co https://github.com/drhelius/Gearboy.git
A la RPi:
$ unzip Gearboy-master.zip $ cd ~/Gearboy-master/platforms/raspberrypi/Gearboy $ make ... /usr/bin/ld: main.o: undefined reference to symbol 'vc_dispmanx_element_add' //opt/vc/lib/libbcm_host.so: error adding symbols: DSO missing from command line collect2: ld returned 1 exit status Makefile.include:16: recipe for target 'gearboy.bin' failed make: *** [gearboy.bin] Error 1
Després de bastanta estona dóna un error en la compilació.
Mirar:
'vc_dispmanx_element_add' té a veure amb OpenGL.
Finalment afegeixo -lbcm_host i es soluciona el problema vc_dispmanx_element_add, però aleshores
/usr/bin/ld: ../../../src/audio/Blip_Buffer.o: undefined reference to symbol 'pow@@GLIBC_2.4' //lib/arm-linux-gnueabihf/libm.so.6: error adding symbols: DSO missing from command line collect2: ld returned 1 e
i la solució està aquí
S'ha d'afegir també -lm
LDFLAGS+=-L$(SDKSTAGE)/opt/vc/lib/ -lm -lbcm_host -lGLESv2 -lEGL -lopenmaxil -lvcos -lvchiq_arm -lrt `sdl2-config --libs`
i es crea l'executable gearboy.bin La definició de les tecles està definida a main.cpp
Where is the config file for gearboy? Id like to map the buttons on my custom joystick :( It doesn't seem like there is a config file for Gearboy. The keys are hardcoded in src/input.cpp
Copiem les ROMs:
$ scp * pi@192.168.1.35:/home/pi/roms_gameboy_color
Les roms ja carreguen correctament:
/home/pi/Gearboy-master/platforms/raspberrypi/Gearboy/gearboy-bin /home/pi/roms/gb/speedy_gonzales_-_aztec_adventure.gbc
El problema està en què de moment no funcionen les tecles, que ho hauré d'arreglar. Per tal d'arreglar-ho estudio una mica de SDL2.0 per tal de veure perquè no funcionen els events del teclat. Ho faig a Linux i a la RPi. Segueixo un tutorial de SDL2:
Quan faig una modificació al fitxer main.cpp, per tal de recompilar els fitxers main.o i main.cpp sense haver de recompilar tot el projecte (que necessita 20 minuts):
#rm main.o #rm gearboy.bin cc -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I../../../src/ -I./ -c main.cpp -o main.o cc -o gearboy.bin -Wl,--whole-archive main.o ../../../src/MBC2MemoryRule.o ../../../src/Audio.o ../../../src/MBC1MemoryRule.o ../../../src/IORegistersMemoryRule.o ../../../src/audio/Gb_Apu.o ../../../src/MultiMBC1MemoryRule.o ../../../src/GearboyCore.o ../../../src/audio/Multi_Buffer.o ../../../src/audio/Effects_Buffer.o ../../../src/MBC5MemoryRule.o ../../../src/audio/Gb_Apu_State.o ../../../src/audio/Blip_Buffer.o ../../../src/MemoryRule.o ../../../src/Input.o ../../../src/Processor.o ../../../src/Video.o ../../../src/Memory.o ../../../src/Cartridge.o ../../../src/MBC3MemoryRule.o ../../../src/RomOnlyMemoryRule.o ../../../src/CommonMemoryRule.o ../../../src/audio/Sound_Queue.o ../../../src/audio/Gb_Oscs.o ../../../src/opcodes.o ../../../src/opcodes_cb.o -L/opt/vc/lib/ -lm -lbcm_host -lGLESv2 -lEGL -lopenmaxil -lvcos -lvchiq_arm -lrt `sdl2-config --libs` -lstdc++ -Wl,--no-whole-archive -rdynamic
Allò important per tal de què funcioni el teclat és compilar SDL2.0 a la RPi tal com explica el fitxer README-raspberrypi.txt:
===============================================================================
Raspbian Build Dependencies
===============================================================================
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
OpenGL ES 2.x, it usually comes pre installed, but in any case:
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
NOTA. Finalment, tot i que tenia esperances de què funcionés, el comportament del teclat és molt inestable, va lent i el so és terrible. A més que depèn de SDL2. Tenint en compte de què amb mednafen funciona Gameboy a temps real i amb un bon so, de moment no hi ha color i descarto Gearboy.
Gameboy -Gcat (descartat)
Només emula la gameboy, no pas la Gameboy color.
http://gcat.org.uk/emul/ $ tar xvzf gcat-gameboy-1.2.tar.gz $ cd gcat-gameboy-1.2/ Arrow keys - emulate the Gameboy controller's D-pad A & S - emulate the Gameboy controller's A and B buttons Space - emulates the Start button Enter - emulates the Select button Escape - exits the emulator $ make gcc -c -o emulator.o emulator.c -I/opt/vc/include/ -I./ -I/opt/vc/src/hello_pi/libs/ilclient -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ gcc -c -o z80.o z80.S gcc -c -o gameboy.o gameboy.c gcc -o gameboy emulator.o z80.o gameboy.o -L/opt/vc/lib/ -lGLESv2 -lEGL -lopenmaxil -lbcm_host /opt/vc/src/hello_pi/libs/ilclient/libilclient.a gcc: error: /opt/vc/src/hello_pi/libs/ilclient/libilclient.a: No such file or directory Makefile:10: recipe for target 'gameboy' failed El que falta és compilar el codi font de /opt/vc/src: $ cd /opt/vc/src/hello_pi $ rebuild.sh i ara ja tenim el fitxer /opt/vc/src/hello_pi/libs/ilclient/libilclient.a I és que hi ha una alternativa a utilitzar SDL per fer gràfics des de la consola: *http://www.raspberrypi.org/forums/viewtopic.php?t=6750 <pre> My port is intended to run from the command line, with no X server running. It uses EGL/OpenVG to render directly to a fullscreen framebuffer.
i precisament en el directori /opt/vc/src hi ha exemples de com es faria.
Torno a compilar i ara: /usr/bin/ld: /opt/vc/lib//libopenmaxil.so: undefined reference to symbol 'vcos_generic_mem_alloc_aligned'
El que provaré és fer http://www.raspbian.org/RaspbianXBMC
sudo rpi-update
sudo reboot
Install/upgrade build tools and dependencies.
sudo apt-get update sudo apt-get upgrade
i si no em surt enviaré un mail. Un cop fet el rpi-update, update, upgrade, estaria bé tornar a compilar el gearboy.
No cal tanta història i per tal de què compili s'ha d'afegir -lvcos i -lpthread en el Makefile
CFLAGS+=-DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I$(SDKSTAGE)/opt/vc/include/ LDFLAGS+=-L$(SDKSTAGE)/opt/vc/lib/ -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lrt -lpthread /opt/vc/src/hello_pi/libs/ilclient/libilclient.a INCLUDES+=-I$(SDKSTAGE)/opt/vc/include/ -I./ -I/opt/vc/src/hello_pi/libs/ilclient -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux all: gameboy gameboy: emulator.o z80.o gameboy.o gcc -o gameboy emulator.o z80.o gameboy.o $(LDFLAGS) emulator.o: emulator.c gcc -c -o emulator.o emulator.c $(INCLUDES) $(CFLAGS) gameboy.o: gameboy.c gcc -c -o gameboy.o gameboy.c z80.o: z80.S gcc -c -o z80.o z80.S
Mednafen (Visualboyadvance)
Per tal d'emular Gameboy (gb i gbc), a Piplay es fa servir mednafen. mednafen és un emulador que emula diferents sistemes i que en la versió piplay-0.8-beta7 ja està configurat. Com que he tingut problemes per fer funcionar i configurar Gearboy, l'emulador de gameboy el faré amb mednafen, i això vol dir partir de la imatge de piplay.
L'emulació de Gameboy a mednafen està basant en VBA-M (Visualboyadvance), que és el projecte actiu:
Però aquest projecte és difícil de compilar sense les eines adequades, i no hi ha cap informació per a la RPi. Per tant, haurem de confiar en la versió de mednafen per a la RPi-
- A piplay-0.8 els emuladors estan a ~/pimame/emulators i concretament ~/pimame/emulators/mednafen. Aquí hi ha congigure, Makefile, i la carpeta src/.
- A piplay-0.8 les ROMs estan a ~/pimame/roms i concretament ~/pimame/roms/gb
- A piplay-0.8 el menu inicial està a ~/pimame/pimame-menu, concretament els scripts meny.py i launchmenu.py, i hi ha un fitxer de configuració important que és el config.yaml. Concretament, la part que afecta al llençament de l'emulador de Gameboy és:
menu_items:
...
- label: Gameboy
visible: Yes
roms: /home/pi/pimame/roms/gb/
full_path: yes
extension: yes
command: export LD_LIBRARY_PATH=/home/pi/pimame/dispmanx/build/.libs/ && /home/pi/pimame/emulators/mednafen/src/mednafen
...
Per tant, si vull llençar una rom de Gameboy:
$ export LD_LIBRARY_PATH=/home/pi/pimame/dispmanx/build/.libs/ $ /home/pi/pimame/emulators/mednafen/src/mednafen /home/pi/pimame/roms/gb/speedy_gonzales_-_aztec_adventure.gbc
I els jocs funcionen correctament i el so, que és important, també.
Fitxer de configuració. Mapejat del teclat.
/home/pi/.mednafen/mednafen-09x.cfg
cerco per gb (gb i gbc) per cercar totes les configuracions que afecten a Gameboy i Gameboy Color. Per ex, cap a la línia 447:
;Enable (automatic) usage of this module. gb.enable 1
i concretament m'interessa el mapejat del teclat per adaptar-ho a les meves necessitats.
;Exit command.exit keyboard 293~keyboard 27 ... ;gb, Built-In, Gamepad: A gb.input.builtin.gamepad.a keyboard 259 ;gb, Built-In, Gamepad: B gb.input.builtin.gamepad.b keyboard 258 ;gb, Built-In, Gamepad: DOWN ↓ gb.input.builtin.gamepad.down keyboard 115 ;gb, Built-In, Gamepad: LEFT ← gb.input.builtin.gamepad.left keyboard 97 ;gb, Built-In, Gamepad: Rapid A gb.input.builtin.gamepad.rapid_a ;gb, Built-In, Gamepad: Rapid B gb.input.builtin.gamepad.rapid_b ;gb, Built-In, Gamepad: RIGHT → gb.input.builtin.gamepad.right keyboard 100 ;gb, Built-In, Gamepad: SELECT gb.input.builtin.gamepad.select keyboard 9 ;gb, Built-In, Gamepad: START gb.input.builtin.gamepad.start keyboard 13 ;gb, Built-In, Gamepad: UP ↑ gb.input.builtin.gamepad.up keyboard 119
Originalment el mapeig es el següent:
EXIT: 27 (ESC) A: 259 (3 del teclat numèric) B: 258 (2 del teclat numèric) LEFT: 97 (a) RIGHT: 100 (d) UP: 119 (w) DOWN; 115 (s) SELECT: 9 (TAB) START: 13 (ENTER)
Canvio la configuració a (màquina de 7 botons):
- ESC: 0
- START: 1
- SELECT: 2
- B: 3 (a la Gameboy el botó B està a l'esquerre del A)
- A: 4
Per trobar els keycodes adequats confio en SDL_keysym.h: (tinc una còpia a MAME/docs)
SDLK_0 = 48, SDLK_1 = 49, SDLK_2 = 50, SDLK_3 = 51, SDLK_4 = 52, SDLK_5 = 53, SDLK_6 = 54, ... SDLK_UP = 273, SDLK_DOWN = 274, SDLK_RIGHT = 275, SDLK_LEFT = 276,
I per tant el fitxer de configuració queda:
;Exit command.exit keyboard 293~keyboard 27~keyboard 48 ... ;gb, Built-In, Gamepad: A gb.input.builtin.gamepad.a keyboard 52 ;gb, Built-In, Gamepad: B gb.input.builtin.gamepad.b keyboard 51 ;gb, Built-In, Gamepad: DOWN ↓ gb.input.builtin.gamepad.down keyboard 274 ;gb, Built-In, Gamepad: LEFT ← gb.input.builtin.gamepad.left keyboard 276 ;gb, Built-In, Gamepad: RIGHT → gb.input.builtin.gamepad.right keyboard 275 ;gb, Built-In, Gamepad: SELECT gb.input.builtin.gamepad.select keyboard 50 ;gb, Built-In, Gamepad: START gb.input.builtin.gamepad.start keyboard 49 ;gb, Built-In, Gamepad: UP ↑ gb.input.builtin.gamepad.up keyboard 273
Un tema interessant és que veig com puc associar vàries tecles a la mateixa funció. Per ex, sortir és el 0, però vull que continuï funcionant el Escape:
;Exit command.exit keyboard 293~keyboard 27~keyboard 48
I finalment el tema de salvar els estats dóna bastant pel sac, doncs coincideix amb les meves tecles i si ho comento tornen a aparèixer. La solució és canviar el mapping, per exemple afegint un 0:
;Save state 0 select command.0 keyboard 480 ;Save state 1 select command.1 keyboard 490 ;Save state 2 select command.2 keyboard 500 ;Save state 3 select command.3 keyboard 510 ;Save state 4 select command.4 keyboard 520 ;Save state 5 select command.5 keyboard 530 ;Save state 6 select command.6 keyboard 540
El Speedy Gonzales funciona a les mil meravelles, amb un so perfecte.
Instal.lació de Mednafen des de les fonts a la RPi B+
He provat de compilar el projecte des de zero però no ha funcionat. Tant se val. El que he de fer és partir de la imatge piplay-0.8-beta9 (que funciona tant per a la RPi B+ com la 2), i netejar tot el que no necessito. Els emulador de GB els faré funcionar a partir del mednafer (el gba ja ho tinc solucionat sense mednafen). M'oblido de compilar des de les fonts.
ROMs
A freeroms.com estan barrejades les roms de la Game Boy original i Color.
En canvi a emuparadise.com sí que estan barrejades:
- http://www.emuparadise.me/Nintendo_Game_Boy_ROMs/Games-Starting-With-D/12
- http://www.emuparadise.me/Nintendo_Game_Boy_Color_ROMs/11
Jocs
Jocs importants
highest rated a:
Ultraman (Japan) Pokemon De Panepon (Japan) Yuu Yuu Hakusho - Makai Touitsu (Japan) Kirbys Star Stacker Donkey Kong Land Iii (V1.1) 55 Game Hk Gargoyles Quest - Ghostsn Goblins Marus Mission Tiny Toon Adventures - Babs Big Break Nettou King Of Fighters 96 (Japan) Pocket Bomberman Legend Of Zelda, The - Links Awakening Dx (V1.2) (Italian) Who Wants To Be A Millionaire - 2nd Edition Mario Bob Demo (Public Domain) Magical Drop Survival Kids Moomins Tale Yuu Yuu Hakusho - Ankoku Bujutsu Kai (Japan) Mortal Kombat Ii Nettou King Of Fighters 96 Super Donkey Kong Gb (Japan) Qix (Usajapan) Fushigi No Dungeon - Fuurai No Shiren Gb2 - Sabaku No Majou (Japan) Dai-2-Ji Super Robot Taisen G (Japan)[T+Chi] Power Rangers - Lightspeed Rescue Magic Maze Adventures Of Lolo Lion King, The - Simbas Mighty Adventure Pokemon Trep Edition V0.01 (Blue Hack) Qix Adventure Magi Nation Racing Mini 4wd (Japan) V-Rally - Championship Edition Hokuto No Ken - Fist Of The North Star (Japan) Pokemon Cute V1.4 (Yellow Hack) Probotector Madden Nfl 2000 Kaeruno Tameni (Japan) Pokemon Puzzle Challenge Metroid Ii - Return Of Samus Driver - You Are The Wheelman G1 King - 3 Biki No Yosouya (Japan) Z - The Miracle Of The Zone (Japan) Metal Gear - Ghost Babel (Japan) Elevator Action Kirbys Pinball Land Batman Beyond - Return Of The Joker Dragon Warrior Monsters 2 - Taras Adventure Lufia - The Legend Returns
Speedy Gonzales: Aztec Adventure (Game Boy - 1999)
- https://www.youtube.com/watch?v=HiRj9rNGZrw
- review: http://www.ign.com/articles/2000/02/03/speedy-gonzales-aztec-adventure-2
- http://www.gamefaqs.com/gbc/576086-speedy-gonzales-aztec-adventure/cheats
Effect Password 2 6483 3 2397 4 9853 5 5629 6 5141
Són 6 temes, i cada tema consta de 3 stages.
...a password is only given at the end of a level, and its pretty tough to get through all three stages and an end-boss on four meager lives, especially since bottomless pits and long rows of deadly spikes are constant obstacles. És a dir, que sembla ser que quan es completa els 3 stages et deu demanar el password.
$ xxd speedy\ gonzales\ -\ aztec\ adventure\ \(u\)\ \[c\]\[t1\].gbc | more ... 0000110: 000c 000d 0008 111f 8889 000e dccc 6ee6 ..............n. 0000120: dddd d999 bbbb 6763 6e0e eccc dddc 999f ......gcn....... 0000130: bbb9 333e 5350 4545 4459 474f 4e5a 4120 ..3>SPEEDYGONZA 0000140: 2b35 2080 4242 0019 0500 0133 00a8 a06a +5 .BB.....3...j 0000150: 01e8 03f3 2100 c8f9 5721 00c0 af22 7cfe ....!...W!..."|. 0000160: e020 f979 ea30 c378 ea31 c37a cd04 03fb . .y.0.x.1.z.... ...
Shrek: Fairy Tale FreakDown
Passwords i trucos de Shrek: Fairy Tale FreakDown (GBC):
creat per Joan Quintana Compte, febrer 2015