tux-ubuntuConfigurer un joystick pour mednafen sous linux peut être un peu pénible. Cela consiste :

  1. à connaître les numéros des boutons et de la croix directionnelle
  2. à connaître l'ID Unique de la manette
  3. à renseigner dans le fichier de configuration de mednafen, pour chaque système, le numéro des boutons trouvé en 1 et l'action à réaliser

La démarche

Récupérer les numéros des boutons et de la croix directionnelle

Installer l'utilitaire joystick qui vous permettra de détecter quels sont les numéros des boutons de la manette. En effet ces dernier sont à renseigner dans la configuration de mednafen.

sudo apt-get install joystick

Ensuite il vous faut connaître sur quel device est votre manette. Pour cela brancher votre manette et regarder votre syslog (par exemple les 100 dernières lignes ce qui est largement suffisant normalement) :

tail -100 /var/log/syslog

Vous devriez voir quelque chose du genre :

mtp-probe: checking bus 2, device 28: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3.3"
mtp-probe: bus: 2, device: 28 was not an MTP device
kernel: [72182.023957] input: DragonRise Inc.   Generic   USB  Joystick   as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3
.3/2-1.3.3:1.0/input/input19
kernel: [72182.024412] dragonrise 0003:0079:0006.0004: input,hidraw3: USB HID v1.10 Joystick [DragonRise Inc.   Generic   USB  Joy
stick  ] on usb-0000:00:1d.0-1.3.3/input0
kernel: [72182.024449] dragonrise 0003:0079:0006.0004: Force Feedback for DragonRise Inc. game controllers by Richard Walmsley <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.>

Si vous voyez ça alors la manette (usb) est bien détectée.

Pour tester les boutons de la manette soit vous faites par exemple :

jtest /dev/input/js1

soit si vous avez un doute, vous cherchez le device en fonction du nom de la manette :

jstest /dev/input/by-id/usb-DragonRise_Inc._Generic_USB_Joystick-joystick

Les boutons

Vous allez avoir une "grille" qui va afficher les Axes (ce qui correspond à la croix directionnelle) à 0 et les Buttons à off.

Si vous maintennez un bouton appuyer vous verrez alors son numéro suivi de on au lieu de off. Par exemple pour le bouton "Start" de ma manette la grille affichera 9:On

Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:on 

Procédez de cette manière pour tous les boutons de la manette que vous souhaitez utiliser.

La croix directionnelle

Faites comme pour les boutons mais cette fois ci avec la croix directionnelle. Par exemple si j'appuie sur HAUT j'obtiens :

Axes:  0:     0  1:-32767  2:     0  3:     0  4:     0  5:     0  6:     0

ça veut dire que l'axe utilisé est le 1 et l'orientation est négative

Pour droite :

Axes:  0: 32767  1:     0  2:     0  3:     0  4:     0  5:     0  6:

ça veut dire que l'axe utilisé est le 0 et l'orientation est positive

Pour bas :

Axes:  0:     0  1: 32767  2:     0  3:     0  4:     0  5:     0  6:     0

ça veut dire que l'axe utilisé est le 1 et l'orientation est positive

Pour gauche :

Axes:  0:-32767  1:     0  2:     0  3:     0  4:     0  5:     0  6:     0

ça veut dire que l'axe utilisé est le 0 et l'orientation est négative

Dans mednafen :

Récupérer l'ID Unique de la manette

Il vous faut maintenant récupérer l'ID de la manette :

mednafen monjeux.rom > mednafen.log

Ouvrez mednafen.log et chercher la ligne correspondant à la détection de la manette, ce qui dans mon cas est :

Initializing joysticks...
  Joystick 0 - DragonRise Inc.   Generic   USB  Joystick   - Unique ID: e68993f7a0787c33

La configuration de mednafen

ouvrir le fichier de configuration de mednafen :

gedit ~/.mednafen/mednafen.cfg

Rechercher <mon systeme>.input.gamepad et renseigner chaque bouton utilisé avec les renseignements que vous avez récolté.

Cela aura la forme suivante ( en gras les élements récoltés à renseigner):

<mon systeme>.input.port1.gamepad.<boutondusysteme> joystick <ID Unique de la manette> <numero du bouton récolté>

Par exemple dans mon cas j'ai mappé les boutons de la pc engine comme suit :

;pce, Port 1, Gamepad: I
pce.input.port1.gamepad.i joystick e68993f7a0787c33 00000003

;pce, Port 1, Gamepad: Rapid I
pce.input.port1.gamepad.rapid_i joystick e68993f7a0787c33 00000000

;pce, Port 1, Gamepad: II
pce.input.port1.gamepad.ii joystick e68993f7a0787c33 00000001

;pce, Port 1, Gamepad: Rapid II
pce.input.port1.gamepad.rapid_ii joystick e68993f7a0787c33 00000002

;pce, Port 1, Gamepad: SELECT
pce.input.port1.gamepad.select joystick e68993f7a0787c33 00000008

;pce, Port 1, Gamepad: RUN
pce.input.port1.gamepad.run joystick e68993f7a0787c33 00000009

;pce, Port 1, Gamepad: UP ↑
pce.input.port1.gamepad.up joystick e68993f7a0787c33 0000c001

;pce, Port 1, Gamepad: RIGHT →
pce.input.port1.gamepad.right joystick e68993f7a0787c33 00008000

;pce, Port 1, Gamepad: DOWN ↓
pce.input.port1.gamepad.down joystick e68993f7a0787c33 00008001

;pce, Port 1, Gamepad: LEFT ←
pce.input.port1.gamepad.left joystick e68993f7a0787c33 0000c000