HOWTO Pad PSX

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Tabla de contenidos

[editar] Introducción

Hace un tiempo lei en Emulatronia sobre la posibilidad de construir un adaptador de playstation y así poder conectarlo al ordenador, así que decidí probarlo y sí funcionaba, pero como siempre el driver sólo existía para Windows, al menos era lo que yo pensaba hasta que vagando por internet descubrí esto así que lo probé en mi suse y funcionaba perfectamente así paso el tiempo hasta que salte a gentoo, seguí el mismo manual pero nada, al parecer algo había de diferente, después de investigar un poco encontré que el problema era el devfs, que es el que tengo (espero que cuando me pase a udev siga rulando), así que hoy pude instalarlo, y bueno hay que compartir no, aqui vamos:

[editar] Hardware

Primero que nada tenemos que hacer el montaje aqui va el esquema que viene con la doc del kernel:

Explicación: Esquema
 +---------+---------+---------+
 9 | o o o | o o o | o o o | 1 parallel
 \________|_________|________/ port pins
 | | | | | |
 | | | | | +--------> Clock --- (4)
 | | | | +------------> Select --- (3)
 | | | +---------------> Power --- (5-9)
 | | +------------------> Ground --- (18-25)
 | +-------------------------> Command --- (2)
 +----------------------------> Data --- (one of 10,11,12,13,15)

Es un poco confuso pero si quieren algo mas gráfico vayan aqui es la página de emulatronia, viene muy bien explicado como hacer el montaje.

[editar] Software

Ahora tenemos que darle soporte en nuestra gentoo, voy a dar las opciones del kernel que debemos activar (de preferencia como módulos) para el kernel gentoo-dev-sources que según una encuesta que vi era el mas usado:

Código: Consola
cd /usr/src/linux
make menuconfig

Activamos estas opciones:

Código: Kernel
     Device Drivers --->
     Parallel port support --->
     <M> Parallel port support
     Input device support --->
     <M> Joystick interface
     <M> Gameport support (este no se si sea realmente, solo que sin este a mi no me jalaba)
     <M> Parallel port keyboard adapter
     [*] Joysticks
     <M> Multisystem, NES, SNES, N64, PSX joysticks and gamepads

Ahora hacemos un:

Código: Consola
make
make modules_install

Si te fijaste la opcion Joystick sólo se puede activar como parte del núcleo no como módulo, si es tu caso también tendrás que copiar la imágen y actualizar tu grub o lilo, pero consuerte no tendrás que hacerlo así que pasamos de eso.

Ahora conectas tu pad si no lo tenías, con la precaución de que como no es hotplug te toca apagar-conectar-prender, cargamos los módulos así:

Código: Consola
 modprobe joydev
 modprobe gamecon map=0,7

Si todo va bien devfs te creará automáticamente el js0 en /dev, así que sólo queda probarlo con un juego, te recomiendo que instales el excelente emulador de snes zsnes, es la leche, sólo le das en configurar input1 y listo.

Sólo dos cosas más, si tienes impresora por puerto paralelo y cups, primero cargate cups quítalo del inicio, o dale stop al servicio, y quita el módulo lp con un:

Código: Consola
rmmod lp

y después ya cargas el joydev y gamecon, por otro lado si tu máquina se pone lenta con el pad conectado prueba a recompilar el módulo gamecon, asi (es un copy-paste del articulo de Bulma):


Explicación: Cita
Optimización del driver gamecon.c
Si habeis notado que aunque todo vaya bien,las aplicaciones pierden mucho rendimiento
cuando el pad está conectado(jugar a un juego de cps-2 con el xmame es un buen ejemplo
Wink) se debe a que el driver está constantemente ocupando la CPU, para solucionar esto
necesitamos tocar unas pocas líneas del código del driver gamecon.c el cual lo podreis
encontrar en /usr/src/linux/drivers/char/joystick. Los cambios a realizar son muy simples:
* Cambiar en la constante GC_PSX_DELAY el valor de 60 por uno bastante menor. Ejemplo:
#define GC_PSX_DELAY 15
* Cada vez que se use la variable observareis que se multiplica por 2, pues bien, quitar
ese * 2 y dejar la variable tal cual. Ejemplo:
udelay(GC_PSX_DELAY);
Una vez realizados los cambios, recompila el módulo y compruebas que tal va. El valor
de GC_PSX_DELAY es arbitrario, tienes que ir jugando con él hasta que encuentras uno
que te vaya bien, yo primero probe 30 y seguia demasiado lento, hasta que probé
al 15 y me gusto como iba.

En realidad con kernel 2.6 ya se da el delay en 25, yo casi no lo noto y no edité nada, esto era para un 2.4.

[editar] UDEV

Migre ya hace un rato a udev y no tuve que hacer gran cosa lo único que cambia es la ubicación del dispositivo:

  • de:

/dev/js0

  • a

/dev/input/js0

Cada vez que conectes el pad y cargues los móduos udev creará automáticamente el dispositivo.

[editar] Créditos

  • [www.emulatronia.com Emulatronia]
  • Artículo escrito por Navegante
Herramientas personales