El lanzamiento de FreeBSD 13.0 vino cargado de novedades en cuanto al sistema HID se refiere, además se añadieron varios drivers de gamepads muy conocidos como PS4 y Xbox
En mi caso dispongo de varios gamepads:
XBox One | 8BitDo Pro2 |
---|---|
Logitech RumblePad2 | iBuffalo |
---|---|
Algunos gamepads funcionarán con el driver especÃfico y otros con el genérico hgame , en mi caso todos funcionarán con hgame a excepción del de Xbox One ya que utilizará xb360gp y webcamd .
hgame -> Generic HID game controller (joystick/gamepad) driver
xb360gp -> XBox 360 gamepad driver
webcamd -> Daemon which provide access to USB webcam, USB DVB, USB radio, USB input, USB tablet and more devices
NOTA: Toda la configuración se ha realizado en un sistema FreeBSD 13.1 con el kernel GENERIC, tanto el gamepad de XBoxOne como el 8BitDo son inalámbricos, el primero mediante un adpatador USB y el segundo vÃa bluetooth, pero no he conseguido que funcionen de forma inalámbrica ninguno de ellos. Otro detalle es que los mandos de XBoxOne, 8bitDo y Logitech soportan vibración pero tampoco he conseguido que funcione ninguno.
Las instrucciones de configuración son las siguientes:
- Habilitar el USB-HID y reglas evdev
- Herramientas de testeo
- XBox One
- 8bitDo pro2
- Logitech RumblePad2
- iBUFFALO
- NES/SNES/GAMEBOY/GB-ADV
- NeoGeo
- N64
- PSX
- GAMECUBE/WII
- PSP
Habilitar el USB-HID y reglas evdev:
Habilitamos el soporte USB-HID en el loader de FreeBSD:
hw.usb.usbhid.enable="1"
Cargamos el módulo correspondiente:
kldload usbhid
sysrc kld_list+=usbhid
Definimos algunas reglas de evdev para que nuestro usuario sea capaz de acceder al dispositivo:
[system=10]
add path 'usb/*' mode 0660 group operator
[localrules=10]
add path 'input' mode 0775 group wheel
add path 'input/*' mode 0660 group wheel
service devfs restart
NOTA: Estas reglas solo son necesarias para los mandos 8BitDo, Logitech y ibuffalo, digámos los mandos genéricos.
Reiniciamos para que aplique los cambios del loader.
shutdown -r now
Herramientas de testeo:
Instalamos algunas herramientas que nos resultarán útiles para comprobar si los gamepads están funcionando correctamente:
jstest-gtk nos proporcionará de forma sencilla el nombre de los botones y los ejes utilizados, antimicro también pero de una forma mas confusa, pero antimicro tiene una peculiaridad y es que es capaz de mapear botones del mando como si de teclas del teclado se tratase, de este modo podremos jugar con el mando incluso en juegos que no lo soportan.
XBox One:
Este mando es mi preferido sin ninguna duda, es cómodo, los materiales de muy buena calidad y versátil ya que funciona en cualquier sistema operativo de PC y en la propia XBox, este es detectado del siguiente modo por FreeBSD:
dmesg | usbconfig |
---|---|
ugen0.9: |
ugen0.9: |
Para que funcione tan solo debemos cargar el módulo cuse:
sysrc kld_list+=cuse
Y arrancar webcamd, pero primero lo arrancaremos manualmente para asegurarnos de que no falla nada:
webcamd 12588 - - Attached to ugen0.9[0]
webcamd 12588 - - Creating /dev/input/event13
webcamd 12588 - - Creating /dev/input/js0
Comprobamos mediante jstest-gtk y antimicro que se detectan las pulsaciones de los botones:
Ahora que estamos seguros de que funciona correctamente lo arrancamos como servicio, Webcamd es llamado de forma automática por evdev pasándole el puerto donde se conectó el gamepad, de este modo funciona de forma dinámica conectemos donde conectemos el gamepad:
service webcamd start
8bitDo pro2:
Este fabricante es muy conocido entre los retro-gamers también es muy buen mando pero su ergonomÃa no es tan buena como la del mando de XboxOne, este es detectado del siguiente modo por FreeBSD:
dmesg | usbconfig |
---|---|
ugen0.2: <8BitDo 8BitDo Pro 2> at usbus0 | ugen0.2: <8BitDo 8BitDo Pro 2> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (480mA) |
Para este mando será necesario cargar el módulo genérico:
sysrc kld_list+=hgame
NOTA: El único inconveniente de utilizar el driver genérico es que identificar los botones será un poco mas complicado ya que solo podremos utilizar antimicro.
Comprobamos que se detectan los botones correctamente:
Logitech RumblePad2:
En cuanto al Logitech se trata de un mando muy antiguo, pero que sigue funcionando como el primer dÃa, este es detectado del siguiente modo por FreeBSD:
dmesg | usbconfig |
---|---|
ugen0.2: <Logitech Logitech RumblePad 2 USB> at usbus0 | ugen0.2: <Logitech Logitech RumblePad 2 USB> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (500mA) |
Este mando también utilizará el módulo genérico, si no lo hemos hecho antes, cargamos el módulo:
sysrc kld_list+=hgame
NOTA: El único inconveniente de utilizar el driver genérico es que identificar los botones será un poco mas complicado ya que solo podremos utilizar antimicro.
Comprobamos que se detectan los botones correctamente:
iBUFFALO:
Este mando es un tanto especial ya que simula un mando de SuperNintendo, genial para jugar a juegos antiguos 2D.
dmesg | usbconfig |
---|---|
ugen0.2: <vendor 0x0583 USB,2-axis 8-button gamepad> at usbus0 | ugen0.2: <vendor 0x0583 USB,2-axis 8-button gamepad> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA) |
Este mando también utilizará el módulo genérico, si no lo hemos hecho antes, cargamos el módulo:
sysrc kld_list+=hgame
NOTA: El único inconveniente de utilizar el driver genérico es que identificar los botones será un poco mas complicado ya que solo podremos utilizar antimicro.
Comprobamos que se detectan los botones correctamente:
NES/SNES/GAMEBOY/GAMEBOY-ADV:
Instalamos Mednafen:
Cargamos la ROM deseada:
Podemos ver que ha detectado los cuatro mandos:
Initializing joysticks...
ID: 0xdadcfa337304f38c0004000c00010000 - Logitech RumblePad 2 USB Joystick
ID: 0x0ea06f86c7f338d00006000b00010000 - Xbox One Controller
ID: 0x4624938846ca11020002000800000000 - vendor 0x0583 USB,2-axis 8-button gamepad Joystick
ID: 0xd4b85105fa8dffeb0004000f00010000 - 8BitDo Pro 2 Gamepad
Para mapear los botones tan solo debemos presionar:
ALT+SHIFT+1
Aquà podemos ver como juego sin problemas al magnÃfico Superm Mario Land 2 con mi iBUFFALO:
Las funcionalidades básicas de Mednafen son:
0-9 -> Select save slot
F5 -> Save
F7 -> Load
NeoGeo:
Para poder jugar a NeoGeo tendremos que bajarnos la BIOS y la versión del juego acorde a esta BIOS, si no hacemos esto MAME no cargará el juego, en estos enlaces podéis encontrar todo lo necesario:
https://archive.org/download/MAME216RomsOnlyMerged
https://archive.org/download/MAME216RomsOnlyMerged/mslug.zip
https://archive.org/download/MAME216RomsOnlyMerged/neogeo.zip
Instalamos MAME y un frontend gráfico:
Arrancamos el frontend y configuramos el mando una vez dentro del juego:
En esta ocasión he utilizado el 8BitDo:
N64
Instalamos Mupen:
La manera mas sencilla de configurar Mupen es mediante mupen64plus-qt:
Cargamos la ROM deseada:
Mupen por defecto detecta el mando Logitech perfectamente y el iBuffalo parcialmente, mientras que el de Xbox y el 8BitDo son ignorados completamente:
Input: 4 SDL joysticks were found.
Input: N64 Controller #1: Using auto-config with SDL joystick 0 ('Logitech RumblePad 2 USB Joystick')
Input Error: No auto-config found for joystick named 'Xbox One Controller' in InputAutoConfig.ini
Input: N64 Controller #2: Using auto-config with SDL joystick 2 ('vendor 0x0583 USB,2-axis 8-button gamepad Joystick')
Input Error: No auto-config found for joystick named '8BitDo Pro 2 Gamepad' in InputAutoConfig.ini
Input: 2 controller(s) found, 2 plugged in and usable in the emulator
Para que estos mandos funcionen tendremos que averiguar el mapeo de botones y generar los ficheros de configuración de cada uno de ellos, el método es un poco prueba/error hasta dejarlo fino:
[Xbox One Controller]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = axis(6+)
DPad L = axis(6-)
DPad D = axis(7+)
DPad U = axis(7-)
Start = button(7)
Z Trig = axis(2+)
B Button = button(2)
A Button = button(0)
C Button R = axis(3+)
C Button L = axis(3-)
C Button D = axis(4+)
C Button U = axis(4-)
R Trig = button(5)
L Trig = button(5)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)
[8BitDo Pro 2 Gamepad]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = axis(4+)
DPad L = axis(4-)
DPad D = axis(5+)
DPad U = axis(5-)
Start = button(11)
Z Trig = button(8)
B Button = button(4)
A Button = button(1)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(7)
L Trig = button(6)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)
Ahora si arrancamos Mupen de nuevo ya están los 4 mandos disponibles:
Input: 4 SDL joysticks were found.
Input: N64 Controller #1: Using auto-config with SDL joystick 0 ('Logitech RumblePad 2 USB Joystick')
Input: N64 Controller #2: Using auto-config with SDL joystick 1 ('Xbox One Controller')
Input: N64 Controller #3: Using auto-config with SDL joystick 2 ('vendor 0x0583 USB,2-axis 8-button gamepad Joystick')
Input: N64 Controller #4: Using auto-config with SDL joystick 3 ('8BitDo Pro 2 Gamepad')
Input: 4 controller(s) found, 4 plugged in and usable in the emulator
NOTA: Mupen se confunde cuando hay muchos mandos conectados, yo he dejado solo el de Xbox y el 8BitDo.
Podéis ver como juego con el mando de Xbox al MarioKart64 uno de los mejores juegos de la historia:
NOTA: Lo he grabado en modo ventana porque por alguna razón ni OBS ni ffmpeg permiten grabar Mupen64 a fullscreen.
PSX
Instalamos el emulador de PSX:
Los mandos serán reconocidos de forma automática y podremos configurar los botonos desde el propio emulador, en este caso estoy utilizando el 8BitDo:
GAMECUBE/WII
Instalamos el emulador Dolphin:
Los mandos serán reconocidos de forma automática y podremos configurar los botonos desde el propio emulador, en este caso estoy utilizando el mando de Xbox:
NOTA: La grabación del video penaliza bastante, el emulador se mueve bien pero el video grabado parece que funcione un poco peor, además grabar el audio de pulseaudio es complicado en FreeBSD, por supuesto el emulador si que sacaba audio durenta la partida sin problemas.
En Wii la emulación funciona perfectamente pero muchos juegos precisan de movimientos de los mandos originales que con un gamepad tradicional no se pueden emular de forma cómoda.
PSP
Instalamos el emulador:
En este caso estoy utilizando el mando de Xbox ya que el 8BitDo la cruceta digital no es reconocida por alguna razón, el Logitech no es detectado y el iBuffalo no es el mas idóneo para jugar a la PSP: