Emulación bajo ESP32

Avatar de Usuario
Womble
Mensajes: 75
Registrado: 19 Nov 2020 18:59
Agradecido : 15 veces
Agradecimiento recibido: 77 veces

Re: Emulación bajo ESP32

Mensajepor Womble » 03 Ene 2021 12:05

Último mensaje de la página anterior:

I can confirm your code tests fine on the V1.4 boards I got from ebay just before xmas.

I have been working on changing the z80 core in my Pale Lynx emulator to use the core from CPC-Em so that all my code is freeware.

Here is the current attempt. I am unsure whether this core will work correctly with the lynx.

https://github.com/retrogubbins/PaleESP32VGA

I have managed to get the disks working (will load the JDx.LDF files) but somehow in the port from my other emulator they do not appear
to write correctly yet.

Many games do not run due to missing interrupt emulation. I cannot seem to get mode 1 interrupts working using this core.

Avatar de Usuario
Womble
Mensajes: 75
Registrado: 19 Nov 2020 18:59
Agradecido : 15 veces
Agradecimiento recibido: 77 veces

Re: Emulación bajo ESP32

Mensajepor Womble » 03 Ene 2021 14:44

Cheers zx81, I'll have a look at your core.does it do M2 correctly?

Avatar de Usuario
zx81
Mensajes: 382
Registrado: 23 Feb 2013 21:31
Agradecido : 66 veces
Agradecimiento recibido: 135 veces

Re: Emulación bajo ESP32

Mensajepor zx81 » 03 Ene 2021 15:45

Womble escribió:Cheers zx81, I'll have a look at your core.does it do M2 correctly?


Yes, as far I know.
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

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 03 Ene 2021 16:09

Womble escribió:I can confirm your code tests fine on the V1.4 boards I got from ebay just before xmas.
I have been working on changing the z80 core in my Pale Lynx emulator to use the core from CPC-Em so that all my code is freeware.Here is the current attempt. I am unsure whether this core will work correctly with the lynx.


lynxMod.jpg
Lynx
(110.43 KiB) No descargado aún


Congratulations on the job. I have tried it, and it works at first sight. You will make people who like Lynx very happy. It looks very good. -drinks

Regarding the CPC core, if you look for the accuracy, zx81 is right, it is better that you use its core, because the one I have used, does not use interruptions, and has the slowness of the znptable and znptable16 of the z80.c, for the NOP, as well as the DAATable for the DAA instruction (Decimal Adjust Accumulator) in the DAA.h. It is not optimized for ESP32, although it is used for emulation, which was what we were looking for.

The video mode for the CPCem uses 400x300, which is the intermediate between 160x200 and 640x200. In the case of the Lynx, which only supports 256x248 and 8 colors, you might be interested in using a more reduced video mode, such as 320x240, to save internal memory and increase speed, since the vga.MODE400x300.custom(256, 248) does not reduce internal memory.

I'm going to put your development in the first page of the forum thread.
http://retrowiki.es/viewtopic.php?f=86&t=200036016&p=200125074#p200125074



Spanish:
Enhorabuena por el trabajo. Lo he probado, y funciona a la primera. Vas a hacer muy felices a la gente que le gusta el Lynx. Tiene muy buena pinta. -drinks

lynxMod.jpg
Lynx
(110.43 KiB) No descargado aún


Respecto al core del CPC, si buscas la exactitud, zx81 está en lo cierto, es mejor que uses su core, porque el que he utilizado, no hace uso de interrupciones, y tiene la lentitud de la tabla znptable y znptable16 del z80.c, para los NOP, así como la DAATable para la instruccion DAA (Decimal Adjust Accumulator) en el DAA.h. No está optimizado para ESP32, aunque sirve para la emulación, que era lo que se buscaba.

El modo de video para el CPCem usa 400x300, que es el intermedio entre el 160x200 y 640x200. En el caso del Lynx, que sólo soporta 256 x 248 y 8 colores, te podía interesar usar un modo de video más reducido, como 320x240, para ahorrar memoria interna e incrementar velocidad, dado que el vga.MODE400x300.custom(256, 248) no reduce memoria interna.

Voy a meter tu desarrollo a la primera hoja del hilo.

http://retrowiki.es/viewtopic.php?f=86&t=200036016&p=200125074#p200125074

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 07 Ene 2021 14:31

Ya he subido las modificaciones del emulata de la Gameboy al repositorio:

https://github.com/rpsubc8/esp32gameboy

También he añadido un tutorial para configurarlo con el Visual Studio y PLATFORMIO con las opciones principales:

Parte 1 de 2
Imagen
https://www.youtube.com/watch?v=wcmy1qi-0kg

Parte 2 de 2
Imagen
https://www.youtube.com/watch?v=UKzAv708Grg

