Construcción de adaptador Joystick a PS/2

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 31 Oct 2016, 09:56

Quest escribió:Me paso por aquí para comentar solamente que sigo de vez en cuando el hilo, pero no intervengo porque realmente no tengo mucho tiempo ahora. Es genial ver cómo este tema avanza :) , ya comenté hace tiempo que el código era muy "temprano" y que posiblemente contenía bugs y mucho margen de mejora (de hecho no había hecho prácticamente nada en Arduinos antes). Así que agradezco de verdad este trabajo. Cuando tenga más tiempo, puedo ir añadiendo las mejoras vistas por aquí para obtener un conversor lo más funcional y correcto posible.

:gracias!: :chocala!:
De nada! Gracias a tí por el código. Para el diseño final tambien tengo pensado añadir en la misma PCB los 5 botones que pueden faltar:

Boton 2, 3, 4, Select y Start

De esta manera servirá cualquier joystick kempston, y los botones que falten pueden apoyarse de los de la PCB... aunque lo ideal es modificarse uno, ya facilitare el circuito, es muy sencillo, solo hay que añadir unos diodos a partir del cuarto botón.

Enviado desde mi thor mediante Tapatalk

Avatar de Usuario
yombo
Mensajes: 487
Registrado: 05 Oct 2015, 14:10

Re: Construcción de adaptador Joystick a PS/2

Mensaje por yombo » 31 Oct 2016, 12:05

spark2k06 escribió:
yombo escribió:Hay un fallito sin importancia, que puede ocasionar una pulsación de tecla al empezar: La variable temp no tiene un valor inicial asignado cuando se usa por primera vez en main()
Hecho! :okidoki;
yombo escribió:Luego, una optimización más irrelevante aún es en sendPS2(), donde calculas el bit de paridad para cada bit, cuando basta para el último. Esto lo puedes hacer creando otra variable local copia de 'code' para shiftear, y usar el dato original al calcular la paridad, ya fuera del bucle de los 8 bits.
Estás registrado en github? Creo entenderte con el cambio pero prefiero ver la función tal cual la propones, ésta es una función original de Quest, no mía. Si estas registrado, puedes hacer un pull request? De lo contrario, puedes ponerme aquí mismo el código de la función con tu propuesta? :gracias!:
Sí tengo cuenta en github, soy yomboprime :D

Olvida lo de la optimización, está bien calculada, me había liado yo (perdona por hacertelo revisar)

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 31 Oct 2016, 12:06

yombo escribió:
spark2k06 escribió:
yombo escribió:Hay un fallito sin importancia, que puede ocasionar una pulsación de tecla al empezar: La variable temp no tiene un valor inicial asignado cuando se usa por primera vez en main()
Hecho! :okidoki;
yombo escribió:Luego, una optimización más irrelevante aún es en sendPS2(), donde calculas el bit de paridad para cada bit, cuando basta para el último. Esto lo puedes hacer creando otra variable local copia de 'code' para shiftear, y usar el dato original al calcular la paridad, ya fuera del bucle de los 8 bits.
Estás registrado en github? Creo entenderte con el cambio pero prefiero ver la función tal cual la propones, ésta es una función original de Quest, no mía. Si estas registrado, puedes hacer un pull request? De lo contrario, puedes ponerme aquí mismo el código de la función con tu propuesta? :gracias!:
Sí tengo cuenta en github, soy yomboprime :D

Olvida lo de la optimización, está bien calculada, me había liado yo (perdona por hacertelo revisar)
Ok, sin problema.

Enviado desde mi thor mediante Tapatalk

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 02 Nov 2016, 18:20

@Newsdee, sobre lo que propones, yo habia pensado utilizar DB9 para mantener compatibilidad con el puerto original, pero se le añadirian hasta 3 botones mas (un total de 6) mediante combinaciones imposibles como arriba+abajo, izquierda+derecha, y las cuatro direcciones a la vez... Mas info en el readme del github

Enviado desde mi thor mediante Tapatalk

Avatar de Usuario
Newsdee
Mensajes: 51
Registrado: 25 Oct 2016, 03:24

Re: Construcción de adaptador Joystick a PS/2

Mensaje por Newsdee » 03 Nov 2016, 01:21

