Imagen

Emulación bajo ESP32

mad3001
Mensajes: 293
Registrado: 10 Nov 2017 13:30

Re: Emulación bajo ESP32

Mensaje por mad3001 »

zx81 escribió:Lo que tiene guasa del asunto es que, siendo la Abadía un tocho de programa, hicieran la carga más lenta, debieron de llamarla anti-turbo. -rofl
....

Saludos
¿Carga lenta? era para que uno se leyese el manual... ¿que manual? bueno, el que lo compró original tenía un manual para leerlo mientras cargaba -507
Avatar de Usuario
dcrespo3d
Mensajes: 259
Registrado: 04 Nov 2020 08:51

Re: Emulación bajo ESP32

Mensaje por dcrespo3d »

Hola @Eremus. He hecho un pull request de tu repo al mío y en el mío he he aceptado el pull request (un #juanpalomo en toda regla). Voy a intentar modificarlo para que no haya que allocatar un buffer de 1MB para el .tap, sino sólo el tamaño necesario.

Otra cosa, la pausa de un segundo entre bloques se me hace muy larga (igual la mía de 1/4 de segundo es demasiado corta). Creo que la voy a dejar en medio segundo.

También voy a intentar probar a implementar la carga rápida, a ver si lo consigo.
DavidPrograma en YouTube, GitHub
Avatar de Usuario
dcrespo3d
Mensajes: 259
Registrado: 04 Nov 2020 08:51

Re: Emulación bajo ESP32

Mensaje por dcrespo3d »

Pues llevo un rato pegándome con algo que debe ser una chorrada, pero por si acaso lo dejo aquí por si alguien anda más fino que yo ahora.

El código original de @Eremus allocataba un bufer grande en el init, y en el TAP_Load carga el fichero completo sobre ese buffer:

Código: Seleccionar todo

void Tape::Init()
{
    tape = (uint8_t*)ps_calloc(1, 0x100000); // 1 MB max TAP file size
    if (tape == NULL) Serial.printf("Error allocating tape into PSRAM\n");
}

boolean Tape::TAP_Load()
{
    
    File tapefile;

    tapefile = FileUtils::safeOpenFileRead(Tape::tapeFileName);
    tapeFileSize = readBlockFile(tapefile, tape, 0x100000);
    if (tapeFileSize == -1) return false;
    tapefile.close();

    return true;

}
Mi modificación no hace nada en el init, y en el TAP_load
- libera el buffer si ya existía
- abre el fichero y determina su tamaño
- allocata el buffer al tamaño del fichero
- lee el fichero sobre el buffer.

Código: Seleccionar todo

void Tape::Init()
{
    tape = NULL;
}

boolean Tape::TAP_Load()
{
    if (NULL != tape) {
        free(tape);
        tape = NULL;
    }

    File tapefile = FileUtils::safeOpenFileRead(Tape::tapeFileName);
    size_t filesize = tapefile.size();

    tape = (uint8_t*)ps_calloc(1, filesize);
    if (NULL == tape) {
        tapefile.close();
        return false;
    }

    Serial.printf("Allocated %lu bytes for .TAP\n", filesize);

    size_t readsize = readBlockFile(tapefile, tape, filesize);
    tapefile.close();
    Serial.printf("%lu, %lu\n", filesize, readsize);
    if (readsize == -1) return false;

    return true;
}
Pues mi modificación falla: aparentemente lee el primer bloque de carga, y luego se queda ahí parado. No entiendo por qué. Vamos, que hay tono, sale el rótulo "Program: DEATHCHASE" y ahí se queda, ya no sigue.

He revisado la lógica y no entiendo por qué pasa... el TAP_Load se llama una vez desde el código del OSD, no me cuadra que se quede parado después de leer un bloque.

@Eremus, tienes alguna idea de qué pasa? Solo estoy cambiando el alocatado de sitio, todo lo demás es igual... o no?
DavidPrograma en YouTube, GitHub
Avatar de Usuario
Eremus
Mensajes: 211
Registrado: 01 May 2022 18:10

Re: Emulación bajo ESP32

Mensaje por Eremus »

dcrespo3d escribió:@Eremus, tienes alguna idea de qué pasa? Solo estoy cambiando el alocatado de sitio, todo lo demás es igual... o no?
Esta todo perfecto excepto que te falta pasar el tamaño del fichero a la variable tapeFileSize:

Código: Seleccionar todo

    tapeFileSize = readBlockFile(tapefile, tape, filesize);
    tapefile.close();
    Serial.printf("%lu, %lu\n", filesize, tapeFileSize);
    if (tapeFileSize == -1) return false;

    return true;
  
Por otra parte, he estado pensando que realmente se puede cargar cualquier cosa utilizando un buffer de tamaño 0xFFFF ya que es el tamaño máximo de bloque para un archivo .tap. En la fase de pausa se puede ir leyendo bloque a bloque del sistema de archivos sin problema ya que hay tiempo de sobra. No se si seria factible alocatar esos 64KB en RAM y así poder usar la carga sin PSRAM.
Avatar de Usuario
dcrespo3d
Mensajes: 259
Registrado: 04 Nov 2020 08:51

Re: Emulación bajo ESP32

Mensaje por dcrespo3d »

Eremus escribió: Esta todo perfecto excepto que te falta pasar el tamaño del fichero a la variable tapeFileSize:
Claro y meridiano, estaba dejando sin asignar una variable que utilizas más adelante. Ayer estaba cansado y no lo ví...
Eremus escribió: Por otra parte, he estado pensando que realmente se puede cargar cualquier cosa utilizando un buffer de tamaño 0xFFFF ya que es el tamaño máximo de bloque para un archivo .tap. En la fase de pausa se puede ir leyendo bloque a bloque del sistema de archivos sin problema ya que hay tiempo de sobra. No se si seria factible alocatar esos 64KB en RAM y así poder usar la carga sin PSRAM.
[/quote]

Andamos bastante justos de SRAM, no creo que se pueda sin sacrificar otras cosas. Para hacer eso sería mejor utilizar las versiones de Ackerman que ha aligerado en extremo el gasto de SRAM para no necesitar PSRAM.

Mi versión del emulador está pensada para tener PSRAM, todas mis placas TTGo llevan.
DavidPrograma en YouTube, GitHub
Avatar de Usuario
dcrespo3d
Mensajes: 259
Registrado: 04 Nov 2020 08:51

Re: Emulación bajo ESP32

Mensaje por dcrespo3d »

He subido el cambio al repo, ahora se alocata el buffer necesario en PSRAM para el .TAP (y antes de alocatarlo se libera el anterior).

Gracias @Eremus por indicarme el fallo -thumbup
DavidPrograma en YouTube, GitHub
Avatar de Usuario
dcrespo3d
Mensajes: 259
Registrado: 04 Nov 2020 08:51

Re: Emulación bajo ESP32

Mensaje por dcrespo3d »

He conseguido algo que llevaba mucho tiempo queriendo añadir al emu, pongo los moñecos de celebrar!!!

-groupwave -woot_jump

El asunto de las franjas horizontales de carga (que eran demasiado anchas) me ha hecho volver a pensar sobre la sincronización de las dos tareas del emulador: CPU y Vídeo. Creo que siendo dos tareas independientes nunca va a ser perfecto, pero he conseguido mejorarlo mucho.

He añadido esperas en la tarea de vídeo, de modo que antes de empezar a pintar cada línea, se introduce una espera (con delayMicroseconds) hasta que los tstates de la cpu sean los que deberían ser para esa línea (utilizando la info de https://worldofspectrum.org/faq/referen ... erence.htm de forma aproximada).

Ahora las líneas de carga tienen el ancho correcto:
jetpac-red-cyan-lo.jpg
jetpac-red-cyan-lo.jpg (47.92 KiB) Visto 1580 veces
jetpac-blue-yellow.lo.jpg
jetpac-blue-yellow.lo.jpg (46.68 KiB) Visto 1580 veces
Además he conseguido que los juegos multicolor (los que cambian atributos "al vuelo" para superar la limitación de dos colores por bloque de 8x8 pixels) como DreamWalker, empiecen a verse. Un poco temblorosos, pero ya se ve el multicolor.

Este era el juego ANTES de la nueva sync CPU / Vídeo:
dreamwalker-no-multicolor.lo.jpg
dreamwalker-no-multicolor.lo.jpg (18.28 KiB) Visto 1580 veces
Y este es el juego DESPUES de la sync CPU / Vídeo línea a línea:
dreamwalker-multicolor.lo.jpg
dreamwalker-multicolor.lo.jpg (26.51 KiB) Visto 1580 veces
Tengo que tener cuidado con el watchdog si la CPU deja de correr por algún motivo (por OSD, por carga / guardado, etc) porque si no el delayMicroseconds se desmelena y le muerde el perro... vamos, que no hago delayMicroSeconds si el valor de tstates no ha cambiado desde la línea anterior. En caso de no comprobarlo, si la CPU se para, la tarea de vídeo se quedaría indefinidamente haciendo delay en bucle infinito y el watchdog me resetearía el ESP32.

Los cambios están en el repo: https://github.com/dcrespo3d/ZX-ESPectr ... ttgo-vga32

Si no fuera martes, me tomaba una cerveza para celebrarlo. Que se la tomen los moñecos -drinks
DavidPrograma en YouTube, GitHub
Avatar de Usuario
Eremus
Mensajes: 211
Registrado: 01 May 2022 18:10

Re: Emulación bajo ESP32

Mensaje por Eremus »

dcrespo3d escribió:He conseguido algo que llevaba mucho tiempo queriendo añadir al emu, pongo los moñecos de celebrar!!!

-groupwave -woot_jump

Si no fuera martes, me tomaba una cerveza para celebrarlo. Que se la tomen los moñecos -drinks
-thumbup -thumbup -thumbup ¡Bravo!

Apúntame otra cerveza que acabo de localizar el problema de ciertos .tap que me fallaban -thumbup

Starglider y Where time stood still, ambos para 128K cargados a la perfección. Era un fallo de esos cabrones que me ha hecho sudar la gota gorda. Esta variable:

Código: Seleccionar todo

static uint16_t tapeBlockLen;
Tiene que ser:

Código: Seleccionar todo

static uint32_t tapeBlockLen;
Sino, como ahora me resulta lógico (a buenas horas -banghead ) los .taps > 65535 bytes petaban.

Saludos ;)
Avatar de Usuario
Eremus
Mensajes: 211
Registrado: 01 May 2022 18:10

Re: Emulación bajo ESP32

Mensaje por Eremus »

zx81 escribió:En fins, perdonad por el ladrillo...
Perdonad? -no Creo que hablo por muchos si te digo que puedes "ladrillearnos" cuando quieras -grin

Al final, el problema con los .tap largos era simplemente una variable declarada demasiado pequeña pero todo lo que comentas es posible que haya que tenerlo en cuenta si implemento soporte .tzx. Como .tzx soporta modos turbo, con pulsos más cortos, la sensibilidad del algoritmo de carga es posible que se ponga a prueba si la sincronización no es lo más perfecta posible.

Así que me veo releyendo más de una vez tu post en un futuro no muy lejano -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 »

Y otro más, el emulador de Vectrex:
previewVectrexLogo.gif
previewVectrexLogo.gif (2.06 KiB) Visto 1421 veces
Se puede jugar, pero no esperéis 50 fps, por ahora va casí a la mitad de velocidad de la máquina real, unos 20 fps en 1024x768.
No necesita PSRAM, tira todo de SRAM y un sólo core (TTGO VGA 1.2). Requiere fabgl 1.0.8 para el video.

https://github.com/rpsubc8/ESP32TinyVectrex

Iré puliendo más adelante, pero por ahora, sirve para divertirse. La Vectrex es una máquina hipnótica. -shock
Avatar de Usuario
jltursan
Mensajes: 6063
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Contactar:

Re: Emulación bajo ESP32

Mensaje por jltursan »

¡Hey!, la Vectrex, ¡mola! -thumbup

Propuesta para los admin, este hilo lleva >56K visitas y comienza a acumular unos cuantos temas diversos, desde detalles técnicos de programación a desarrollo de emuladores. ¿Por qué no abrir un sub foro dedicado a los cacharrines ESP32?
Avatar de Usuario
Eremus
Mensajes: 211
Registrado: 01 May 2022 18:10

Re: Emulación bajo ESP32

Mensaje por Eremus »

ackerman escribió:Y otro más, el emulador de Vectrex:
Uff! Que recuerdos! Un amigo de mi padre la tenia, allá a mediados de los 80, y cada vez que me decía de ir a visitarle me faltaba tiempo para subir al coche :D

A día de hoy me sigue pareciendo una maravilla de concepto.
Avatar de Usuario
ackerman
Mensajes: 525
Registrado: 05 Feb 2019 21:32
Ubicación: Asturias
Contactar:

Re: Emulación bajo ESP32

Mensaje por ackerman »

jltursan escribió: Propuesta para los admin, este hilo lleva >56K visitas y comienza a acumular unos cuantos temas diversos, desde detalles técnicos de programación a desarrollo de emuladores. ¿Por qué no abrir un sub foro dedicado a los cacharrines ESP32?
Pues es interesante lo de hacer un subforo, no lo había tenido en cuenta. El admin, yo intuyo que debe ser @kikens o @ron, creo, pero que igual me estoy equivocando, vamos que no lo se.
No tengo ni idea como se crea subforo, pero si hay que pedirlo al admin, igual era bueno ir pensando la estructura de los temas a tratar. Lo que digais, aqui esto surgió como punto de encuentro y para tener la info toda concentrada.
No se, se me ocurre por ejemplo:
Lo que vayáis diciendo, id proponiendo, pero vamos, la clave tendría que ser relacionado con el retro y ESP32. Por ejemplo, la PS5 pues es una broma. Imaginemos no se, que por ejemplo, se saca algo que permite conectar el ESP32 a un mando de la PS5, pues aunque esté muy bien, no tendría sentido tenerlo ahí, porque para eso existen otros foros especializados.
Avatar de Usuario
pfuentes69
Mensajes: 66
Registrado: 21 Nov 2021 16:55
Ubicación: Suiza

Re: Emulación bajo ESP32

Mensaje por pfuentes69 »

Yo me compré una de estas placas y apenas la he podido probar... y la verdad es que las 30 páginas de este hilo tiran p'atrás un poco cuando vienes de nuevas... :)
Igual es muy egoísta o de perezoso, pero yo también creo que este tema da para tener un poco más de organización en los contenidos... En particular para mí tener unas pequeñas guías de instalación de los distintos emuladores sería genial.
-m3s3x Canon V20, Panasonic A1F
-m4c Apple 1 (clon), Macintosh 512K, Plus, SE/30 @ 50MHz, Classic, Classic II, IIci, LCII, LC475, Mac mini G4, PowerBook 145B, PowerBook G3 Wallstreet, iBook G4
Avatar de Usuario
josemrm
Mensajes: 560
Registrado: 09 Feb 2021 01:05
Ubicación: cerca de Bilbao

Re: Emulación bajo ESP32

Mensaje por josemrm »

lo suyo seria crear un subhilo especifico para el ttgo vga32 sin psram v1.2 y comentar que es valido para el v1.4 y crear otro subhilo para el v1.4 y comentar que seguramente no es valido para el v1.2 por tener psram y microsd que igual se usan

luego otros subhilos para cada esp32 o si no, todos los demas esp32 en un mismo subhilo donde el titulod el esp32 se ve reflejado claramente a que esp32 se trata

asi que el tiene uno especifico va a tiro hecho y el que quiera programar pues subhilos propios de programacion especificamente para cada emulador: speccy, msx, amstrad, x86, etc
© josemrm -m3s3x
-coam1 -j4tar1 -cocbm1 -4mstr4d -sp3zy -b3b3c3 -codrg1 -0r1c IBM PowerMac
Pegasos2 MorphOS, Amithlon, PiStorm
Atlas, DE10-lite, ZXUnGo+ by Spark2k06
Odroid BeOS QNX Plan9 CP/M,
Avatar de Usuario
amakuja
Mensajes: 1040
Registrado: 01 Nov 2010 14:42
Ubicación: Santurce Antiguo

Re: Emulación bajo ESP32

Mensaje por amakuja »

ackerman escribió:
jltursan escribió: Propuesta para los admin, este hilo lleva >56K visitas y comienza a acumular unos cuantos temas diversos, desde detalles técnicos de programación a desarrollo de emuladores. ¿Por qué no abrir un sub foro dedicado a los cacharrines ESP32?
Pues es interesante lo de hacer un subforo, no lo había tenido en cuenta. El admin, yo intuyo que debe ser @kikens o @ron, creo, pero que igual me estoy equivocando, vamos que no lo se.
No tengo ni idea como se crea subforo, pero si hay que pedirlo al admin, igual era bueno ir pensando la estructura de los temas a tratar. Lo que digais, aqui esto surgió como punto de encuentro y para tener la info toda concentrada.
No se, se me ocurre por ejemplo:
Lo que vayáis diciendo, id proponiendo, pero vamos, la clave tendría que ser relacionado con el retro y ESP32. Por ejemplo, la PS5 pues es una broma. Imaginemos no se, que por ejemplo, se saca algo que permite conectar el ESP32 a un mando de la PS5, pues aunque esté muy bien, no tendría sentido tenerlo ahí, porque para eso existen otros foros especializados.
Que haga falta un subforo indica que estos cacharritos generan mucho interés. Yo pediría tutoriales pensados para un público con cero conocimientos en la materia (aka tutoriales-para-tontos), entre los que me incluyo -grin -grin
El que nada emprendió, nada terminará.
Responder

Volver a “ESP32 TTGO VGA32”