jltursan
Mensajes: 3411
Registrado: 20 Sep 2011 13:59
Agradecido : 331 veces
Agradecimiento recibido: 934 veces

Re: Emulación bajo ESP32

Mensajepor jltursan » 07 Ene 2021 15:02

Impresionante, lo del Lynx ya me ha dejado loco -thumbup

He estado mirando dispositivos y con toda la información que habéis dejado caer a lo largo del hilo estoy algo confundido, ¿cual sería la recomendación a la hora de buscar un TTGO?

Avatar de Usuario
zx81
Mensajes: 382
Registrado: 23 Feb 2013 21:31
Agradecido : 66 veces
Agradecimiento recibido: 135 veces

Re: Emulación bajo ESP32

Mensajepor zx81 » 07 Ene 2021 17:38

Yo creo que ahora, si compras una, ya te viene la v1.4 que es la que mola por los 4MB de psram y el lector de microSD. Pero como esto de los cheenos es una lotería....

Yo la compré en Amazon, la foto que mostraban era de la v1.1 o v1.2 y me mandaron la v1.4.
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

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 07 Ene 2021 18:18

jltursan escribió:Impresionante, lo del Lynx ya me ha dejado loco -thumbup
He estado mirando dispositivos y con toda la información que habéis dejado caer a lo largo del hilo estoy algo confundido, ¿cual sería la recomendación a la hora de buscar un TTGO?

Lo del Lynx hay que agradecérselo a Wonble y a zx81 que están pegándose con ello.

Lo de la placa TTGO, las que no tienen VGA, y que se usan mucho para LoRaWAN, las mejores son las que llevan el chip WROVER, dado que es un ESP32 con PSRAM dentro de su encapsulado, al estilo de los coprocesadores en los 486 o los Pentium, que venian dentro, frente a los 8087 y demás que venian fuera y había que pagarlos (menudo negocio). -grin -grin
Pero si nos referimos a las TTGO VGA, que es de lo que trata este hilo, entonces, a día de hoy, la mejor es la TTGO VGA32 v1.4 (clon Esp32-pico-d4), porque viene con el chip psram externo (fuera del encapsulado) de 8 MB, así como el zócalo de SD, doble core y demás, es decir, es retrocompatible. La v1.4, hicieron 2 diseños, uno con 4 MB de psram y ahora ya con 8 MB.
Yo la v1.2 la compré hace 1 año y medio, y por aquel entonces, estaban la 1.0, 1.1 y 1.2. Pedí la 1.2 y me llegó, y ahora pedí la v1.4 y también me llegó. Por varios foros comentaban que algunas v1.1 tenían sólo 2 MB de flash, en lugar de 4 MB, pero eso sí, todas venian con 0 MB de psram.
Es lo que comenta zx81, a dia de hoy, salvo que cuelen stocks caducos, existen altas posibilidades de que llegue la buena v1.4 master race full equip -grin -grin -grin Peeeeeeero, yo no pongo la mano en el fuego por nada. -grin

Por eso, siempre existe la opción de montarse uno mismo todo, que antes de Marzo, han salido auténticos chollos de ESP32 WROVER a 2.5€, e incluso algún ESP32S (un sólo core) a 1.5€. Ahora los precios han cambiado bastante, ya sabéis los motivos. :(

jltursan
Mensajes: 3411
Registrado: 20 Sep 2011 13:59
Agradecido : 331 veces
Agradecimiento recibido: 934 veces

Re: Emulación bajo ESP32

Mensajepor jltursan » 09 Ene 2021 18:54

Pues venga, me he pedido este: TTGO-controlador de VGA32-V1.4

El precio es competitivo y parece el correcto. A ver que tal :-)

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 09 Ene 2021 20:38

jltursan escribió:Pues venga, me he pedido este: TTGO-controlador de VGA32-V1.4
El precio es competitivo y parece el correcto. A ver que tal :-)


Enhorabuena, has caido en la secta -rofl -rofl
Tiene buen precio.
Ya verás como lo pasas pipa.

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 12 Ene 2021 18:37

En el emulata del CPC añadi el pragma use_lib_lookup_znptable y use_lib_lookup_znptable16 para usar o no tablas precalculadas de flags en BCD. Nos ahorramos 64 KB de flash.
El código original para x86 de PC de Tom Walker, por algunos comentarios que dejó en su código, se vé que había tenido algún problema de diseño. Como me puse a convertirlo a ESP32, corregí varios, pero aun así, hay muchos overflows en su código, que en un PC, libran, pero en ESP32 pueden dar problemas, además de los que habré metido. -grin -grin

En la gameboy añadí el pragma use_lib_tinyFont para no usar las fuentes de bitluni. Ahorramos flash, y si dejasemos solo 32 caracteres, gastariamos 256 bytes, frente a los 4608 bytes de bitluni.

