¿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 cargabazx81 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.
....
Saludos
Emulación bajo ESP32
Re: Emulación bajo ESP32
Re: Emulación bajo ESP32
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.
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.
Re: Emulación bajo ESP32
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:
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.
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?
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;
}
- 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;
}
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?
Re: Emulación bajo ESP32
Esta todo perfecto excepto que te falta pasar el tamaño del fichero a la variable tapeFileSize:dcrespo3d escribió:@Eremus, tienes alguna idea de qué pasa? Solo estoy cambiando el alocatado de sitio, todo lo demás es igual... o no?
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;
Re: Emulación bajo ESP32
Claro y meridiano, estaba dejando sin asignar una variable que utilizas más adelante. Ayer estaba cansado y no lo ví...Eremus escribió: Esta todo perfecto excepto que te falta pasar el tamaño del fichero a la variable tapeFileSize:
[/quote]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.
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.
Re: Emulación bajo ESP32
He conseguido algo que llevaba mucho tiempo queriendo añadir al emu, pongo los moñecos de celebrar!!!
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:
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: Y este es el juego DESPUES de la sync CPU / Vídeo línea a línea: 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
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:
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: Y este es el juego DESPUES de la sync CPU / Vídeo línea a línea: 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
Re: Emulación bajo ESP32
¡Bravo!dcrespo3d escribió:He conseguido algo que llevaba mucho tiempo queriendo añadir al emu, pongo los moñecos de celebrar!!!
Si no fuera martes, me tomaba una cerveza para celebrarlo. Que se la tomen los moñecos
Apúntame otra cerveza que acabo de localizar el problema de ciertos .tap que me fallaban
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;
Código: Seleccionar todo
static uint32_t tapeBlockLen;
Saludos
Re: Emulación bajo ESP32
Perdonad? Creo que hablo por muchos si te digo que puedes "ladrillearnos" cuando quieraszx81 escribió:En fins, perdonad por el ladrillo...
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
Re: Emulación bajo ESP32
Y otro más, el emulador de Vectrex:
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.
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.
Re: Emulación bajo ESP32
¡Hey!, la Vectrex, ¡mola!
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?
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?
Re: Emulación bajo ESP32
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 cocheackerman escribió:Y otro más, el emulador de Vectrex:
A día de hoy me sigue pareciendo una maravilla de concepto.
Re: Emulación bajo 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.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?
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:
- TTGO VGA32 con y sin PSRAM, o v1.2 y v1.4, o algo así.
- Desarrollo de emulatas en ESP32
- Spectrum
- CP/M
- CPC
...
- La Play 5, como ejecutar los juegos de la PS5 en el ESP32
- O poner desarrollo de emulatas ESP32 todo junto - Simuladores, ports, etc, en ESP32, vamos, reverse enginering. Parecido a estos enlaces, pero para ESP32:
https://lethalguitar.wordpress.com/2019/05/28/re-implementing-an-old-dos-game-in-c-17/
https://ryiron.wordpress.com/2019/10/14/legendary-wings-reversing-a-1980s-arcade-game/ - ESP32 con lcd o portables, estilo odroid ESP32, por ejemplo.
- pfuentes69
- Mensajes: 66
- Registrado: 21 Nov 2021 16:55
- Ubicación: Suiza
Re: Emulación bajo ESP32
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.
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.
Canon V20, Panasonic A1F
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
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
Re: Emulación bajo ESP32
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
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
IBM PowerMac
Pegasos2 MorphOS, Amithlon, PiStorm
Atlas, DE10-lite, ZXUnGo+ by Spark2k06
Odroid BeOS QNX Plan9 CP/M,
IBM PowerMac
Pegasos2 MorphOS, Amithlon, PiStorm
Atlas, DE10-lite, ZXUnGo+ by Spark2k06
Odroid BeOS QNX Plan9 CP/M,
Re: Emulación bajo ESP32
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 incluyoackerman escribió: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.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?
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.
- TTGO VGA32 con y sin PSRAM, o v1.2 y v1.4, o algo así.
- Desarrollo de emulatas en ESP32
- Spectrum
- CP/M
- CPC
...
- La Play 5, como ejecutar los juegos de la PS5 en el ESP32
- O poner desarrollo de emulatas ESP32 todo junto- Simuladores, ports, etc, en ESP32, vamos, reverse enginering. Parecido a estos enlaces, pero para ESP32:
https://lethalguitar.wordpress.com/2019/05/28/re-implementing-an-old-dos-game-in-c-17/
https://ryiron.wordpress.com/2019/10/14/legendary-wings-reversing-a-1980s-arcade-game/- ESP32 con lcd o portables, estilo odroid ESP32, por ejemplo.
El que nada emprendió, nada terminará.