Autor Tema: Musk64: Pi1541 y Tapuino en 1 solo dispositivo  (Leído 5520 veces)

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Musk64: Pi1541 y Tapuino en 1 solo dispositivo
« en: Octubre 17, 2021, 17:04:27 »
Después de muuuucha pelea, finalmente he conseguido portar Tapuino y Pi1541 para que funcionen en una misma plataforma (Teensy 4.1:https://www.pjrc.com/store/teensy41.html)
Elegí la Teensy porque da mucho rendimiento (800 Mhz) a un precio ajustado ($26 + envio), en un tamaño inferior a un arduino o una raspi, con un interfaz de programación tipo Arduino, y suficientes pines/dispositivos (SPI,I2C,etc,etc)

Portar tapuino (al menos, la versión antigua) es bastante trivial, el problema ha sido portar pi1541.. En ambos casos, había que eliminar todo el código de interfaz de usuario, y el código dependiente de plataforma...y luego adaptarlo a lo que la Teensy 4.1 puede hacer.
Éste ha sido el principal problema, ya que emular la 1541 significa que hay que emular lo que las VIAs leen del cabezal de la diskettera, y este proceso funciona a 16Mz, y, con el código original, la Teensy no cumplía el timing requerido...Por algún motivo, la pi1541 utiliza floats para mantener unos contadores que realmente podrían utilizar enteros, y con este cambio se ganan los ciclos necesarios para hacerlo funcionar.
El siguiente paso a probar, es usar un ESP32 para dar conexion wifi a la Teensy. El test inicial es descargar un d64 de la red, guardarlo en la sd, y montarlo en la diskettera. Esto abriria la puerta a tener un feed de novedades de juegos, demos, etc, descargarlos y ejecutarlos directamente desde el c64.
Además, el ESP32 también da bluetooth, como ya usa rik en su unijoysticle, por lo que también se podría integrar el soporte de mandos bluetooth dentro de la misma plataforma.
Otra de las cosas que es posible hacer con la pareja ESP32-teensy, son actualizaciones automáticas, ya que sería posible flashear la Teensy desde el ESP32 (aunque  no sé si sería necesario almacenamiento adicional para hacer esto).
Por otro lado, dar soporte básico a crts no debería ser complicado...habría que ver si sería posible portar código de Kung fu flash / EasyFlash y meterlo también en la misma plataforma..

En definitiva, la idea es tener 1 solo dispositivo, que haga cuantas más cosas mejor, y, suponiendo que seguirán saliendo placas cada vez más potentes, que migrar de una placa a otra no signifique reescribir proyectos completos, pero, sobre todo, añadir formas fáciles de acceder a las nuevas producciones y ejecutarlas en el hardware real sin tener que mover tarjetas SD de un lado a otro.

Ya iré dejando por aquí los avances que haya..
« última modificación: Febrero 21, 2022, 21:09:13 por josepzin »

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #1 en: Octubre 18, 2021, 03:48:23 »
Súper interesante Dashiad, seguiremos los avances con interés!

No sé que tan complicado sea luego poner en marcha esto por cuenta de la gente, pero toda nueva alternativa es genial!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

javierglez

  • Commodore Master
  • *****
  • Mensajes: 453
  • terminator not seen
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #2 en: Octubre 18, 2021, 12:17:58 »
Yo creo que si sustituye a Tapuino y a pi1541 ya está bien, porque ocuparía los mismos ports que un sd2iec pero con total compatibilidad.

Integrar el crt, creo que complicaría mucho el diseño, y el cartucho de easyflash es compacto y está bien estéticamente. Además esa combinación ya existe, es la Ultimate1541.

Y  tampoco veo estético tener un aparato con cables a todos los conectores. Especialmente para el joystick. Si fueran dongles sería otra cosa. Si tiene que haber otro cable preferiría que fuese para el port de usuario (el modem) que queda por detrás iguamente.

De hecho a mí lo que me gustaría sería un aparato que sustituyese al modem y a la unidad de disco. El datassette me da igual. 

Gabi64

  • Commodorista
  • ***
  • Mensajes: 68
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #3 en: Octubre 18, 2021, 16:42:32 »
Que crack!!
Con kungfu flash aún mejor!
Yo abogo por hacer "el anillo único" y reunirlos a todos (los dispositivos)!!!

PacoBlog64

  • Commodore Master
  • *****
  • Mensajes: 361
  • INC $D020
    • Ver Perfil
    • PacoBlog64
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #4 en: Octubre 18, 2021, 17:05:22 »
Me parece una excelente noticia, espero que logres unificar las 3 cargas (cinta, disco y cartucho) en un solo dispositivo de bajo coste, yo ya me empiezo a cansar de andar trasteando con Tapuino, Pi1541, EF3 y KFF para cargar juegos  ;D Aunque funcionan muy bien, eso es cierto.
Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #5 en: Octubre 19, 2021, 17:04:37 »
Otro proyecto de multi-device: https://github.com/idolpx/meatloaf
Al basarse en ESP32, creo que no va a poder ir mucho más allá (emula modem + IEC básico, no tengo claro si llega a una SD2IEC).
Permite tener un servidor web en algún lado, y cargar programas a través de LOAD "HTTP://....."..
Sobre el resto de los asuntos:
- Aún estoy muy muy lejos del punto donde la estética es el problema a resolver. En cualquier caso, no tendría por qué tener cables aparte de la alimentación (posiblemente, joysticks, si se añadiera soporte).

- La Ultimate ya está para muchas cosas. Existe SD2IEC, Pi1541 y otros proyectos, por motivos de precio y disponibilidad.
- Por otro lado, cuando salió la Ultimate, simplemente, no había otra forma de hacer lo que hace la Ultimate.Una FPGA era la única cosa, en ese factor de forma, capaz de dar esa funcionalidad. Pero a medida que salen microprocesadores más potentes, esto supongo que irá cambiando (sólo hay que ver todo el uso que se le da a la raspberry pi en el mundo Amiga). Un teléfono de 100 euros tiene un procesador que va más que sobrado para hacer lo que antes requería una FPGA. A medida que esos procesadores llegan a placas "de usuario", a precios muy muy bajos, lo lógico es que las vayan sustituyendo, al menos en el mundo de la  emulación de ordenadores de 8 bits.
Hay dos ventajas adicionales: primero, que no es necesario conocer VHDL o Verilog para crear dispositivos.Esa ventaja es lo que ha permitido el éxito de Arduino.No hace falta ser un ingeniero electrónico para hacer cosas.
La segunda, es la gigantesca cantidad de código open source que existe, y que es mucho más fácil de portar. Lo *ideal* sería portar directamente el código de VICE a un dispositivo pensado para funcionar con un C64 real. Si no me equivoco, la Ultimate no es open source, y, aunque lo fuera, de nuevo, ese código es territorio que requiere una cierta especialización.

Ese punto de "especializacion" es importante: la raspi no estaba pensada para cosas como replicar la disketera del C64, o un coprocesador de un Amiga. Tenía un procesador capaz de hacerlo, claro, pero eso requiere que se le programe en "bare metal", sin ningún tipo de operativo...Y para que eso funcione, tiene que haber librerías y documentación sobre cómo utilizar todos esos dispositivos (usbs, hdmi, wifi, memorias, SD...)..Documentar y crear APIs lo hacen muy bien placas como ESP32, Teensy, Arduino, etc , porque están pensadas para eso (usarse en "bare metal"), y la pi, no.
Como prueba, el código portado a Teensy 4.1 de la pi1541 tiene la mitad de ficheros. Y es porque sirven para cosas de bajo nivel de la Pi, cosa que los frameworks tipo "arduino" ya incluyen, no necesitas añadirlos a tu proyecto, saber para qué sirven, etc,etc.
Pero estaba claro que, con la potencia que da una pi, merecía la pena meterse en toda esa complejidad, en ese momento.

En resumen, procesar las señales que genera un ordenador de 8 bits (al menos), ya no es territorio exclusivo de las FPGA..Los procesadores necesarios ya están ahí, muchas veces falta simplemente una API simple.

javierglez

  • Commodore Master
  • *****
  • Mensajes: 453
  • terminator not seen
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #6 en: Octubre 19, 2021, 23:48:46 »
No se, yo te hablo como usuario, de Arduino estoy pez.

Mi comentario iba en la línea de que creo que la mayoría de la gente estaría encantada con un trasto que reúna tapuino+1541 y además no requiera una RPi. Y para fastloader/cartuchos ya estaría Easyflash que se complementa perfectamente. Y por tanto no necesitarías añadir mucha cosa más. Pero es solo una opinion claro.

Yo no tengo PI1541 pero en términos de compatibilidad todo el mundo habla bien, o al menos nadie habla mal, o sea que me imagino que va bien.

La Ultimate 1541 con el tema este del sector de semiconductores parece ser que no cree que pueda reanudar la producción y está estudiando rediseños.


Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #7 en: Octubre 22, 2021, 00:48:31 »
Emulación de cartucho (y muchas otras cosas) con Raspberry Pi:
https://github.com/frntc/Sidekick64

Citar
- C64 kernal replacement,
 -GeoRAM/NeoRAM-compatible memory expansion,
 -freezer cartridges
 -Function ROMs on a C128, or
 -multiple SIDs and Sound Expander/FM emulation (up to 8 SIDs, e.g. to play The Tuneful 8)
 -simplified Datel and Sequential MIDI interface with built-in SoundFont-synthesizer (slightly modified
 version of TinySoundFont)
 -TED-sound and Digiblaster emulation for C16/+4 (to have all sound devices on one output)

But many more things are imaginable, e.g. 80 column cards with HDMI video output, custom accelerators/coprocessors etc.
Hablando con el autor, voy a portar el código de la pi1541 para que funcione con Circle, el framework de desarrollo para Pi en baremetal que usa Sidekick, y así poder integrarlo en su proyecto.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #8 en: Octubre 25, 2021, 13:47:28 »
Y da la Rpi para todo lo otro más esto?
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #9 en: Noviembre 03, 2021, 16:18:35 »
He estado estos días dándole vueltas a cómo integrar el puerto de cartucho.
Hay 2 problemas a resolver, en principio:

- El número de pines. Ni la raspi , ni ESP32 tienen suficientes pines como para conectar directamente al puerto.La Teensy si tiene, pero prácticamente no quedaría para otra cosa. Las alternativas serían usar shift registers o multiplexadores de I/O. Hay que tener en cuenta que los accesos al bus de datos/direcciones, hay que resolverlos en medio ciclo de reloj, o sea, a 2 Mhz, lo que deja 500 nanosegundos para proceso.. Esto descarta los shift registers. Los multiplexadores de I/O, o añaden muchos componentes, (multiplexores 2 a 1) o son lentos (multiplexores 4 a 2, 8 a 3..)

- Interfaz a 5V. Raspi, ESP32 y Teensy, no soportan 5V en sus pines. Así que hay que usar conversores de nivel. Y para el número de pines que tiene el puerto de cartucho, eso son *muchos* conversores de nivel. Se podría hacer con voltage dividers, pero al parecer a altas frecuencias añaden problemas.
En teoría, sería posible usar multiplexores 2 a 1, que a la vez soportaran 5V..Pero, de nuevo, son muchos componentes.

Hay algo que resuelve ambas cosas, y es usar un stm32, que es lo que lleva la kung fu flash (reemplazando el uso de fpga que hace EasyFlash 3), que tiene pines para aburrir (placas basadas en el STM32H743VIT6 , tienen más de 80 pines, y cuesta 16 euros). Esto tiene la ventaja de que simplemente, habría que portar el código de la kung fu flash. Y la desventaja de que esos procesadores funcionan a un máximo de 480Mhz, y, al menos con la teensy, esa velocidad no sería suficiente para emular la diskettera.

Eso lleva a un tercer problema: no bastaría con emular cada cosa "por separado", sino "a la vez".La diskettera y el datasette podrían ser excluyentes (o funciona una cosa, o funciona otra), pero no, por ejemplo, la diskettera y el cartucho. Y en esto, sí que las FPGA aún ofrecen ventajas sobre los microprocesadores. Ninguno de los anteriores es capaz de emularlo todo a la vez. Ahora mismo, la Teensy 4.1 me deja entre 240 y 180ns libres por ciclo. Siendo muy optimista con las optimizaciones que podría hacer, llegaría a 350-290ns libres por ciclo, que dudo que diera para mucho (teniendo en cuenta que tendría que multiplexar pins, etc,etc).
En definitiva, es necesario tener una combinación de micros/placas para hacerlo todo.Por lo que veo, la mejor combinación sería una raspberry pi zero w, sobre todo la versión 2 que ha salido hace unos días, ya que tiene 4 cores (el mismo procesador que la raspi 3), y el stm32.
Así que, por ahora, esperar a que me llegue el stm32, ver si puedo meter el código de kung-fu flash tal cual, y luego adaptarlo.

« última modificación: Noviembre 03, 2021, 16:51:03 por Dashiad »

PacoBlog64

  • Commodore Master
  • *****
  • Mensajes: 361
  • INC $D020
    • Ver Perfil
    • PacoBlog64
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #10 en: Noviembre 03, 2021, 17:25:24 »
He estado estos días dándole vueltas a cómo integrar el puerto de cartucho.
Hay 2 problemas a resolver, en principio:

- El número de pines. Ni la raspi , ni ESP32 tienen suficientes pines como para conectar directamente al puerto.La Teensy si tiene, pero prácticamente no quedaría para otra cosa. Las alternativas serían usar ...

Muy interesante todo esto, parece un problema realmente complicado.
Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #11 en: Noviembre 04, 2021, 00:14:52 »
Yo creo que te conviene crear una buena versión optimizada para cinta y disco. Luego mas adelante cuando haya nuevo hardware que permita agregar lo del cartucho entonces ver si se puede portar o agregar, pero creo que ahora te vas a meter en un berengenal tremendo y el resultado parece mas cosa de Frankenstein!

En fin, hagas lo que hagas desde aquí te seguimos!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #12 en: Noviembre 12, 2021, 00:25:52 »
Pequeño update, ahora que ya tengo la Pi zero 2 w, y la STM32H750VB ..
Por un lado, tengo más o menos claro que el interfaz de usuario es mejor que esté en el móvil, que añadirle una pantalla al conjunto.Esto abre muchas posibilidades interesantes.
La conexión podría hacerse por bluetooth, con la Pi zero. El problema es que en bare metal, no hay mucho desarrollado para soporte de bluetooth, por cuestiones legales.Otra posibilidad es hacerlo vía wifi, un pelín más engorroso a la hora de configurar, (hay que  especificar ssid, password, ip estática), pero mucho más flexible en la comunicación en sí.
Me ha dejado bastante sorprendido el STM32H750VB ... La placa en la que viene (16 euros), tiene 88 pines!! (más grande que la pi zero, más pequeña que la pi 3). La kung fu-flash se basa en el STM32F405GTR, que funciona a 168Mhz, con 1.25 DMIPS/MHz...Mientras la familia H750VB funciona a 480Mhz, con 2.14 DMIPS/Mhz ..
O sea, que no es que el 750 sea casi 3 veces más rápido que un micro que ya es capaz de emular el cartucho.. sino que ejecuta más operaciones por Mhz.
De hecho, el 750 tiene un coremark de 2424 Mhz, ligeramente superior incluso que el de la Teensy 4.1 (2313)..
Como referencia, un Arduino Uno tiene un coremark de 7 (!), un ESP32 (usado, por ejemplo, en el modem para el C64), 351 ... El BCM2837 (raspberry pi 3, raspberry pi zero 2 w), 15363 (4 cores, a 1.2 Mhz)
Asi que parece que el stm32h750 más que se sobra para el cartucho, y yo diría que sería capaz de emular la diskettera (pero no creo que las 2 cosas a la vez, ni dar wifi...)

Por otro lado, la pi zero 2 w, tiene el mismo procesador que la raspi 3 (con la mitad de tamaño y precio), pero con una velocidad de reloj ligeramente inferior. Asi que quise probar si la pi1541 funciona con esta nueva placa.
Hice el test, y, sí, funcionar...funciona. O sea, arranca...Pero no le da para comunicarse bien con el C64.
La pi1541 tiene soporte para la pi zero original, que lleva un procesador distinto, y para la que se hicieron optimizaciones que, si se activan tambien para el procesador de la pi3/pi zero 2, hacen que sí que funcione pi1541 decentemente. Estas optimizaciones son las mismas que hice para portarlo a la teensy 4.1, básicamente, evitar aritmética no entera (floats, doubles)

« última modificación: Noviembre 12, 2021, 00:27:57 por Dashiad »

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #13 en: Noviembre 12, 2021, 01:07:01 »
Me pierdo con tantos datos de procesadores y demás, tendrías que hacer un resumen para ignorantes :D

www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Pi1541 y Tapuino en 1 solo dispositivo
« Respuesta #14 en: Noviembre 12, 2021, 01:29:53 »
Así, resumido, sería algo del tipo:
Quiero incluir soporte de cartucho, lo que requiere muchos pines.
Un cacharro con tantos pines como necesita el cartucho, no es fácil de encontrar (en formato "plaquita"ya hecha, y barata...Si quieres diseñar tú la placa, soldarlo, etc...si..pero por ahora eso sí que es un lío para mí..).
El que encontré, es de la misma familia que el que usa kung fu flash...Y parece que es como 5 veces más rápido (en total),  sólo costando unos 16 euros. Asi que el código debería ser fácil de portar, y va sobrado de velocidad.

Los numeritos los pongo como referencia, porque con tanta placa, parece que son todas iguales...
- un arduino uno tiene "7" de velocidad.
- un STM32H750VB tiene "2424" (346 veces más rápido)

Por lo que he visto, emular la 1541 con el código de la pi1541, requiere una velocidad de unos "2500".
Y emular el cartucho, parece que requiere una velocidad de "470", más o menos.