Para lograr velocidades más rápidas de acceso a video, en concreto, más del doble a video, podéis mirar en la gameboy el código que dejé:

Código: Seleccionar todo

 #ifdef use_lib_vga8colors
    static unsigned char gb_paletaGrey8[4]={
     ((0x00 & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x01 & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x02 & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x03 & gbvgaMask8Colores)|gbvgaBits8Colores)
    }; //gris 8 colores     
   #else
    static unsigned char gb_paletaGrey64[4]={
     ((0x00 & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x15 & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x2A & gbvgaMask8Colores)|gbvgaBits8Colores),
     ((0x3F & gbvgaMask8Colores)|gbvgaBits8Colores)
    }; //gris 64 colores
   
   
  ptrVGA[aLine][x^2] = gb_paletaGrey64[a];  //Para 64 colores
  ptrVGA[aLine][x^2] = gb_paletaGrey8[a];   //Para 8 colores


Ahi se puede ver de una tirada ya cada color con máscara en tabla ya precalculada para cada modo de video, y a la hora de acceder como puntero de video, además de saltándonos los métodos de la clase vga, que normalmente se usa con el método:

Código: Seleccionar todo

 vga.dotFast(x,y,color);


Echando un vistazo rápido por internet, no paro de ver forks de muchos emuladores en ESP32, pero ninguno se centra en lo primero que llama la atención e importante, que es incrementar velocidad, reducir el consumo ram y espacio, no sólo para no usar psram, sino consumir poca sram y flash.
Voy podando poco a poco, la clase vga la tengo convertida a estructurada, sólo llamando a la I2S para el video, ahorrándonos consumo de ram, flash y sobre todo, ganando en velocidad.
Las librerias bitluni, así como fabgl están muy bien para algo genérico, pero lo de usar allocators en cada scanline, va a ser que no es lo mejor, junto con muchísimas más cosas que claman a los ojos, para el caso en concreto de en lo que estamos, que es, para emuladores.
Lo ideal, sería que al final, nuestro framebuffer, quedará en un único bloque para poder hacer:

Código: Seleccionar todo

 memcpy(video_destino, mem_origen, tamanio);

Y luego tener punteros a cada scanline, pero todos consecutivos, no como estan ahora, dado que tanto FREERTOS como muchos MCU el gestionador de memoria da posiciones en segmentos diferentes para proteger (no es cuestión de fragmentación). De ahí las excepciones al acceder fuera de memoria.
De está forma, tenemos la velocidad de cada scanline, pero a su vez, la del bloque, para otros menesteres futuros. Además tenemos que evitar a toda costa la reserva dinámica de ram, así que nada de clases string ni hacer malloc en caliente, es decir, en la parte loop. Así que bitluni y fabgl, no son muy recomendadas como estan ahora.

La idea, como comenté, es reducir todo a lo mínimo (funcione en máximo número de ESP32), no depender de ninguna libreria, lograr máxima velocidad, y luego ya por último, si eso, poder dar el salto a baremetal.

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 15 Ene 2021 19:48

Pues ya tengo la uzebox funcionando en la TTGO VGA32 v1.2, compatible con la 1.0, 1.1 y 1.4, sin usar psram ni demás extras.
Imagen

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

Pero, va a 1 fps, así que hay que esperar a que vaya podando toda la broza del emulata uzem.

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 21 Ene 2021 16:57

Más avances del emulata de uzebox:
La demo del mario en modo de video 3 a 4 fps:
Imagen
https://www.youtube.com/watch?v=-4y7vWGo_Ow

Y la demo Bitmap en modo de video 8.
Imagen
https://www.youtube.com/watch?v=V-BZIJgdlH8

Como le emulación del avr8 ya casi va a tope, y ya he conseguido un x5, no me ha quedado más remedio que meterme a simular el kernel, que es donde realmente se gana velocidad. Por ahora, está parte del modo de video 8. Nadie se ha puesto a simular el kernel, sólo a toquetear el emulador del avr8, de ahi, que por ejemplo el cuzebox requiera una 3ds a 800Mhz o un PC. Esta variante de simulación del kernel, podria permitir más adelante poder portar la uzebox a máquinas más limitadas, como una DS normal, pero esto llevaria mucho, pero mucho, mucho tiempo de desarrollo.

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 31 Ene 2021 16:57


ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 04 Feb 2021 12:19

Ya está funcionando el emulador de C64 en placa real, por supuesto, como suele ser habitual, sin falta de psram ni extras.
Me quedan 162 KB libres de SRAM, y aunque la velocidad es decente, queda mucho por hacer, sobre todo del core.
https://www.youtube.com/watch?v=3VmYzMsAnps&ab_channel=ackerman

jltursan
Mensajes: 3411
Registrado: 20 Sep 2011 13:59
Agradecido : 331 veces
Agradecimiento recibido: 934 veces

Re: Emulación bajo ESP32

