dcrespo3d / ZX-ESPectrum-Wiimote

A ZX spectrum 48K/128K emulator running on ESP32 powered Lilygo TTGo VGA32 v1.4 board, using PS2 keyboard and/or Wiimote as input device. Active branches are master and devkit-custom
MIT License
67 stars 18 forks source link

Mejoras al casete, Video mas rapido y ROM de diagnosticos #16

Closed EremusOne closed 2 years ago

EremusOne commented 2 years ago

Hola de nuevo,

He añadido unas cuantas mejoras a la carga de .taps. Ahora se detecta la entrada y salida de las rutinas de carga en ROM y se pone en marcha y detiene la cinta automáticamente. Para algunos juegos que tienen multicarga o solicitan parada de cinta va muy bien :) Si los juegos usan rutinas de carga propias lógicamente no actúa pero, a pesar de todo, creo que es un buen añadido.

Por otra parte, he estado estudiando el código de la videoTask con objeto de aprender como funciona ya que quiero implementar un OSD donde se vea, en tiempo real, el avance de la carga y mas cosas.

Aprovechando el estudio del código, he optimizado la función videoTask con algunas de las mejoras de Ackerman y algunas de cosecha propia. Ahora es el doble de rápida según mis mediciones. No se si servirá de algo ya que con la velocidad anterior era suficiente pero quizá esa velocidad venga bien para dar soporte a algún modo extraño de video del Spectrum o para sacarla mas adelante de multithread. Échale un ojo si quieres por si hubiera metido la pata en algo. En mis pruebas se ha comportado bien :)

He añadido también la ROM de diagnósticos de D. Smith y B. Alford por si pudiera venir bien.

dcrespo3d commented 2 years ago

Hola Victor! Gracias de nuevo por tus cambios, me parecen muy interesantes. Este fin de semana no voy a poder revisarlos, pero en cuanto pueda los miro en detalle y los integro. En cuanto a tener un thread separado para CPU y otro para vídeo es una de las cosas que heredé del emulador original y que me gustaría cambiar. A base de esperas nunca se va a alcanzar un emulador cycle-perfect, lo suyo sería generar el vídeo a la vez que la CPU ejecuta instrucciones. Tengo medio pensado la manera de hacerlo, y para ello es necesario poder hacer ambas tareas en un único thread, para lo cual es necesario que estén perfectamente optimizadas ambas tareas. Por eso tus optimizaciones en el thread de vídeo son muy necesarias. Lo que me gustaría sería generar el framebuffer en el thread de CPU y utilizar el thread de vídeo para el OSD, el cual también me gustaría también rediseñar, tiene bastantes carencias.

dcrespo3d commented 2 years ago

Mergeados los cambios. Voy a subir un cambio mío para lo del borde uint32 a uint32 ;-)