El TEST 21 del core de Spectrum está en el repositorio. Si echais un vistazo vereis que he reorganizado un poco los ficheros del core, dejando la parte común en un lado, y la parte que es propia de cada versión de ZXUNO en otro sitio. Así, espero, podrá ser más sencillo sintetizar cores para las diferentes versiones de la placa.
De momento, la única placa que está testada al 100% es la 4.
Se ha hecho esperar porque el manejo de la memoria ha cambiado radicalmente y esto había que probarlo exhaustivamente. El resultado de todo esto es un core aún más compatible con todos los modelos oficiales de Spectrum, y el Pentagon. Estas son las nuevas características, además de lo que ya teníamos, claro:
- El modo turbo se eleva hasta los 14MHz. Tenemos por tanto: 3.5MHz, 7MHz y 14MHz para elegir.
- Es posible deshabilitar a voluntad los siguientes periféricos: DivMMC, AY, segundo AY (o sea, quitar el TurboSound), ULAplus, modos de pantalla Timex, y modo radastaniano.
- Es posible configurar el sistema de paginación de memoria para que funcione exactamente igual que un 48K, un 128K/+2 gris, o un +2A/+3. Esto significa que la decodificación de los puertos $7FFD y $1FFD se hace en cada modelo según sus especificaciones, o en el caso del 48K, que esos puertos no existan en absoluto. Esto ha hecho que mejore la compatibilidad sobre todo con demos de Pentagon, que asumen una decodificación parcial del puerto $7FFD igualita que la del 128K/+2 gris (ahora las demos Kpacku Deluxe y Heart funcionan sin problemas hasta el final). En un Spectrum 48K es posible deshabilitar la memoria por encima de 48K para que no aparezca ni siquiera tras un reset de usuario, y también es posible deshabilitar el AY-3-8912, comportándose de esta forma como un verdadero Spectrum 48K a todos los efectos: los juegos duales 48K/128K lo detectarán como un 48K y no tratarán de usar música AY (petición de carmeloco).
- Hay juegos que por lo visto, durante su desarrollo, usaron algún tipo de debbugger hardware que se conectaba al puerto $FF, y en la versión final no quitaron el código que se comunica con el debugger, con lo que envían datos espureos a este puerto. En un Spectrum original, no Timex, escribir al puerto $FF no tiene ningún efecto, pero en el ZX-UNO se activan los modos de pantalla Timex, así que esos juegos eran injugables. Ahora los modos Timex pueden desactivarse para mejorar la compatibilidad con estos juegos (petición de YERZMYEY)
- Se ha añadido el manejador de memoria horizontal (MMU) del Timex, teniendo ahora por tanto tres bancos: HOME, DOCK y EXT. Cada uno de ellos con 64KB paginables en blqoues de 8KB. El banco HOME es el habitual de un 48K/128K. DOCK y EXT son bancos alternativos que pueden aparecer en todo o en parte del espacio de direcciones del Z80 usando para ello el puerto $F4. Esto permite la implementación del estándar Chloe 280SE. La MMU no está activada por defecto. Cuando está activada, leyendo el puerto $FF se devuelve el último valor escrito en él, es decir, la configuración del modo de pantalla Timex en uso y la elección DOCK/EXT para la MMU.
- Se ha cambiado la forma en la que se generan los scanlines en la salida VGA, para que queden un poco más naturales.
- Se ha cambiado la forma en la que se activa el modo radastaniano. A petición de Andrew Owen, que es el responsable de la especificación ULAplus, se han movido los bits que se usaban en el registro 64 de ULAplus para activar el modo radastaniano, al registro 64 de ZX-UNO. Esto afecta a todo el software que se haya escrito hasta ahora y que use el modo radastaniano. Las utilidades .playrmov y las demos del modo radastaniano que están publicadas en el repositorio han sido ya actualizadas.
La utilidad .zxunocfg ha sido actualizada para dar soporte a los nuevos modos turbo.
Se ruega a los poseedores de un prototipo que, como siempre, hagan un backup de su SPI Flash antes de poner este nuevo core. Y si es posible, que lo prueben antes enviándolo por JTAG a la FPGA antes de flashearlo definitivamente en ella.
Este core funciona mejor si se tiene la última revisión de la BIOS instalada (que no recuerdo ahora mismo si es la 0.41 o 0.43)