Mensajepor jltursan » 04 Feb 2021 12:30

Como siempre, gran trabajo -thumbup

Y ya aprovecho, dado que ya tengo mi flamante TTGO-VGA32 v1.4 en mis manos y me gustaría empezar a bichear con ella, se me ocurren un par de cosas que necesitaría consultar:

1) Ese entorno de trabajo que manejas parece estar basado en el Dev-C++ y algún tipo de emulación que arrancas. El Dev-C++ es un IDE genérico de C/C++, ¿le añades algún paquete para que soporte el desarrollo bajo ESP32?, ¿como ejecutas ese software desarrollado?. Entiendo que el Arduino IDE pasa a segundo plano hasta que vayas a volcar directamente sobre la plataforma...

2) Me gustaría empezar curioseando aquel TinyBASIC que subiste. ¿Algún buen tutorial que puedas recomendar acerca de como desarrollar para esta plataforma?. Entiendo que a día de hoy todo debe girar en su mayor parte en torno a FabGL.

ackerman
Mensajes: 174
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Agradecido : 20 veces
Agradecimiento recibido: 101 veces

Re: Emulación bajo ESP32

Mensajepor ackerman » 04 Feb 2021 13:32

Muchas gracias, he tenido suerte, y hay mucha info disponible de la que partir. -drinks -drinks
Enhorabuena por la adquisión, lo vas a pasar genial. -thumbup

jltursan escribió:1) Ese entorno de trabajo que manejas parece estar basado en el Dev-C++ y algún tipo de emulación que arrancas. El Dev-C++ es un IDE genérico de C/C++, ¿le añades algún paquete para que soporte el desarrollo bajo ESP32?, ¿como ejecutas ese software desarrollado?. Entiendo que el Arduino IDE pasa a segundo plano hasta que vayas a volcar directamente sobre la plataforma...

Eso que comentas, es el santo grial que se lleva buscando toda la vida para el desarrollo multiplataforma. Lamento decir, que no existe nada. Uso el Dev-C++ (mingw32) con una versión muy muy muy vieja, porque a parte de que es super rápida y consume muy poco, canta ante cualquier código no POSIX de C y soporta un C++ muy básico. Esto es ideal, porque en el primer cribado, ya nos dice si el código del que partimos no es optimizado, porque no va a compilar. También uso SDL 1.2, en lugar de 2.0, porque muchos emuladores usan opciones avanzadas de aceleración y texturas, cosa que aquí no tenemos, y así me lo canta.
He creado un entorno en C con el Dev-cpp con las paletas de 8 y 64 colores exactas de la TTGO VGA32 con SDL, así como el sonido y le pongo un límite de RAM y temporización. De forma, que con este entorno simulado, si pasa las pruebas, es copiar y pegar en el Visual Studio del PLATFORMIO o el Arduino IDE, sabiendo que va a funcionar.
Es decir, que además del emulador en el ESP32, tengo un emulador x86 TTGO VGA32 hibrido. -rofl
Trabajar sobre ESP32, a parte de que es lento, por cada grabación, le estariamos quitando vida util, dado que tenemos límite de escrituras.
Si la plataforma a emular es muy simple, por ejemplo el CHIP8, vamos sobrados, y podemos usar todo tipo de programación ineficiente, ya que el ESP32 tiene todo tipo de librerias, como STL, vectores, pilas, colas, etc... Pero si vamos justos, entonces, mejor reducir equipaje.

jltursan escribió:2) Me gustaría empezar curioseando aquel TinyBASIC que subiste. ¿Algún buen tutorial que puedas recomendar acerca de como desarrollar para esta plataforma?. Entiendo que a día de hoy todo debe girar en su mayor parte en torno a FabGL.

Yo para video, sólo uso bitluni. FABGL para video consume mucha RAM y recursos, más que las librerias de Bitluni, por eso, en el emulador de Gameboy ya eliminé el video con fabgl. Pero para sonido, en concreto, los osciladores, está como módulo, y se puede usar sin la parte de video. Para el CHIP8, que usa un beep de onda cuadrada (1 pin), no se necesita librerias de audio.
El ratón en fabgl tiene dependencias de video. La libreria de fabgl, si miras el código, por ejemplo para ratón, es majestuosa. Está muy bien hecha, porque detecta muchos protocolos, pero claro, eso tiene un sacrificio, y es memoria y CPU. Por eso, para teclado, tampoco tiro de fabgl, sino de la libreria PS2. Se podría mejorar mucho, para emular consolas, en vez de usar teclado, usar un mando de NES, con sólo 3 pines, porque el protocolo sería muy básico.
Los tutoriales a seguir, lo que hay en los enlaces y este hilo:
https://github.com/bitluni/ESP32Lib
http://www.fabglib.org/


Volver a “Emulaciones software, FPGA y otras soluciones”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados