RaspberryPi
LaTeX
Linux
Virtualisierung
RaspberryPi
LaTeX
Linux
Virtualisierung
Vorhaben: Einbau eines RaspberrryPi's in ein gebrauchtes SNES-Gehäuse wo die Anschlüsse des RaspberryPi's bis auf den GPIO1) weiter nach Bedarf verwendet werden kann.
Das Ganze funktioniert natürlich auch ohne Gehäuse, das Problem ist hier nur, dass die Verbindung mit den Original-Controllern nicht fixiert ist und sich daher auch leicht löst! Außerdem kommt so auch kein Retro-Feeling auf!
Hier schon mal hilfreiche Links:
Ganz Wichtig:
Optional:
Nach einer Dauer von 1-2 Monaten war es schliesslich soweit
Als Betriebssystem kommt Rasbian, eine auf den Pi abgestimmte Debian-Distribution3).
dd
wird das Rasbian-Image auf die SD-Karte geschrieben (als root ausführen) dd bs=4M if=/PFAD/zum/Rasbian-Image.img of=/dev/sdX
sdX
(e.g. sdb
, sdc
, mmcblk0
, … ) kann mit lsblk -f
z.B. bestimmt werden.bs=4M
nicht funktionieren, dann mit bs=1M
probierenraspi-config
aufgerufen und dort alle nötigen Einstellungen vornehmen (bei Fragen, diverse Blogs im Internet bieten ausführlichere Erläuterungen! /etc/network/interfaces
auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface network1 inet static address 192.168.45.2 #eigene ip angeben netmask 255.255.255.0 gateway 192.168.45.1 iface network2 inet static address 192.168.2.10 netmask 255.255.255.0 gateway 192.168.2.1
/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 # network 1 network={ ssid="Netzwerk1-Name" scan_ssid=1 key_mgmt=WPA-PSK psk="geheimes_passwort" id_str="network1" # diese Zeile ist ganz wichtig, hier werden die statischen Angaben der Interfaces eingerichtet } # network 2 network={ ssid="Netzwerk2-Name" scan_ssid=1 key_mgmt=WPA-PSK psk="geheimes_passwort" id_str="network2" # diese Zeile ist ganz wichtig, hier werden die statischen Angaben der Interfaces eingerichtet }
gamecon_gpio_rpi
-Modul dpkg -l | grep linux-header
modprobe gamecon_gpio_rpi map=0,0,1,1,0,0
/etc/modules
ein!echo "gamecon_gpio_rpi map=0,0,1,1,0,0" >> /etc/modules
jstest /dev/jsX
kann der entsprechende Controller getestet werdenwget http://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/linux-headers-`uname -r`_`uname -r`-2_armhf.deb wget http://www.niksula.hut.fi/~mhiienka/Rpi/gamecon-gpio-rpi-dkms_0.9_all.deb wget http://www.niksula.hut.fi/~mhiienka/Rpi/db9-gpio-rpi-dkms_0.7_all.deb dpkg -i linux-headers-`uname -r`_`uname -r`-2_armhf.deb dpkg -i gamecon-gpio-rpi-dkms_0.9_all.deb dpkg -i db9-gpio-rpi-dkms_0.7_all.deb
~/RetroPie/emulators/RetroArch/installdir/bin/retroarch-joyconfig
können die Buttons des Controllers belegt werden, es wird eine Ausgabe erzeugt, die in die retroarch.cfg der jeweiligen Emu-Ordner im Ordner config kommtinput_player1_joypad_index
hier muss die Zahl stehen, unter der der Controle als Device gelistet ist (js0
, js1
, …) (# All settings made here will override the global settings for the current emulator core rewind_enable = false input_player1_joypad_index = "0" input_player1_a_btn = "0" input_player1_b_btn = "1" input_player1_x_btn = "2" input_player1_y_btn = "3" input_player1_l_btn = "4" input_player1_r_btn = "5" input_player1_start_btn = "7" input_player1_select_btn = "6" input_player1_left_axis = "-0" input_player1_up_axis = "-1" input_player1_right_axis = "+0" input_player1_down_axis = "+1" input_player2_joypad_index = "1" input_player2_a_btn = "0" input_player2_b_btn = "1" input_player2_x_btn = "2" input_player2_y_btn = "3" input_player2_l_btn = "4" input_player2_r_btn = "5" input_player2_start_btn = "7" input_player2_select_btn = "6" input_player2_left_axis = "-0" input_player2_up_axis = "-1" input_player2_right_axis = "+0" input_player2_down_axis = "+1" # exit the nes emulator select-btn + start-btn # but no Save State-Function! #input_enable_hotkey_btn = "8" #input_exit_emulator_btn = "9"
# All settings made here will override the global settings for the current emulator core # exit the nes emulator select-btn + start-btn # but no savestates! #input_enable_hotkey_btn = "8" #input_exit_emulator_btn = "9" input_player1_joypad_index = "0" input_player1_a_btn = "1" input_player1_b_btn = "3" #input_player1_x_btn = "2" #input_player1_y_btn = "3" #input_player1_l_btn = "4" #input_player1_r_btn = "5" input_player1_start_btn = "7" input_player1_select_btn = "6" input_player1_left_axis = "-0" input_player1_up_axis = "-1" input_player1_right_axis = "+0" input_player1_down_axis = "+1" input_player2_joypad_index = "1" input_player2_a_btn = "1" input_player2_b_btn = "3" #input_player2_x_btn = "2" #input_player2_y_btn = "3" #input_player2_l_btn = "4" #input_player2_r_btn = "5" input_player2_start_btn = "7" input_player2_select_btn = "6" input_player2_left_axis = "-0" input_player2_up_axis = "-1" input_player2_right_axis = "+0" input_player2_down_axis = "+1"
# All settings made here will override the global settings for the current emulator core # exit the nes emulator select-btn + start-btn # but no savestates! #input_enable_hotkey_btn = "8" #input_exit_emulator_btn = "9" input_player1_joypad_index = "0" input_player1_a_btn = "0" input_player1_b_btn = "1" input_player1_start_btn = "7" input_player1_select_btn = "6" input_player1_left_axis = "-0" input_player1_up_axis = "-1" input_player1_right_axis = "+0" input_player1_down_axis = "+1"
# All settings made here will override the global settings for the current emulator core input_player1_joypad_index = "0" input_player1_b_btn = "2" #input_player1_b_btn = "3" input_player1_select_btn = "8" input_player1_start_btn = "9" input_player1_up_axis = "-1" input_player1_down_axis = "+1" input_player1_left_axis = "-0" input_player1_right_axis = "+0" input_player1_a_btn = "0" #input_player1_a_btn = "1" # exit the nes emulator select-btn + start-btn # but no savestates! #input_enable_hotkey_btn = "8" #input_exit_emulator_btn = "9"
# All settings made here will override the global settings for the current emulator core input_player1_joypad_index = "0" input_player1_b_btn = "0" input_player1_y_btn = "2" input_player1_select_btn = "8" input_player1_start_btn = "9" input_player1_up_axis = "-1" input_player1_down_axis = "+1" input_player1_left_axis = "-0" input_player1_right_axis = "+0" input_player1_a_btn = "1" input_player1_x_btn = "3" input_player1_l_btn = "4" input_player1_r_btn = "5" #input_player1_l2_btn = "6" #input_player1_r2_btn = "7" #input_player1_l3_btn = "11" #input_player1_r3_btn = "12" #input_player1_l_x_plus_axis = "+0" #input_player1_l_x_minus_axis = "-0" #input_player1_l_y_plus_axis = "+1" #input_player1_l_y_minus_axis = "-1" #input_player1_r_x_plus_axis = "+2" #input_player1_r_x_minus_axis = "-2" #input_player1_r_y_plus_axis = "+3" #input_player1_r_y_minus_axis = "-3" # exit the nes emulator select-btn + start-btn # but no Save State-Function! #input_enable_hotkey_btn = "8" #input_exit_emulator_btn = "9"
# All settings made here will override the global settings for the current emulator core input_player1_joypad_index = "0" input_player1_b_btn = "0" input_player1_a_btn = "1" input_player1_select_btn = "8" input_player1_start_btn = "9" input_player1_up_axis = "-1" input_player1_down_axis = "+1" input_player1_left_axis = "-0" input_player1_right_axis = "+0"
# All settings made here will override the global settings for the current emulator core system_directory = /home/pi/RetroPie/bios/psx input_player1_joypad_index = "6" input_player1_b_btn = "0" input_player1_y_btn = "2" input_player1_select_btn = "8" input_player1_start_btn = "9" input_player1_up_axis = "-1" input_player1_down_axis = "+1" input_player1_left_axis = "-0" input_player1_right_axis = "+0" input_player1_a_btn = "1" input_player1_x_btn = "3" input_player1_l_btn = "4" input_player1_r_btn = "5" input_player1_l2_btn = "6" input_player1_r2_btn = "7" input_player1_l3_btn = "11" input_player1_r3_btn = "12" input_player1_l_x_plus_axis = "-4" input_player1_l_x_minus_axis = "+4" input_player1_l_y_plus_axis = "-5" input_player1_l_y_minus_axis = "+5" input_player1_r_x_plus_axis = "-2" input_player1_r_x_minus_axis = "+2" input_player1_r_y_plus_axis = "-3" input_player1_r_y_minus_axis = "+3"
Für die Verbindung der Rpi-GPIO-Schnittstelle mit den SNES-Controllern benötigen wir erstmal das jeweilige Pinout:
GPIO Pinout: 5)
Pinout des SNES-Controllers: 6)
----------------------------- --------------------- | | \ | (1) (2) (3) (4) | (5) (6) (7) | | | / ----------------------------- --------------------- Pin Description Wire Color === =========== ========== 1 +5v (power) White 2 Clock Yellow 3 Latch Orange 4 Data1 Red 5 Data2 ? 6 IOBit ? 7 Ground Brown
Mithilfe von Draht und ein paar Aderendhülsen kann man die nun folgendermaßen verbinden:
SNES-Pin GPIO-Pin ======== ======== 1 3V3 2 GPIO10 3 GPIO11 4 GPIO04,GPIO07,GPIO02,GPIO03 (bei nem rev2-Board) 7 Ground
bei 2 Controllern müssen Power, Clock, Latch und Ground (aus Controllersicht) doppelt belegt werden – also Drähte verbinden…
gamecon_gpio_rpi
-Modulszless /usr/share/doc/gamecon_gpio_rpi/README.gz