5 de abril de 2020, el día que el baremetal humilló a la FPGA

En el programa 196 de AmigaWave – Entrevista con ZX81 autor del emulador baremetal de ZXspectrum para Pi, emitido el 5 de abril de este año, se realizó una extensa entrevista de 2 horas de duración a José Luis Sánchez, usuario zx81 en Retrowiki, donde se presentó en profundidad su emulador de Spectrum ZXBaremulator que corre sobre la plataforma Raspberry Pi.

Además de presentar el emulador y todas sus características, se realizaron una serie de pruebas comparativas entre el emulador ZXBaremulator y cores de Spectrum corriendo en FPGA (MiST y ZX-Uno), en las que estos últimos salieron muy mal parados en ciertas pruebas que buscan la precisión de la recreación lo más exactamente posible a la máquina original.

Después de casi 2 horas de entrevista me quedo con las palabras de Carlos «Estrayk» que resumían lo visto en el programa, y con las que estoy 100% de acuerdo:

03:02:28 «Haciendo un resumen de todo lo que ha dicho José Luis esta noche, es que lo principal es, quién programa el core en la FPGA, o quien programa el emulador, sea baremetal o no sea baremetal, eso es muy importante. La precisión que el programador introduzca, el tiempo que él tenga para mejorarlo, a esos niveles de perfección tan brutales para que salgan estos test que hemos puesto todos perfectos, creo que es lo más importante. Pero de todas formas no quita que […] para un emulador que no sea baremetal es complicado llegar a un mínimo de perfección sobre la máquina real, eso es lo que me ha quedado claro, y luego la diferencia de un emulador en una Rasperry Pi a una FPGA, pues nada, lo que ha dicho José Luis, que el programador tenga el tiempo, las ganas, y la motivación suficiente para hacerlo más perfecto, pero yo creo que se pueden hacer igual de perfectos tanto en una plataforma como en otra. Ahora sí que es cierto, que a día de hoy nos hemos demostrado que el core de Spectrum, por lo menos la versión de José Luis, es más fiel a la máquina original que las soluciones que tenemos en FPGA, lo hemos visto con los test ahora mismo, eso es lo que yo he sacado en claro esta noche».

 

Obviamente han pasado ya unos cuantos meses desde abril, y las implementaciones de Spectrum para FPGA no se han quedado paradas, sino que se siguen mejorando y perfeccionando, y muchos de los test que los cores de FPGA no realizaban correctamente son cosa del pasado. Y no es que sea ahora en diciembre cuando se han solucionado estos problemas, ya en agosto estaban solucionados en el ZX-Uno o en la MiST, pero nadie lo había comentado aún, y por eso me he animado a escribir esta entrada y realizar esté vídeo:

A continuación reseño las pruebas realizadas en el programa de Amigawave con las realizadas en mi vídeo o en otros vídeos encontrados por internet.

Test IR_CONTENTION (contención de memoria)

Antes

02:06:54 En el ZXBaremulator se ve correctamente y en las FPGA es un desastre.

Ahora

02:40 Aquí se puede ver en el core kyp48K en el ZX-Uno. No solo lo hace perfecto sino que esas rayitas que aparecen es el famoso efecto «snow» de la ULA del modelo 48K, efecto que sí está implementado en el core pero no en el ZXBaremulator.

Test Z80 full (implementación instrucciones cpu Z80)

Antes

02:01:38 En este test ZXBaremulator tiene 0 errores de 152 pruebas, y las FPGA tienen, dependiendo del core usado, 23, 10 o 9 errores.

Ahora

10:55 En las FPGA se ha mejorado el core T80 que recrea la CPU Zilog Z80 y que es el utilizado en muchas implementaciones de cores de Spectrum. Aquí se ve como el core kyp48K en el ZX-Uno solo falla ahora en 2 de las 152 pruebas, y esos errores no son importantes, pues también suelen fallarlos las CPU Z80 que fueron fabricadas por otros fabricantes diferentes a Zilog.

Demos para Spectrum 128K o +2

En el programa se enseñan 3 demos para los modelos de Spectrum 128K y +2 (no para 48K ni +2A, que son las otras 2 máquinas que emula el ZXBaremulator). En las ejecuciones del ZXBaremulator se ven bastantes veces unas rayas horizontales que se van desplazándo desde la parte inferior y van ascendiendo. Según José Luis, ese efecto es apreciable porque su emulador es más exacto en los timings que otros emuladores o cores FPGA. El caso es que yo en mi ZX-Uno veo perfectamente esas demos sin esas líneas horizontales, y en vídeos encontrados en internet, tanto los oficiales de esas demos, como los realizados por usuarios usando máquinas reales, tampoco aprecio esas rayas, por lo que encuentro correcta la ejecución en FPGA sin que aparezcan esas líneas.

1ª Demo: PARALACTICA

01:35:08 Se ve como va subiendo una linea horizontal en el ZXBaremulator
14:05 Ejecutado en el core kyp128K en el ZX-Uno no se ve que suba ninguna línea horizontal
01:19 Ejecutado en un Spectrum 128K real sigue sin verse que suba ninguna línea horizontal
00:44 En el vídeo oficial de la demo tampoco se ve tampoco ninguna línea

2ª Demo: MESCALINE

01:41:41 Se ve la línea como sube por el graffiti en el ZXBaremulator
01:42:13 En esta pantalla que pone Thought’s changin se ve también claramente la línea en el ZXBaremulator.
15:41 En los dos momentos anteriores no se ve la línea en la ejecución de la demo con el core kyp128K en el ZX-Uno
00:40 En este vídeo de internet con máquina real tampoco se ve la línea en el graffiti
01:11 Tampoco se ve la línea en máquina real en la pantalla Thought’s changin
00:16 En el vídeo oficial de Mescaline tampoco se observan esas líneas que van subiendo

3ª Demo: TIRATOK

En esta demo el efecto de la línea ascendente se ve muy pocas veces, a veces casi es imperceptible, por lo que no voy a poner comparaciones.

CONCLUSIÓN

Los fallos de exactitud que se veían en el programa de Amigawave que tenían las implementaciones FPGA ya han sido resueltas.

EPÍLOGO

Sin desmerecer la calidad del emulador ZXBaremulator, comento alguna de las características por las que prefiero mi ZX-Uno sobre este emulador.

– Tengo varios cores de Spectrum donde elegir. En algunos se prioriza la versatilidad (core EXP27 de mcleod_ideafix) y en otros la exactitud (cores 48k y 128K de kyp). En otros se implementan hardware poco convencional (versiones de azesmbog), y en otros la utilización con hardware más comun como monitores VGA (core VGA27 de mcleod_ideafix).
– Puedo utilizar muchos más modelos de máquinas que las 3 que tiene el ZXBaremulator (por ejemplo, Timex Sinclair 2068, Spectrum +3e, Pentagon, etc).
– Puedo realizar cargas por audio
– Soporte divMMC y esxDOS. Carga casi instantanea de los juegos. Permite disfrutar de compilaciones como el ZX1PACK o la myDivMMC, y usar escritorios como el Workbech +3e o trabajar con CP/M.
– Puedo utilizar ficheros .PZX (son .TZX simplificados) para simular carga por audio real, que luego se puede acelerar poniendo la CPU a 28Mhz (tecla F12). Los .PZX se pueden parar y rebobinar para uso con juegos multicarga.
– Se pueden usar joystick DB9 norma atari – zero lag – con un montón de protocolos (Kempston, Sinclair, Fuller, OPQAESPM) y kempston mouse. Estos protocolos, así como el kempston mouse, también los tiene implementados el ZXBaremulator
– Mucho más hardware adicional (Turbo Sound – doble AY -, SpecDrum, Covox, SAA1099, addon WIFI, addon MIDI, modos gráficos Timex, ULAplus o radastaniano).
– Con el navegador NMI de Bob Fossil ya se tiene soporte de nombres largos para los ficheros con los juegos.
– También se tiene la posibilidad de meter POKES o hacer snapshots desde los navegadores NMI, al igual que con el MULTIFACE incluido en el ZXBaremulator.
– Puede ejecutar otros firmwares alternativos como el ZX85 de David A. Nagy o el SE BASIC IV 4.2 de Andrew Owen.
– Hay modelos de ZX-Uno, como el ZX GO+, que permiten el uso de un teclado de membrana (además de uno externo PS/2), y meterlo dentro de una carcasa de un Spectrum 48K.
– Salidas de vídeo compuesto, RGB y VGA, cierto que no HDMI como el ZXBaremulator, pero suficientes.

Esta entrada fue publicada en FPGA, ZX Spectrum, ZX-Uno y etiquetada , . Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *