Cable Pad Port PSX (subir psexe)

ackerman
Mensajes: 63
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecimiento recibido: 41 veces

Cable Pad Port PSX (subir psexe)

Mensajepor ackerman » 22 Jul 2020 14:18

Hasta ahora, tenemos herramientas para subir ejecutables a la PS1, por medio de puerto serie, tarjetas de memorias y cartuchos:
Por supuesto, en todos estos sistemas, se requiere saltarse el sistema de protección, es decir, que previamente, necesitamos un chip o la técnica del SWAP.

Estoy realizando un programa que permite subir psexe's y datos (sonidos VAG y gráficos TIM) por medio del puerto de mandos de la PSX (PS1). Tan sólo se necesita, un Arduino UNO o Nano y un alargador de mandos:

Imagen

El motivo de este proyecto, es para que cualquiera puede hacer un cable de emergencia, sin falta de pagar el sobreprecio de algunos componentes ya descatalogados, y para poder programar la PSX en una tablet, por ejemplo.

He realizado 2 subproyectos:
- Cable que mediante 4 transistores activando a los botones de los gatillos de la PSX envia los datos encapsulado en pulsaciones L1, R1, L2, R2, controlado por ARDUINO.
- Cable donde ARDUINO simula ser un mando, que envia los datos por el protocolo SPI de PSX al conector de mandos de la PSX.

El bus SPI de la PSX,su máxima velocidad es de 250 Khz, es decir, que jamás podremos superar los 250000 bits por segundo.
Estoy consiguiendo velocidades de 12800 bits por segundo. Dado que tenemos que pasarle datos del ordenador al ARDUINO, normalmente a 115200 baudios, al usar un buffer intermedio, la velocidad final, se ve reducida, a menos de la mitad.

Las velocidades que estoy testeando en máquina real y funcionan:
  • Speed 0 (50 ms 3 bits 60 bauds) - emula mando digital
  • Speed 1 (25 ms 3 bits 120 bauds) - emula mando digital
  • Speed 2 (50 ms 8 bits 160 bauds) - emula mando digital
  • Speed 3 (25 ms 8 bits 320 bauds) - emula mando digital
  • Speed 8 (50 ms 16 bits 320 bauds) - emula mando analogico
  • Speed 9 (25 ms 16 bits 640 bauds) - emula mando analogico
  • Speed 10 (50 ms 32 bits 640 bauds) - emula mando analogico
  • Speed 11 (25 ms 32 bits 1280 bauds) - emula mando analogico
  • Speed 12 (50 ms 64 bits 1280 bauds) - mensaje custom
  • Speed 13 (25 ms 64 bits 2560 bauds) - mensaje custom
  • Speed 14 (50 ms 112 bits 2240 bauds) - mensaje custom
  • Speed 15 (25 ms 112 bits 4480 bauds) - mensaje custom
  • Speed 16 (50 ms 128 bits 2560 bauds) - mensaje custom
  • Speed 17 (25 ms 128 bits 5120 bauds) - mensaje custom
  • Speed 18 (50 ms 224 bits 4480 bauds) - mensaje custom
  • Speed 19 (25 ms 224 bits 8960 bauds) - mensaje custom
  • Speed 20 (50 ms 256 bits 5120 bauds) - mensaje custom
  • Speed 21 (25 ms 256 bits 10240 bauds) - mensaje custom
  • Speed 22 (50 ms 448 bits 8960 bauds) - mensaje custom
  • Speed 23 (25 ms 448 bits 17920 bauds) - mensaje custom
  • Speed 24 (50 ms 512 bits 10240 bauds) - mensaje custom
  • Speed 25 (25 ms 512 bits 20480 bauds) - mensaje custom
Dejaré todo lo que vaya haciendo en:
https://github.com/rpsubc8/serialpad

Aunque existen partes que puede usar el usuario final, por ahora, se requiere saber de programación para quitar y poner lineas de código para hacer tests, así que esto, es más bien, una bitácora para ver las posibilidades del proyecto.


Herramientas
He creado la herramienta intermedia GENFRAME, realizada en PASCAL para portar en MSDOS 16 bits y Windows, para poder usar en emulador DOSBOX y Windows. Esta herramienta se encarga de generar las tramas intermedias con las opciones:

Código: Seleccionar todo

GENFRAME demo1.exe frame.txt 80010000 25 0 25


Luego, con el programa RealTerm eligiendo los tiempos de espera en cada línea, normalmente 1050 ms, y una velocidad de 115200 baudios de comunicación con el ARDUINO, podremos enviar el fichero.

Ya no necesitamos el realterm. Ahora se puede usar la herramienta SEND desde el DOSBOX. Se requiere modificar el fichero de configuración del DOSBOX para nuestro puerto usb serie FTDI TTL:

Código: Seleccionar todo

serial1=directserial realport:com21

Después podemos lanzar la aplicación:

Código: Seleccionar todo

SEND frame.txt 1050 115200




