Imagen

Emulación bajo ESP32

Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Emulación bajo ESP32

Mensaje por ackerman »

Ordenación para disponer de una hemeroteca:
  • Objetivo: Portar el mayor número de emuladores a la placa TTGO VGA32 con ESP32 (debe funcionar si o si en dicha placa) con salida VGA. El nivel de emulación no tiene que ser precisa, tan sólo conseguir emular algo, con un precio muy bajo de la placa. Además se consigue quitar el mono de cuando se arrancaban los microordenadores de 8 bits, que eran inmediatos al darles al interruptor.
  • Licencias: Evitar todas las licencias extrañas, que no son ni libres ni similares.
  • Comunidad: Lograr una unidad en donde cualquiera pueda acceder a la información y desarrollar fácilmente sin trabas ni perder el tiempo. Tanto el usuario final como el desarrollador sólo tendría que acceder aquí (recopilación de información).
  • Problemas: Se requiere teclado adaptado de usb a PS/2. Los ratones PS/2 originales dan problemas al leer coordenadas. Los teclados AT convertidos a PS/2 también dan problemas de mapeo (igual que en un PC).
    Se dispone de 520 KB de RAM, pero al ser compartida con todos los módulos, se dispone sólo de 300 KB y de manera especial.
    La placa oficialmente no dispone de psram.Determinados emuladores requieren de PSRAM.
 ! Mensaje de: ackerman
Información importante conseguida por el usuario firepower, con los esquemas de la placa v1.4, confirmando la presencia de un chip PSRAM64 externo, lo que nos da 8 MB de PSRAM. También dispone de doble núcleo.
Tal y como comenta firepower hay que fijarse en que la placa tenga 8 pines para soldar al lado del mini usb, así como el conector de la tarjeta SD.
http://www.retrowiki.es/viewtopic.php?f=86&t=200036016&p=200128317#p200128317
https://github.com/LilyGO/TTGO-Micro32-V2.0/blob/master/Datasheet/micro32%202020.3.4(1).pdf
Lista de tiendas que parece que tienen los chips con PSRAM (testeado por usuarios):
Información reportada por usuarios.
Se quedan fuera muchos emuladores (mientras no tengan licencias libres), y a fecha 2022/08/16 nos quedan: Manos a la obra
Mediante este hilo, cualquiera puede ponerse a colaborar o a recoger la información que necesita y ponerse por su cuenta a realizar cosas.
El ESP32 se creó para matar moscas a cañonazos, pensado sobre todo en la reducción de la curva de aprendizaje, es decir, para que los desarrolladores de PC pudieran usarlo fácilmente. Así, se puede acceder a una conexión WIFI con un par de instrucciones. Sin embargo, si queremos sacar todo el provecho, es decir, hilar fino, entonces se hace más cuesta arriba.
Cosas a destacar para desarrollar para esta placa:
  • Memoria: Los 520 KB son compartidos con todos los módulos y el Sistema Operativo Free RTOS. Si nos quedamos sin memoria, el ESP32 provoca una excepción y se resetea. Si se usa un malloc, y no hay memoria, automáticamente se reinicia. El mejor truco es hacer como cuando se desarrollaban los juegos en los 90's, es decir, se reserva toda la memoria al principio y luego la vamos usando. Existe fragmentación de memoria, así que no se puede coger toda la memoria que queramos, ya que por límite de tamaño (fragmentos), aunque se disponga de espacio libre, no se dispone de dicho tamaño. Por tanto, lo ideal, es usar fragmentos reducidos (no más de 16 KB). Si no se dispone de un fragmento libre, resetea (watchdog). Podemos quitar módulos (WIFI, serie, bluetooth), y cosas innecesarias para ahorrar memoria.
    Se dispone de memoria IRAM, es decir, memoria de código. Aunque el fabricante habla de 180 KB, suele ser de como mucho 96 KB y entra dentro de los 520 KB compartidos. Este tipo de RAM sería para variables locales y arrays de código. Si nos quedamos sin IRAM normalmente nos avisa el compilador, pero sino, se resetea el ESP32. Es la más rápida, ya que es cacheada.
  • Velocidad memoria: Esto es más viejo que el respirar, y ocurre en la mayoría de microcontroladores, pero paso a ordenar de más rápida a menos, la velocidad de las diferentes tipos de memoria en dicho microcontrolador:
    1. IRAM: 96 KB cacheados dentro de los 520 KB de SRAM.
    2. RAM: El resto de SRAM hasta 520 KB que no sean IRAM.
    3. PSRAM: módulo de RAM externa. Se puede añadir, pero de base la placa viene sin él.
    4. FLASH: 4 MB alineados a 32 bits (4 bytes), es decir, que si metemos 1 byte, si no compactamos, perderemos 3 bytes. Para lecturas de 1 sólo byte, deberemos desempaquetar (más lento). Los datos (arrays) se colocan aquí con la orden PROGMEM. El código siempre va en FLASH.
    5. EEPROM: 512 bytes
    Para que nos hagamos una idea, si leemos 16 KB de un buffer (array) en FLASH, tardaremos del orden de 800 microsegundos. En cambio, si lo hacemos de RAM, en función de que lo hagamos en IRAM o no, nos moveremos entre 1 y 4 microsegundos. Así que se tiene que tener una visión global de lo que queremos hacer, para luego en que tipo de memoria queremos colocar los datos, y pensar si queremos ahorrar velocidad o memoria.
  • DMA: Existe DMA de 32 bits, pero requiere declaración de 32 bits y una forma específica de acceder, en concreto, para lograr accesos de microsegundos, conseguir cachear el acceso, con peticiones máximas de 4 KB.
  • Núcleos: Se pueden crear tareas, pero sólo hay un núcleo.
  • Módulos: El uso de módulos y librerias no sólo trae como consecuencia el consumo de RAM, sino también de FLASH, en concreto si usamos WIFI y peticiones GET HTTP, se consume 70 KB de RAM y 400 KB de FLASH. Si tenemos menos de 70 KB de RAM libre, el ESP32 se reseteará. Podemos usar librerias más pequeñas, pero no son estándar y dan problemas.
  • Portar emuladores: Hay que descargar el emulador, adaptarlo a bajos recursos como ESP32, hacer bypass para VGA32 y bypass para probar en PC y ver en diferido. Si se usa SDL o similar, es más fácil. Si la resolución no es muy alta, se puede sacar salida a modo texto.
  • Documentación Gameboy:
    https://problemkaputt.de/pandocs.htm
    https://diegojuod.home.blog/2019/08/17/introduccion-emulador-de-gb


Tema licencias
Las licencias tipo GNU datan de 1983. No debe perderse ni un microsegundo de tiempo en entender el alcance legal de otros proyectos. Por tanto, si quieren ser incluidos, es de obligado cumplimiento, el cambio de licencia.


Mensaje Original 2020/08/28:
Creo nuevo tema, para pedir ayuda y reunir conocimiento.
El año pasado me pillé la placa ttgo vga32,que contiene un microcontrolador TTGO micro32 compatible ESP32:
Imagen
Se puede programar con:
https://github.com/fdivitto/FabGL

Se dispone de un emulador de VIC20, un ALTAIR, y se puede programar nativamente.
Pero como siempre se quiere más y más y más, pues queria tener emuladores. He probado el del Spectrum:
https://github.com/rampa069/ZX-ESPectrum

Y como no he encontrado más, me puse a pillar código de otros emuladores portados a ESP32, pero no a esta placa, en concreto, que tienen salida a TV o a GLCD.
Tenemos de gameboy:
https://github.com/lualiliu/esp32-gameboy
https://github.com/Ryuzaki-MrL/Espeon
ATARI, NES y SMS:
https://github.com/rossumur/esp_8_bit
En estos he metido mano al código, quitando toda la parte de salida de video y mandos, adaptándolo a la salida VGA (bypass) y entrada de teclado. He tenido que meter mano a la temporización para que más o menos vaya.
Dejo captura de emulador de gameboy con el juego Super Mario Land funcionando:
Imagen
Imagen

Dado que mis conocimientos en desarrollo de emuladores son básicos, era interesante, saber si alguien que esté más puesto en emulación está portando más emuladores para ESP32 o si tiene en mente portar, y así me ahorro el seguir con esto, -grin , que aunque me divierte, dudo que pueda quedar algo decente.
rampa
Mensajes: 67
Registrado: 23 Ago 2019 21:24

Re: Emulación bajo ESP32

Mensaje por rampa »

Hola! hace un par de años, Jorge (queru) y yo escribimos un emulador para spectrum que puedes hacerlo correr en esa misma placa

https://github.com/rampa069/ZX-ESPectrum

echale un vistazo al branch 128k

https://github.com/rampa069/ZX-ESPectru ... hardware.h

En ese fichero se definen los pines, que creo que por defecto, en ese branch estan asignados a los que tiene esa placa (macro FABGL) el speaker y la salida serial para el emulador de AY (que corre en un atmega8 aparte) salen del conector del raton.. :-)

Ya me contaras si te sirve.
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

