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/mainVemos 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/PS2MouseY 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/srcPara 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/mainEl que también está pensado para tener todos a la vez es el
RetroESP32:
https://github.com/retro-esp32/RetroESP32