Velocidad
Es fácil y al mismo tiempo dificil de explicar. Por un lado tenemos la velocidad del bus SPI (puerto mandos) con el arduino, por otro, el pseudo protocolo de emulación de mando, y por otro la comunicación de la UART de ARDUINO con el ordenador o dispositivo. Por tanto, nos salen 3 actores, cada uno con su pseudo sistema de baudios de transmisión. Aunque no es correcto usar el término baudio, sino bits por segundo, yo lo voy a utilizar por facilidad.
Aunque consigo transmisiones de 20480 baudios, e incluso mucho más, en emulación del mando, a la hora de comunicarse por el SPI de la PSX, así como la UART de ARDUINO (115200 baudios), la velocidad final del sistema, nos queda, en unos 6419 bits por segundo, es decir, 802 bytes/s. He realizado comunicaciones con la UART de ARDUINO a velocidades superiores a los 115200 baudios, en concreto 1.000.000 baudios, con técnicas de buffers directas, pero al final la velocidad del computo global del sistema no supera los 1000 bytes/s.
Como todo en esta vida, es una velocidad suficiente para muchas cosas, y para otras, lenta, pero una cosa está clara, es una velocidad, y quiere decir, que en enviar 60000 bytes, tardará 60 segundos, mientras que para 2 MB, tardará 33 minutos.

ackerman
Mensajes: 63
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecimiento recibido: 41 veces

Re: Cable Pad Port PSX (subir psexe)

Mensajepor ackerman » 22 Jul 2020 19:27

Acabo de conseguir 20480 baudios en el envio, que serian unos 1000 bytes por segundo de media en total, dado que tenemos que restar la velocidad de lectura (115200 baudios) del ARDUINO.
Dejo video de demostración de carga de la intro de PARADOX:

https://www.youtube.com/watch?v=prJoN1dYN0M

ackerman
Mensajes: 63
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecimiento recibido: 41 veces

Re: Cable Pad Port PSX (subir psexe)

Mensajepor ackerman » 29 Jul 2020 17:21

Podemos decir adios al RealTerm y a Windows.
Ya he terminado la utilidad para enviar los datos desde el DOSBOX, remapeando el puerto serie ARDUINO FTDI usb TTL. Hay que editar el fichero configuración del DOSBOX:

Código: Seleccionar todo

serial1=directserial realport:com21

El puerto com hay que poner el del ARDUINO.

SEND

Y para enviar el archivo:

Código: Seleccionar todo

SEND frame.txt 1050 115200

Ahora ya podemos enviar desde cualquier dispositivo con soporte DOSBOX + usb serie hasta 115200 baudios.
Dado que el psyq con el kit de 16 bits compila al 100% en DOSBOX, ya tenemos un kit 100% funcional para compilar y enviar desde casi cualquier plataforma.

Avatar de Usuario
Valfac
Mensajes: 13
Registrado: 06 Mar 2020 23:11
Agradecido : 1 vez
Agradecimiento recibido: 2 veces

Re: Cable Pad Port PSX (subir psexe)

Mensajepor Valfac » 29 Jul 2020 18:41

Muchas gracias!

Habrá que ir desempolvando la PSX

ackerman
Mensajes: 63
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecimiento recibido: 41 veces

Re: Cable Pad Port PSX (subir psexe)

Mensajepor ackerman » 31 Jul 2020 19:07

Va a venir muy bien, tener gente para probarlo.
Aunque la funcionalidad es muy buena, el proyecto está al 40%. Cuando esté al 90%, será cuando sea usable sin falta de tener conocimientos de programación, pero tranquilos, que está cerca.
Estoy creando un menú para seleccionar las velocidades (custom mensaje) de 12 a 25, es decir, arrancamos el cargador, seleccionamos, y esperamos que enviemos el programa.
Aquí es donde entra la artesanía, al estilo de las ultracargas de cintas. El SPI, tal y como está va a dar problemas de tener el mando y ARDUINO al mismo tiempo, aunque esten en puertos distintos. Por tanto, dejo o bien detectar cuando se desconecta el mando (AUTO) o bien, acepto la velocidad, y me pone un temporizador de 10 segundos para desconectar el mando.
El mando y el ARDUINO se pueden tener en el puerto que queramos y está definido por código.

Imagen

La idea, de todo esto, es tener este TEST, ver que velocidad va bien, y entonces, recompilamos una versión especifica para la velocidad dada.
Lo que más va a llevar, es la documentación.

Van a existir 2 cargadores para PSX:
- Cargador compatible con botones laterales (4 transistores) y con emulación SPI mando digital y analógico (velocidad 0 a 11).
- Cargador para custom mensajes ( velocidad 12 a 25).

Luego estarían los programas de Arduino para cada grupo de velocidades, que son varios, creo que 9.

Y por último estarían:
GENFRAME - generador de tramas
SEND - envia tramas
Se puede usar el SEND, o si nos gusta algun terminal específico compatible con FTDI de arduino, en Windows, LINUX o ANDROID, existen múltiples.


Volver a “Consolas Clásicas”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado