Emulación bajo ESP32

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 03 Oct 2021 18:46

Último mensaje de la página anterior:

Ya he terminado una versión rápida (test) de la primera consola de cartuchos de la historia (Fairchild Channel F)

pacman.gif
pacman.gif (1.74 KiB) Visto 4524 veces


Lo dejo en el repositorio:
https://github.com/rpsubc8/ESP32TinyFairChild

He decidido subir esta, antes que el fake86 y demás, para que se fuera viendo por donde se dirige el proyecto, que en este caso, dejo de usar las librerías de bitluni completa, y fabgl, para usar una versión mínima reducida en C (basada en la de Ricardo Massaro), ahorrando 10 KB de RAM y 20 KB de Flash, en función de las opciones usadas.

El sonido es dirty, pero ya no se necesita el DAC del pin 25 y 26. A partir de ahora, se puede usar cualquier pin del ESP32 para audio. Además sólo uso un core, así que sirve cualquier placa ESP32 del mundo mundial.
Aunque para la Fairchild vamos sobrados, todas estas mejoras, sirven para lo que está a punto de llegar.

A lo largo de la semana iré subiendo más modificaciones y documentación.

Avatar de Usuario
dcrespo3d
Mensajes: 249
Registrado: 04 Nov 2020 08:51
Agradecido : 248 veces
Agradecimiento recibido: 319 veces

Re: Emulación bajo ESP32

Mensajepor dcrespo3d » 16 Oct 2021 22:36

Ackerman, ya se que estas cosas las has hecho hace meses, pero uno las mira cuando las mira... he desempolvado mis TTGo y cargado algunos de tus repos.

He estado probando tu emulador de Amstrad para ESP32 y me encanta. Le he copiado algunos discos y van de maravilla. Eso sí, a 320x200 borderless que si no, va un poco lento.

También he probado el emulador de Fairchild, curiosa máquina, creo que no la había probado ni emulada. Y también el C64 (extraraw) -grin

En fin, que enhorabuena por tu trabajo, con un poco de retraso. Al final yo me he liado con las FPGA y he abandonado un poco al pobre ESP32.

-drinks
DavidPrograma en YouTube, GitHub

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 17 Oct 2021 11:00

dcrespo3d escribió:También he probado el emulador de Fairchild, curiosa máquina, creo que no la había probado ni emulada.

Yo viví la ATARI vcs 2600 (fundimos los mandos) y la magnavision odyssey 2, que aqui se vendió como VIDEOPAC G7000. La Fairchild la conocía de documentales, y un amigo me propuso que sería buena idea revivirla, por su rareza de pseudo CPU, así que salió este engendro.
Hay muy poca info y emulatas:
https://channelf.se/veswiki/index.php?title=Main_Page

dcrespo3d escribió:En fin, que enhorabuena por tu trabajo, con un poco de retraso. Al final yo me he liado con las FPGA y he abandonado un poco al pobre ESP32.

Muchas gracias -drinks -drinks . Es normal, el tiempo es limitado, y no hay vida para todo. Al final, va uno conmutando las tareas a ratos.

Ahora que retomas, puedes aprovechar el uso de DMA en el volcado a video. Pasas entre un x3 a x10. Es decir, que si una rutina de volcado tarda 3 milis, en el acto pasa a 1 mili.
Se puede ver fácilmente en el ESP32TinyFairChild en video.cpp en la linea 176:

Código: Seleccionar todo

a32= (gb_color_vga[a2]) | (gb_color_vga[a3]<<8) | (gb_color_vga[a0]<<16) | (gb_color_vga[a1]<<24);
gb_buffer_vga32[(row+gb_add_offset_y)][(col+gb_add_offset_x)]= a32;

Se pasa el alineado:

Código: Seleccionar todo

32 bits -- Byte 3 2 1 0
Pasa a ser:
32 bits -- Byte 1 0 3 2


Con esto se ahorra el uso del XOR. En las primeras versiones del emulata de gameboy que usaba fabgl, tenía el uso de DMA, pero como luego quité fabgl y dejé BITLUNI, lo dejé para más adelante.

Cada scanline es un heap_caps_malloc de MALLOC_CAP_DMA, es decir, que garantiza que está alineado en 32 bits para usar el módulo de DMA. Si se hace la conversión al vuelo, el compilador ya suele usar un registro de CPU (x3), pero si por ejemplo, usamos 4 pixels del mismo color o ya preparados, no hay que convertir, sino que se asigna directo, logrando máxima velocidad de DMA (x10). El incremento, no es por usar 32 bits, sino DMA.
Además, se puede pasar al siguiente nivel, que es usar memcpy asíncrono esp_async_memcpy, usando un array de bytes para un scanline, que esto ya es pa ponese tooooo caxoooondo. -grin -grin -grin

Ahora ya se puede usar solo vga_6bit.cpp y vga_6bit.h en C, sin falta de ninguna librería ESP32. Es la librería de Ricardo Massaro de C++ en C, que al final es la reducida de BITLUNI. Se ahorra RAM, CPU y Flash. Sólo es el acceso al framebuffer.

Se puede usar también más RAM, usando la SRAM del RTC. No es RAM propiamente dicha, sino que al igual que se pierde 64 KB de cache de SRAM0 para el acceso a Flash, en el RTC, se usa hasta 16 KB de SRAM0, en concreto 8 KB de Fast RAM para un core (despierto) y 8 KB para el chip ULP SLOW (dormido). Antigüamente, sólo dejaba usar la Fast, pero ya se puede usar todo en conjunto, eso si, cada ESP32 deja más o menos RAM, algunos sólo deja acceder a 4 KB de RTC RAM.

Código: Seleccionar todo

 RTC_DATA_ATTR unsigned char datoRTCram = 0;


Otro pequeño problema de usar la RAM del RTC, es que si se usan módulos como el WIFI o el bluetooth, no se puede usar.

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 18 Oct 2021 20:29

Esto se yo que le va a gustar a @minter.
https://www.youtube.com/watch?v=GzbG932c71Q&ab_channel=ackerman
Ya tengo una versión de pruebas del fake86:
https://github.com/rpsubc8/ESP32TinyFake86

bluedarky
Mensajes: 65
Registrado: 30 Dic 2019 13:24
Agradecido : 7 veces
Agradecimiento recibido: 6 veces

Re: Emulación bajo ESP32

Mensajepor bluedarky » 20 Oct 2021 12:19

Que maravilla

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 30 Oct 2021 19:38

Otro más que he terminado para la TTGO VGA32 v1.x, el zx81:
previewManicMiner.gif
previewManicMiner.gif (1.98 KiB) Visto 2398 veces

https://github.com/rpsubc8/ESP32TinyMCUMEesp81

He realizado un bypass VGA, quitado y adaptado un par de cosas para la TTGO VGA32. He partido del MCUME (Multi CompUter Machine Emulator) de Jean MarcHarvengt.
Es una versión de pruebas, y me faltan varias cosas, pero por ahora sirve para tener la plantilla.
Soporta los modos hi-res.
previewMetropolis.gif
previewMetropolis.gif (6.24 KiB) Visto 2390 veces

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 31 Oct 2021 11:12

Video de demostración, para quien no quiera probarlo en placa.
https://www.youtube.com/watch?v=nFVNEgNH5RE&ab_channel=ackerman

zxpope
Mensajes: 324
Registrado: 02 Ene 2018 02:25
Agradecido : 125 veces
Agradecimiento recibido: 155 veces

Re: Emulación bajo ESP32

Mensajepor zxpope » 10 Nov 2021 12:38

hola ackman

acabo de ver este proyecto y es muy parecido a tu trabajo.
me ha gustado mucho la forma de ordenar los diferentes cores.
si ni tienes algo parecido, parece interesante hacerlo, o incluso, integrarlo en su arbol

no me queda claro si todos los cores se compilan en un unico binario y hay un menu de eleccion
o la placa esta condenada a un solo emulador a la vez

https://github.com/Jean-MarcHarvengt/MC ... CUME_esp32

saludos

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 11 Nov 2021 17:56

zxpope escribió:acabo de ver este proyecto y es muy parecido a tu trabajo.
me ha gustado mucho la forma de ordenar los diferentes cores.
si ni tienes algo parecido, parece interesante hacerlo, o incluso, integrarlo en su arbol

Buenas, ¿qué tal llevas el proyecto del zx81?

El ESP32TinyMCUMEesp81 que he publicado parte del MCUME, pero eliminando todo lo que no se necesita y haciendo un bypass a la VGA. Aún quedan muchas cosas por modificar, pero como cada frame se ejecuta en 18 ms, con esto, por ahora ya vale para divertirse.

Lo de integrarlo en su árbol, es complejo, porque el proyecto del MCUME va por la línea del uso de un LCD TFT ili9341, con sus ventajas e inconvenientes, y casi todos sus emuladores, van por la línea del uso de la PSRAM, al menos en el ESP32. Para el caso de la RASPBERY PI PICO, usa LCD TFT ili9341 y VGA.
Por el contrario, yo voy por el camino de usar un ESP32 básico y sólo VGA, un DAC de 3 bits y 6 bits, así como no usar nada de PSRAM, y sólo usar un sólo core. Esto nos permite, que aunque hayan subido los precios de algunas placas ESP32 ya completas, lo que es la placa básica o sólo el chip con 520 KB, o con un sólo núcleo, sigue siendo excesivamente barata. Además, se puede montar todo en una protoboard sin falta de saber soldar, y no se necesita ni teclado PS/2, ya que con una norma ATARI DB9 o un charlieplexing con diodos y 4 entradas, ya tenemos un mando.

Si miramos por encima el código del MCUME, por ejemplo, el código del 8086, que es el del Fake86:

https://github.com/Jean-MarcHarvengt/MCUME/tree/master/MCUME_esp32/esp8086/main

Vemos como si se usa SRAM, sólo deja emular 32768 bytes de RAM, si miramos el emu.h línea 6 de NATIVE_RAM. Es decir, que sólo podriamos lanzar el BASIC de ROM y algún COM de 32 KB, y casi no arrancaría ni el MSDOS 2.0. Por el contrario, si usamos PSRAM, podemos emular los 640 KB.

Si miramos el que yo he portado, se puede ver, como en el caso de pruebas emulo 160 KB de SRAM sin problema, pudiendo llegar a 256 KB con determinadas opciones que iré publicando, e incluso puedo cargar juegos de más RAM, con la opción del mapeador de RAM, cuando lo publique. Está en código, pero la herramienta para hacer el mapeado y el snapshot, tengo que publicarla, que sería una especie de emulador en PC. Y todo con sólo SRAM y un sólo núcleo.

Otra cosa curiosa de los diferentes ports de fake86, es el retrazo horizontal. Casi todos los ports, incluido el de Dreamcast, han realizado un copy paste, sin modificar ni una sola línea del archivo timing.c, que en realidad tiene mucha importancia, dado que muchos juegos e incluso software lo requiere. Como no hay potencia suficiente para procesar cada scanline exacta, se tiene que hacer algún truco. El MCUME, por ejemplo por cada lectura del puerto 3DA ya lo cambia, que es buen truco. Otros ports lo ponen a calzador, y funciona, porque no se procesa cada scanline exacto, sino un par de ellos después, pero aun así han dejado el código para comprobar los microsegundos, cuando no se puede procesar, e incluso siguen usando la división, que consume ciclos. Yo dejé una solución chapucera, de un contador.


Ya tengo una librería básica de ratón PS/2, que es la de ARDUINO corregida los tiempos de inicialización para que funcione. Parte de esta:

https://github.com/jazzycamel/PS2Mouse

Y con eso, nos ahorramos toda la parte de fabgl para el mouse, ahorrando RAM, flash y demás. Con esto, y toda la Tiny Bitluni, ya se puede tener el emulador de AMSTRAD CPC en modo 400x300 con 128 KB, framebuffer, sonido, ratón y máxima velocidad. En breves, lo publicaré.

También se puede aprovechar, si se mira el código de dcrespo3d (que está muy bien), que dejó sólo la parte de sonido de fabgl sin tener que usar toda la librería entera:

https://github.com/dcrespo3d/ZX-ESPectrum-Wiimote/tree/master/lib/FabGL/src

Para el caso del ratón, no se puede separar tan fácil, porque hay dependencias del ratón con los modos de video. Pero con este apaño, ahora ya podemos pasar de todo.

zxpope escribió:no me queda claro si todos los cores se compilan en un unico binario y hay un menu de eleccion
o la placa esta condenada a un solo emulador a la vez

Yo de lo que miré por código lo tiene preparado para un emulador a la vez, aunque se podría usar un loader de SD para cargar cada uno.
Anoto corrección, que se me escapaba, que al final, si tiene un bootloader desde los 4 MB de Flash. Mete todos los bin (cada emulador compilado) en modo pipe, y selecciona selected boot partition:

https://github.com/Jean-MarcHarvengt/MCUME/tree/master/MCUME_esp32/espboot/main

El que también está pensado para tener todos a la vez es el RetroESP32:

https://github.com/retro-esp32/RetroESP32

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: Emulación bajo ESP32

Mensajepor minter » 11 Nov 2021 20:10

ackerman escribió:Esto se yo que le va a gustar a @minter.


Ostia!!! Lo acabo de ver ahora!!! Como mola!!!! -507 -507 -507

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 13 Nov 2021 11:46

Sabía yo que el paku paku, despertaría tu corazoncito. -grin -grin

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 14 Nov 2021 16:08

Con las versiones de Bitluni y fabgl que tenía para ratón, sonido y demás para el emulata del CPC, se estaba muy justo en RAM, si se emulaba los 128 KB. Había que jugar con múltiples parámetros y configuraciones, sobre todo con los modos de video 3BitI y 6BitI en lugar de los normales, que eran liosos de explicar.

Ahora, con la librería tiny de ratón (jazzycamel), de sonido (fabgl mod dcrespo3d) y de video (Ricardo Massaro), ya se tiene RAM de sobra, y nos podemos olvidar de todo:

https://github.com/rpsubc8/ESP32TinyCPC

Ya se puede usar el modo 400x300, CPC6128 128 KB de RAM, sonido y ratón al mismo tiempo.
Tanto desde el Arduino IDE como el VStudio PlatforIO, ya no se necesita ninguna librería para compilar, está todo incluido en el proyecto.
Por defecto, esta preparado para compilar modo CPC464, sin sonido y sin ratón.
Si queremos todo, debemos activar en el gbConfig:

Código: Seleccionar todo

 use_lib_128k
 use_lib_amx_mouse
 use_lib_sound_ay8912


El ratón, sucede lo mismo que con el teclado, al dejar de usar fabgl, es decir, que ganamos en optimizaciones, pero perdemos compatibilidad, dado que la librería fabgl soporta una ingente cantidad de ratones, así como teclados y mapeos. Pero por ahora, para leer los 2 botones, así como el cambio delta del movimiento, sirve de sobra, y me ha funcionado en múltiples ratones, incluidos gamers. No obstante, habrá que hacer más pruebas, y ajustar tiempos y protocolos.

Avatar de Usuario
josemrm
Mensajes: 476
Registrado: 09 Feb 2021 01:05
Ubicación: cerca de Bilbao
Agradecido : 3952 veces
Agradecimiento recibido: 154 veces

Re: Emulación bajo ESP32

Mensajepor josemrm » 14 Nov 2021 21:50

ackerman escribió:Ya he terminado una versión rápida (test) de la primera consola de cartuchos de la historia (Fairchild Channel F)

pacman.gif

Lo dejo en el repositorio:
https://github.com/rpsubc8/ESP32TinyFairChild

He decidido subir esta, antes que el fake86 y demás, para que se fuera viendo por donde se dirige el proyecto, que en este caso, dejo de usar las librerías de bitluni completa, y fabgl, para usar una versión mínima reducida en C (basada en la de Ricardo Massaro), ahorrando 10 KB de RAM y 20 KB de Flash, en función de las opciones usadas.

El sonido es dirty, pero ya no se necesita el DAC del pin 25 y 26. A partir de ahora, se puede usar cualquier pin del ESP32 para audio. Además sólo uso un core, así que sirve cualquier placa ESP32 del mundo mundial.
Aunque para la Fairchild vamos sobrados, todas estas mejoras, sirven para lo que está a punto de llegar.

A lo largo de la semana iré subiendo más modificaciones y documentación.


ya he visto que minter ha levantado el pulgar para arriba con esta noticia!!! el primer paku paku de la historia despues del arcade? no creo que haya salido anteriormente consola solo con pacman antes que este.

minter como te lo montas, vaya aparato que tienes ................. de musica debajo del monitor para el c64, con eso se escuchara de cine el paku paku
© josemrm -m3s3x
-coam1 -j4tar1 -cocbm1 -4mstr4d -sp3zy -b3b3c3 -codrg1 -0r1c IBM PowerMac
bPlan Pegy1y2 MorphOS,Amithlon PiStorm500/1200 UnAmigaReloaded Mister Atlas DE10-lite
Rpi,Odroid BeOS QNX Plan9 CP/M, ZXUnGo+ by Spark2k06

