 ###################################################################
 #  arcade.c - Driver usando el puerto paralelo para Maquinas Arcade
 #  Por David Colmenero AKA D_Skywalk <dantoine@gmail.com>
 #  Gracias a:
 #                          Vojtech Pavlik <vojtech@suse.cz>
 #                          Peter Nelson <rufus-kernel@hackish.org>
 #  						por su fantastico trabajo con "gamecon.c"
 #
 #  Version 0.4 - 8 Marzo de 2006
 #		By D_Skywalk

 ( si, los acentos han sido omitidos y las enyes evitadas :P )

----------------------------------------
(I) Introduccion y el por que del driver
----------------------------------------

OpenPPjoy es un driver totalmente OpenSource que permite usar el puerto paralelo
para nuestros controles arcade; en principio voy a trabajar en Linux, pero al ser
el driver abierto, si alquien quiere portarlo a MSDOS, MacOS o Windows; es per-
fectamente libre de hacerlo :)


El objetivo inicial va a ser hacer un simple keycoder por software (la pulsacion
de un boton te da una tecla) y un soporte basico para joystick virtuales (de 8
botones y 2 ejes).

--------------------------------------------
(II) Como mejorar el driver e implementacion
--------------------------------------------
En este momento el driver aunque no es configurable, es totalmente funcional,
siempre que prepareis un panel para el... que ademas (supongo) que tambien seria 
compatible con la version oficial de PPjoy :?

Antes de comenzar:
		 - Aconsejo mirar antes el tutorial de PPjoy en Marcianitos.net
				http://www.marcianitos.org/tutoriales/IC018.htm
		 - Mas informacion sobre el driver y soporte, en el topic original:
				http://www.forumcommunity.net/?t=2173834		 


Si habeis leido lo anterior, vereis que la implementacion de este driver en pane-
les de control arcade es muy simple, os dejo un esquema para un mando arcade:

                                       #JOY1
                                      |--@---(2)
                                      |--@---(3)
                                      |--@---(4)
                                      |--@---(5)
L10-[Resistencia]---------------------|--@---(6)
                                      |--@---(7)
                                      |--@---(8)
                                      |--@---(9)
                                      |--@---(1)
                                      |--@---(14)
                                      |--@---(16)
                                      |--@---(17)

Leyenda:  @  - Botones, configurados en: "normalmente desconectados".
		 (n) - Lineas de datos.
		 lnn - Lineas de lectura.

Y asi podriais seguir usando las siguientes lineas disponibles (11,12,13,15). Por
si alguno aun no lo tiene claro, pongo un ejemplo final con 2 palancas:

                                       #JOY1
                                      |--@---(2)
                                      |--@---(3)
                                      |--@---(4)
                                      |--@---(5)
L10-[Resistencia]---------------------|--@---(6)
                                      |--@---(7)
                                      |--@---(8)
                                      |--@---(9)
                                      |--@---(1)
                                      |--@---(14)
                                      |--@---(16)
                                      |--@---(17)
									  
                                       #JOY2
                                      |--@---(2)
                                      |--@---(3)
                                      |--@---(4)
                                      |--@---(5)
L11-[Resistencia]---------------------|--@---(6)
                                      |--@---(7)
                                      |--@---(8)
                                      |--@---(9)
                                      |--@---(1)
                                      |--@---(14)
                                      |--@---(16)
                                      |--@---(17)

Leyenda:  @  - Botones, configurados en: "normalmente desconectados".
		 (n) - Lineas de datos.
		 lnn - Lineas de lectura.

En total podriais tener 5 palancas de 8 botones o 3 palancas y las dos configura-
ciones de teclado basicas, etc... imaginacion al poder! xD


-------------------------------------------
(III) Teclas y botones que emula el driver:
-------------------------------------------
(1) JOYSTICK: 2 ejes y 8 botones.

    TECLADO:
	(2) KEY1 - 	CURSOR_UP
		 		CURSOR_DOWN
				CURSOR_LEFT
				CURSOR_RIGHT
				CURSOR_SPACE
				LEFT_CONTROL
				LEFT_SHIFT
				LEFT_ALT
				ESC
				ENTER
				[5]
				[1]
				
	(3)	KEY2 -	[W]
				[S]
				[A]
				[D]
				[Q]
				[E]
				[Z]
				[X]
				[C]
				[V]
				[6]
				[2]



----------------------------------
(IV) Uso y configuracion:
----------------------------------

Para instalar el driver necesitas las cabeceras (HEADERS) del kernel que esteis 
usando actualmente por ejemplo en debian/ubuntu seria:

# apt-get install linux-headers-`uname -r`

Una vez instalados las cabeceras (o mismo source completo si lo deseas), hacemos:
# make 

Si todo ha terminado bien, tendriamos que tener un arcade.ko en el directorio 
donde compilaste el modulo. Ahora vamos a explicar como "map=" configura el dri-
ver a nuestro gusto:
map=x,y1,y2,y3,y4,y5

La [x] define el puerto paralelo a usar, en la mayoria de los casos sera 0.
La [yN] define el numero del tipo de control que deseamos usar de la siguiente
lista:
  1 - Palanca de 8 botones
  2 - Key config 1 (ver arriba)
  3 - Key config 2 (ver arriba)

Unos ejemplos finales, teniendo en cuenta que "insmod" es para cargar el modulo 
y que "arcade.ko" seria el modulo (si aun teneis dudas, buscad por ahi tutoriales
que sobre estos temas hay muchos!! :P

# insmod arcade.ko map=0,1 

Y con esto tendriamos una palanca de 8 botones que lee la linea 10...

Si hubieramos hecho:
# insmod arcade.ko map=0,1,1,1,1,1

Tendriamos 5 palancas de 4 botones que leen las lineas: 10,11,12,13,15 :)

Por ultimo si hacemos:
# insmod arcade.ko map=0,1,1,1,1,3

Facilmente podemos conseguir 4 de 8 botoncitos y una configuracion basica de te-
clado ;)


----------------------------------
(V) Agradecimientos:
----------------------------------

A mi novia por aguantarme 2 dias hablandole de como solucionar los problemas ini-
ciales del driver ;*

A Macarro y a [MaD] por las largas conversaciones de como hechar a andar el 
proyecto :D

Marcianitos.net - Por su fantastica comunidad


-----------------------------------
David Skywalker (D_Skywalk) dantoine@gmail.com
http://david.dantoine.org
