La memoria del ZX Spectrum Next
Una de las características del Next es que puede gestionar hasta 2Mb de RAM, pero eso no quiere decir que podamos disponer de toda esa memoria de forma libre y directa.
El Next implementa un microprocesador Z80N, que no es más que un Z80 vitaminado, lo que le permite correr a 28MHz, en vez de a 3.5MHz del clásico 48K y 128K, además de incorporar una serie de instrucciones adicionales que lo hacen más potente.
Pero lo que no se ha cambiado es el modo de direccionamiento de la memoria. El Z80 trabaja con registros de 16 bits para acceder a la memoria, lo que significa que puede direccionar un máximo de 64Kb de memoria directamente.
En el ZX Spectrum 48Kb, los 16 primeros Kb estaban ocupados por la memoria ROM (Memoria de Solo Lectura), que viene a ser el sistema operativo
del equipo, y el resto 48Kb se almacenaban en memoria RAM (Memoria de Acceso Aleatorio), en la que se puede escribir.
En el diagrama se muestra como estaban divididos estos 64Kb.
La aparición de los modelos de 128Kb amplió la capacidad de la RAM disponible, pero no el direccionamiento del Z80, que solo es capaz de direccionar 64Kb. Para lo cual se implementó un sistema de paginación de memoria.
La paginación de memoria
Este sistema divide los 64Kb direccionables por el Z80 en slots, de 16Kb en los modelos de 128K. El Next ha mejorado la gestión, permitiendo slots de 8Kb o 16Kb.
Estos slots nos permiten colocar en ellos cualquier banco de memoria que queramos en cualquier slot, en el caso del Next, ya que en los Spectrum clásicos solo se podía paginar completamente el slot situado en $c000, aunque existen algunas excepciones que no vienen al caso.
Ahora bien, aunque podamos paginar cualquier slot hacia cualquier banco de memoria, hay que tener especial cuidado en que slot y banco de memoria utilizamos, ya que algunos están utilizados por el sistema. Por ejemplo: Si utilizamos el slot 0, estaremos conmutando la ROM, por lo que, si necesitamos acceder a ella, para imprimir o cargar desde disco, por ejemplo, el resultado será un cuelgue del sistema en el mejor de los casos.
En las siguientes tablas podemos ver que hay en cada slot:
Esto significa que los slots de 16Kb, 1 y 2 no se deberían conmutar nunca, o al hacerlo habría que extremar las precauciones.
En cuanto a los bancos de memoria, en la siguiente tabla podemos ver cómo están asignados:
Para ir sobre seguro, podemos usar sin problema los bancos de 16 a 47 (16Kb) o del 32 al 95 (8Kb), lo que nos deja 1Mb de RAM, que incluye a todos los equipos del KS1, por lo que nuestro programa será compatible con ellos. Hay que tener en cuenta que los bancos por debajo del 31 se usan en algunos casos para operaciones internas del sistema operativo, por lo que recomiendo usarlos lo menos posible.
Los bancos del 48 al 111 (16Kb) o del 96 al 223 (8Kb), solo están disponibles en los modelos de 2Mb.
En resumen, para evitar problemas podemos usar los slots de 2 y 3 (16Kb), o 4, 5, 6 y 7 (8Kb), y las páginas de la 16 a la 47 (16Kb) o de la 32 a la 95 (8Kb).
Referencias
- https://worldofspectrum.org/faq/reference/128kreference.htm
- http://nextlib.duefectucorp.com/
- https://wiki.specnext.dev/Memory_map