Muchas gracias por la información. Si, he probado vuestro emulador de spectrum, estoy profanando vuestro código para ver como furrula por dentro. -grin
¿Que dificultades habéis encontrado?¿Tenéis en mente hacer más o meteros en otros emuladores?¿Que consejos dais?
La verdad que pasa como con Arduino, hay muchas placas, y empieza a parecerse a una torre de Babel, cada uno hace diseños para una u otra placa. Pero en la diversidad está el gusto, igual que pasa con Linux, existen muchas configuraciones. Yo tengo la versión 1.2, una versión superior al de la foto. Ahora van por la 1.4 (incluye lector tarjetas SD).

Yo sigo con el emulata del Gameboy, pero como digo al principio, como mis conocimientos en emulatas son bajos, pues no se si estoy haciendo todo bien, sólo hago que tire, modifico código y tiro millas, porque por ejemplo, hay cosas que el código original no estaban implementadas y he tenido que meterlas:
Imagen
Aqui dejo un video de demostración de como va.

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

Por ahora meto salida a VGA con una especie de framebuffer en FABGL. Tiro de fabgl::VGAController::writeScreen, que es lo más parecido, porque la libreria FABGL es muy bonita, pero no es nada rápida. Seguramente, termine tirando de la libreria VGA32 a pelo, pero hasta que no tenga más cosas acabadas, no creo que me meta a ello.
Avatar de Usuario
kikems
Mensajes: 5679
Registrado: 30 May 2013 19:23

Re: Emulación bajo ESP32

Mensaje por kikems »

Me pierdo un poco, eso del ESP32 no es lo que se usa para el wifi por serial?
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

kikems escribió:Me pierdo un poco, eso del ESP32 no es lo que se usa para el wifi por serial?
Exacto, el mismo. Se desaprovecha mucho su potencial. -rofl -rofl
En realidad, ya con el hermano pequeño (ESP8266), ya se podían hacer grandes cosas.

Añadiendo un puerto para teclado, ratón, y DAC de video VGA, o bien pillando ya esta placa, se puede usar como un microordenador.
rampa
Mensajes: 67
Registrado: 23 Ago 2019 21:24

Re: Emulación bajo ESP32

Mensaje por rampa »

ackerman escribió:
kikems escribió:Me pierdo un poco, eso del ESP32 no es lo que se usa para el wifi por serial?
Exacto, el mismo. Se desaprovecha mucho su potencial. -rofl -rofl
En realidad, ya con el hermano pequeño (ESP8266), ya se podían hacer grandes cosas.

Añadiendo un puerto para teclado, ratón, y DAC de video VGA, o bien pillando ya esta placa, se puede usar como un microordenador.
con el esp8266 tengo un emulador de CPM fantastico, con terminal serial y 12 disquettes montados.... -grin
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

rampa escribió:con el esp8266 tengo un emulador de CPM fantastico, con terminal serial y 12 disquettes montados.... -grin
Suena interesante. ¿Lo tienes disponible para descargar y probar? ¿Pusiste salida de video?
¿Es este?
https://github.com/rampa069/RunCPM

La verdad que el ESP8266 es una pasada. Yo nada más que dejó programar en C, que al principio sólo dejaba en LUA, y antes de que hicieran placas de desarrollo, pillé varios para probar.
Avatar de Usuario
zx81
Mensajes: 558
Registrado: 23 Feb 2013 21:31

Re: Emulación bajo ESP32

Mensaje por zx81 »

Llevo dos días intentando encontrar al desarrollador que ha escrito un montón de emuladores para los esp32 y las placas Teensy, pero no hay manera de que dé con él, a ver si alguien tiene más suerte que yo, pero seguiré intentándolo.

P.D.: Podría ser este: https://github.com/Jean-MarcHarvengt
Cuando utilizo una palabra, esa palabra significa, exactamente, lo que yo quiero que signifique. Ni más, ni menos.
Humpty Dumpty

Empieza a jugar sin tener que compilar: Emulador JSpeccy
ZX Spectrum bare-metal para Raspberry PI ZXBaremulator
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

zx81 escribió:P.D.: Podría ser este: https://github.com/Jean-MarcHarvengt
Este repositorio que pasas, como dirían los millenials, es pura crema. -thumbup
Impresionante.

El Multi CompUter Machine Emulator tiene muy buena pinta. Parece que habría que readaptar código y sobre todo bypass a video VGA.
¿Como lo veis, os entran ganas de meteros en faena? -grin
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

Imagen

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

He realizado varias modificaciones para aumentar la velocidad y para reducir consumo de RAM (me quedan 160 KB libres).
La carga de ROMS por WIFI, lo abandono, porque para que funcione, tan sólo cargaría roms de 16 KB's. Es una pena, porque lo había dejado funcionando, pero es mejor disponer de esa RAM y memoria FLASH para meter más ROMS y de más tamaño.
He creado un modo rápido de color rojo para máxima velocidad.
Ahora ya es jugable, pero si por ejemplo alguien como spinecard lo usara, se arrancaría los ojos. -grin
Tengo código para fabgl y para VGA32 de ESPlib, pero por ahora se va a quedar fabgl sin interface (consumo de RAM).
Se permite reiniciar el emulador, así como el ESP32 (tarda sólo 2 segundos en arrancar).
Estoy realizando unas herramientas para facilitar la labor de pasar las ROMS a código empaquetado, para que cualquier usuario pueda meter las ROMS que quiera, le da a compilar y envia sin tocar nada (modo easy).
Cuando sea más estable y bonito el código, lo subiré a un repositorio.
Avatar de Usuario
masteries
Mensajes: 2079
Registrado: 30 May 2018 11:33
Ubicación: Espaciando

Re: Emulación bajo ESP32

Mensaje por masteries »

ackerman escribió:Ordenación para disponer de una hemeroteca:
  • Objetivo: Portar el mayor número de emuladores a la placa TTGO VGA32 con ESP32 (debe funcionar si o si en dicha placa) con salida VGA. El nivel de emulación no tiene que ser precisa, tan sólo conseguir emular algo, con un precio muy bajo de la placa. Además se consigue quitar el mono de cuando se arrancaban los microordenadores de 8 bits, que eran inmediatos al darles al interruptor.
  • Licencias: Evitar todas las licencias extrañas, que no son ni libres ni similares.
  • Comunidad: Lograr una unidad en donde cualquiera pueda acceder a la información y desarrollar fácilmente sin trabas ni perder el tiempo.
  • Problemas: Se requiere teclado adaptado a usb. Los ratones PS/2 originales dan problemas al leer coordenadas. Los teclados AT convertidos a PS/2 también dan problemas de mapeo (igual que en un PC).
    Se dispone de 512 KB de RAM, pero al ser compartida con todos los módulos, se dispone sólo de 300 KB y de manera especial.

Se quedan fuera muchos emuladores (mientras no tengan licencias libres), y a fecha 2020/09/02 nos quedan:
  • Funcionando:
  • En Proceso de port:
    • Gameboy clásica: Sin sonido. Video y teclado OK. Es más o menos jugable, no es 50 fps, pero da 20 fps. Permite desde un interface resetear, acelerar y modos de video rápidos. Abandono la carga de ROMS por WIFI, dado que sólo me deja de 16 KB, al ser inestable por memoria libre. Las ROMS se cargan desde Flash.
  • No funcionan (Hay que portar):


Mensaje Original 2020/08/28:
Creo nuevo tema, para pedir ayuda y reunir conocimiento.
El año pasado me pillé la placa ttgo vga32,que contiene un microcontrolador TTGO micro32 compatible ESP32:
Imagen
Se puede programar con:
https://github.com/fdivitto/FabGL

Se dispone de un emulador de VIC20, un ALTAIR, y se puede programar nativamente.
Pero como siempre se quiere más y más y más, pues queria tener emuladores. He probado el del Spectrum:
https://github.com/rampa069/ZX-ESPectrum

Y como no he encontrado más, me puse a pillar código de otros emuladores portados a ESP32, pero no a esta placa, en concreto, que tienen salida a TV o a GLCD.
Tenemos de gameboy:
https://github.com/lualiliu/esp32-gameboy
https://github.com/Ryuzaki-MrL/Espeon
ATARI, NES y SMS:
https://github.com/rossumur/esp_8_bit
En estos he metido mano al código, quitando toda la parte de salida de video y mandos, adaptándolo a la salida VGA (bypass) y entrada de teclado. He tenido que meter mano a la temporización para que más o menos vaya.
Dejo captura de emulador de gameboy con el juego Super Mario Land funcionando:
Imagen
Imagen

Dado que mis conocimientos en desarrollo de emuladores son básicos, era interesante, saber si alguien que esté más puesto en emulación está portando más emuladores para ESP32 o si tiene en mente portar, y así me ahorro el seguir con esto, -grin , que aunque me divierte, dudo que pueda quedar algo decente.

Uffff... este micro con entrada de teclado y ratón y salida VGA, e interfaz Wifi es un sueño hecho realidad.
Esto permite implementar interfaces de usuario en sistemas de control crítico para sectores donde una Raspberry no está permitida o sería una locura (nadie pondría una Raspi para controlar dispositivos que pueden dañar a una persona, imagina que el Linux se cuelga, o no responde en Tiempo Real a unos sensores...).