Avatar de Usuario
josemrm
Mensajes: 476
Registrado: 09 Feb 2021 01:05
Ubicación: cerca de Bilbao
Agradecido : 3952 veces
Agradecimiento recibido: 154 veces

Re: Emulación bajo ESP32

Mensajepor josemrm » 14 Nov 2021 22:02

me parece muy grande lo que esta haciendo ackerman y cia, muchas gracias por darle un poco de vida al ttgo vga32 1.x

@ackerman: supongo que ya habras visto este github:
https://github.com/rossumur/esp_8_bit
con emuladores de -j4tar1 8 bit computers, NES and SMS game consoles para esp32!!!



lo que me ha flipado es lo que hace la gente, este mismo autor tiene un espflix (un streming como netflix solo con un esp32 con wifi y ir), con poco contenido eso si pero muy bueno:
https://github.com/rossumur/espflix
Imagen



y un: software speech synthesizer for the Atari 2600. Make your 2600 talk! Sing! Say rude words!
https://github.com/rossumur/SAM2600
Imagen


-drinks
© josemrm -m3s3x
-coam1 -j4tar1 -cocbm1 -4mstr4d -sp3zy -b3b3c3 -codrg1 -0r1c IBM PowerMac
bPlan Pegy1y2 MorphOS,Amithlon PiStorm500/1200 UnAmigaReloaded Mister Atlas DE10-lite
Rpi,Odroid BeOS QNX Plan9 CP/M, ZXUnGo+ by Spark2k06

Avatar de Usuario
ackerman
Mensajes: 482
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 224 veces
Agradecimiento recibido: 569 veces
Contactar:

Re: Emulación bajo ESP32

Mensajepor ackerman » 16 Nov 2021 18:52

Muchas gracias. -drinks -drinks

josemrm escribió:lo que me ha flipado es lo que hace la gente, este mismo autor tiene un espflix (un streming como netflix solo con un esp32 con wifi y ir), con poco contenido eso si pero muy bueno:
https://github.com/rossumur/espflix

rossum es un crack. Ya con el arduinocade me dejó realmente impresionado.

Avatar de Usuario
josemrm
Mensajes: 476
Registrado: 09 Feb 2021 01:05
Ubicación: cerca de Bilbao
Agradecido : 3952 veces
Agradecimiento recibido: 154 veces

Re: Emulación bajo ESP32

Mensajepor josemrm » 16 Nov 2021 20:47

ackerman escribió:Muchas gracias. -drinks -drinks

josemrm escribió:lo que me ha flipado es lo que hace la gente, este mismo autor tiene un espflix (un streming como netflix solo con un esp32 con wifi y ir), con poco contenido eso si pero muy bueno:
https://github.com/rossumur/espflix

rossum es un crack. Ya con el arduinocade me dejó realmente impresionado.


lo malo del proyecto arduinocade es que tienes que modificar el arduino (soldar un cristal, etc). mucho jaleo para muchos. un crack
© josemrm -m3s3x
-coam1 -j4tar1 -cocbm1 -4mstr4d -sp3zy -b3b3c3 -codrg1 -0r1c IBM PowerMac
bPlan Pegy1y2 MorphOS,Amithlon PiStorm500/1200 UnAmigaReloaded Mister Atlas DE10-lite
Rpi,Odroid BeOS QNX Plan9 CP/M, ZXUnGo+ by Spark2k06

Avatar de Usuario
josemrm
Mensajes: 476
Registrado: 09 Feb 2021 01:05
Ubicación: cerca de Bilbao
Agradecido : 3952 veces
Agradecimiento recibido: 154 veces

Re: Emulación bajo ESP32

Mensajepor josemrm » 16 Nov 2021 20:49

he intentado hacer streaming para ver el contenido del espflix pero sin el esp32 pero imposible

creo que dentro del codigo de github hay una parte web, a ver si la pongo en un servidor html o como cliente y se ve algo
© josemrm -m3s3x
-coam1 -j4tar1 -cocbm1 -4mstr4d -sp3zy -b3b3c3 -codrg1 -0r1c IBM PowerMac
bPlan Pegy1y2 MorphOS,Amithlon PiStorm500/1200 UnAmigaReloaded Mister Atlas DE10-lite
Rpi,Odroid BeOS QNX Plan9 CP/M, ZXUnGo+ by Spark2k06


Volver a “ESP32 TTGO VGA32”

¿Quién está conectado?

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