Tengo varias preguntas y sugerencias para este tipo de adaptador. Seria util para varios usos (no solo en la ZxUno).

Con el board arduino que usas, se podrian adaptar gamepads de USB a PS2? Tengo codigo en el firmware de MiST con un standard de mapping que puedes copiar (se soportan hasta 12 botones + direcciones, de los cuales se pueden mapear combinaciones al teclado y al mouse).

Por el DB9 te aconsejaria mirar como funcionan los pads de Megadrive, que usan un pin para multiplex varios botones. Te daría 7 botones en total y seria compatible con muchos mandos existentes sin tener que modificarlos.

Lo del DB15 es porque es un estandar en el mundo arcade (introducido por la neogeo), que como el formato Atari DB9 se cablea directo a cada boton sin que sea necesario ningun chip o microcontrolador. O sea que con cualquier cosa te haces un joystick :) Permite hasta 8 botones aparte de las 4 direcciones, y es trivial de adaptar para recibir joysticks DB9 (Atari/Amiga) por cableado a los pines correspondientes.

La ultima cosa que podria recomendar en prever se tener inputs para dos jugadores, por ejemplo para el core NES, si hay suficientes pines GPIO en la placa del adaptador.

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 03 Nov 2016, 05:58

Newsdee escribió:Tengo varias preguntas y sugerencias para este tipo de adaptador. Seria util para varios usos (no solo en la ZxUno).

Con el board arduino que usas, se podrian adaptar gamepads de USB a PS2? Tengo codigo en el firmware de MiST con un standard de mapping que puedes copiar (se soportan hasta 12 botones + direcciones, de los cuales se pueden mapear combinaciones al teclado y al mouse).

Por el DB9 te aconsejaria mirar como funcionan los pads de Megadrive, que usan un pin para multiplex varios botones. Te daría 7 botones en total y seria compatible con muchos mandos existentes sin tener que modificarlos.

Lo del DB15 es porque es un estandar en el mundo arcade (introducido por la neogeo), que como el formato Atari DB9 se cablea directo a cada boton sin que sea necesario ningun chip o microcontrolador. O sea que con cualquier cosa te haces un joystick :) Permite hasta 8 botones aparte de las 4 direcciones, y es trivial de adaptar para recibir joysticks DB9 (Atari/Amiga) por cableado a los pines correspondientes.

La ultima cosa que podria recomendar en prever se tener inputs para dos jugadores, por ejemplo para el core NES, si hay suficientes pines GPIO en la placa del adaptador.
En el tema USB a PS2 con arduino yo no me voy a meter...supongo que incluso puede ser hasta fácil de hacer, pero quizá como otro adaptador a parte. Sin embargo, con lo del DB15 me habéis convencido totalmente, parece mentira pero no sabía hasta ahora que existía ese estandar para el mundo arcade (no sabía nada sobre Neogeo en este sentido), de hecho, mi idea principal con este proyecto era adaptar mi máquina arcade que me estoy construyendo para poder utilizar ZXUno desde PS/2, aunque principalmente esté conectada a una Raspberry PI 3:

Imagen

Creo que al final voy a tirar por el siguiente tipo de adaptador para tener 0 complicaciones:

1 cable corto de salida a PS/2 para conectar al ZXUno (o a cualquier otro aparato que reciba señales de teclado PS/2, quien sabe si incluso funcionaría un adaptador PS/2 to USB comercial a esta sálida, aunque no sea el objetivo final)

1 conector de entrada PS/2 para hacer de puente, y poder utilizar un teclado también si se desea.

1 conector DB15 (norma Atari ampliado) para utilizar mando arcade de 8 botones, al menos 5 para juegos ... y los otros especiales para las combinaciones de control total del ZXUno propuestas inicialmente, y el control del menú de muchos juegos de spectrum y quien sabe si amstrad CPC en un futuro? :boingg:

2 conectores DB9 que utilicen las mismas GPIO que el DB15 para dos mandos de hasta 3 botones (norma Atari) y poder jugar a dos jugadores... con otro mapeo especial aunque sin control del ZXUno en un principio...ya veríamos si podría realizar algún apaño desde el código de arduino para controlar desde el primer mando, pero no sería el objetivo principal.

Al final, el mapeo de los botones sería configurable mediante la reprogramación del arduino, y como voy a utilizar un arduino nano de esos chinos (2 euros cuestan en aliexpress) con entrada microUSB para programar y visible en el adaptador, pues es fácil para cualquiera.

Avatar de Usuario
Newsdee
Mensajes: 51
Registrado: 25 Oct 2016, 03:24

Re: Construcción de adaptador Joystick a PS/2

Mensaje por Newsdee » 03 Nov 2016, 08:07

Lo de USB es una idea mía de adaptar codigo del firmware MiST a algo mas genérico para conectar gamepads USB a varias cosas. Por lo que he visto necesitaria otra placa que el nano y se hace mas complicado.

Aqui muestran el pinout DB15; me imagino que esto andaría con tu adaptador PS/2:
http://www.etokki.com/PSX2JAMMA

El mapeo se puede hacer en el arduino. Si hay lugar en los pines podrias tener un switch para tener mas que uno en caso de tener mas de un joystick/gamepad.

Yo lo que hago con la MiST es mapear un boton a "Arriba" para saltar en algunos juegos de Atari o Amiga :)

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 03 Nov 2016, 08:55

Newsdee escribió:Aqui muestran el pinout DB15; me imagino que esto andaría con tu adaptador PS/2:
http://www.etokki.com/PSX2JAMMA
Sí, lo he visto, gracias...
Newsdee escribió:El mapeo se puede hacer en el arduino. Si hay lugar en los pines podrias tener un switch para tener mas que uno en caso de tener mas de un joystick/gamepad.
El mapeo va en el arduino, sí. Se me había ocurrido que después se puede preparar alguna aplicación para remapear los botones a gusto de cada uno y que dicha aplicación modifique directamente el HEX del arduino con el nuevo mapeo, listo para reprogramarlo.

sobre el switch para tener mas de uno? mas de un qué? perdona pero ahí no te he entendido... en los pines gpio de arduino te refieres? alguna entrada/salida analogica sí que sobrara... :-)
Newsdee escribió:Yo lo que hago con la MiST es mapear un boton a "Arriba" para saltar en algunos juegos de Atari o Amiga :)
No es mala idea :boingg:

Avatar de Usuario
Newsdee
Mensajes: 51
Registrado: 25 Oct 2016, 03:24

Re: Construcción de adaptador Joystick a PS/2

Mensaje por Newsdee » 03 Nov 2016, 09:57

spark2k06 escribió: sobre el switch para tener mas de uno? mas de un qué? perdona pero ahí no te he entendido... en los pines gpio de arduino te refieres? alguna entrada/salida analogica sí que sobrara... :-)
Se podría cargar mas de un mapping a la vez y seleccionarlo con un switch físico (como dip switches). De esa manera se evita tener que repogramar el arduino si cambias de joystick, o puedes tener mapping especiales para algunos juegos.

Te puedo dar un ejemplo que hice con un joystick arcade. Tiene seis botones en dos filas. Con un interruptor lo puedo pasar de un layout "capcom" (abc + def) a un layout "snk" (bcd + a, con dos botones "desconectados").

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Construcción de adaptador Joystick a PS/2

Mensaje por spark2k06 » 03 Nov 2016, 10:03

Newsdee escribió:
spark2k06 escribió: sobre el switch para tener mas de uno? mas de un qué? perdona pero ahí no te he entendido... en los pines gpio de arduino te refieres? alguna entrada/salida analogica sí que sobrara... :-)
Se podría cargar mas de un mapping a la vez y seleccionarlo con un switch físico (como dip switches). De esa manera se evita tener que repogramar el arduino si cambias de joystick, o puedes tener mapping especiales para algunos juegos.

Te puedo dar un ejemplo que hice con un joystick arcade. Tiene seis botones en dos filas. Con un interruptor lo puedo pasar de un layout "capcom" (abc + def) a un layout "snk" (bcd + a, con dos botones "desconectados").
Vale, ahora te he entendido. Se me ocurre hacer un simple switch a una de las entradas que sobran de arduino, que vaya cambiando de un mapping a otro, y luego vuelva al comienzo, aunque por defecto serían los cursores, Start (Intro) y Select (ESC)... eso sí, para manejarnos por los menús... con unos leds chulos, también podríamos saber en qué mapping nos encontramos... si no se nos acaban los pines xD

Responder