Y para montarte un ordenador o una consola, pues con la CPU de 32 bits a 160 o 240 MHz, más los 4 MB de ROM y los 520 KB de RAM; pues te montas una especie de Commodore Amiga / Atari STE en un momentín, pero a color de 8 bits si te parece, o con soporte para 16 paletas de 16 colores y cosas así.
La maestría interior...

Vendo trapdoor 512KB A500: viewtopic.php?f=71&t=200034052
De 1MB A500+: viewtopic.php?f=71&t=200034115

Metal Slug Atari STE: www.youtube.com/watch?v=FMrdjrrtxWo
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

masteries escribió:Uffff... este micro con entrada de teclado y ratón y salida VGA, e interfaz Wifi es un sueño hecho realidad.
Eres de los mios. A mi me pasó igual, nada más que vi la placa, me la pillé.
masteries escribió:nadie pondría una Raspi para controlar dispositivos que pueden dañar a una persona
Yo siempre he opinado y opino lo mismo que tu. Sin embargo, a lo largo de la vida y donde he currado, no sólo se han usado equipos raros para control de automatismos, sino, incluso PC's conectados a profibus. Hasta había un sistema de mensajería basado en inserciones en Base de Datos. -shock -shock Está claro, que donde manda patrón no manda marinero, y si hay montado un sistema absurdo hasta en COBOL, pues, toca apechugar y tirar millas.
masteries escribió:más los 4 MB de ROM y los 520 KB de RAM; pues te montas una especie de Commodore Amiga / Atari STE en un momentín
Molaría lo de Amiga y Atari, pero puede que sea algo complicado, al menos con respuesta en tiempo medianamente real, pero es todo ponerse. Los 520 KB es un poco bombo y platillo del fabricante. No se puede usar los 520 KB, es como querer usar todo la memoria RAM del PC con el Sistema Operativo funcionando. Es más bien, 300 KB fijo, y si queremos hasta 360 KB desactivando módulos. Tenemos que añadir también la fragmentación de memoria libre.
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

Imagen
He cambiado la forma de volcar a pantalla y he mejorado la velocidad. Ya permito cargar ROMS de más de 64 KB. Aún queda mucho para mejorar la velocidad, pero se puede ver las mejoras:

https://www.youtube.com/watch?v=q_rIno3ulHM&ab_channel=ackerman

He probado con:
  • BATMAN (128 KB)
  • Lion King (512 KB)
  • Contra (128 KB)
  • Bomberman (256 KB)
  • Donkey Kong (512 KB)
  • Hoshi Kirby (256 KB)
  • Metroid (256 KB)
  • Mortal Kombat 3 (512 KB)
El Mortal, Donkey Kong y Metroid no van muy bien.
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

Me he calentado -grin , y como tira bastante bien la parte gráfica, aunque el original no tenía implementado el sonido para la gameboy, me he puesto a programarlo. Estoy haciendo un motor de sonido dirty, por ahora sólo tengo 2 canales, me faltan los otros 2, pero para un apaño va a servir.

Desde aquí animo a todo el mundo, que se meta a esta plataforma, que es muy divertido, y fijo que pueden salir cosas muy interesantes.

Imagen
También tira la ROM homebrew de 2MB del Super Mario 3.
http://gameboyworld.weebly.com/gameboy-game-reviews/super-mario-special-3-gbc-bootleg
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

Imagen

https://www.youtube.com/watch?v=vRp17eyegUg&ab_channel=ackerman

No es lo definitivo, pero ya está, la gameboy del ESP32 ya no está muda. Como dije, es una chapucilla rápida de andar por casa, sólo 3 canales de los 4 posibles. No es el modo definitivo, porque en el PC estoy haciendo varios alternativos diferentes al ESP32.

A ver como dejo el código elegante, para poder subir a github (no paro de rehacer cosas para muchas veces, dejarlo como estaba), y dejarlo con alguna rom homebrew sin licencia problemática.
He dejado la opción de compilar con FABGL o bien con VGA32 y libreria de teclado. En velocidad, van igual de rápidas, pero se ahorra un poco de memoria RAM y FLASH si no se usa FABGL. Aunque para emular sigue siendo lento.
Intentaré cerrarlo rápido aunque no quede estable, para asi pasar a ATARI (aunque me da mucho asquito), NES y megadrive.
Avatar de Usuario
ron
Mensajes: 22354
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta

Re: Emulación bajo ESP32

Mensaje por ron »

Gracias Jaime por documentar todo esto.
Responder

Volver a “ESP32 TTGO VGA32”