Mapa De Memoria
Paginación de memoria 128K
Si el bus de direcciones del Spectrum es de 16 bits y por lo tanto sólo puede acceder a posiciones de memoria entre 0 y 65535… ¿cómo se las arreglan los modelos de 128KB para acceder a la memoria situada entre las celdillas 65535 y 131071? La respuesta es un mecanismo tan simple como ingenioso: se utiliza unatécnica conocida comopaginación de memoria.
En este artículo aprenderemos a aprovechar los 128K de memoria de que disponen los modelos de Spectrum 128K, +2, +2A y +3. Gracias a la paginación nos saltaremos la limitación de direccionamiento de 64K del microprocesador Z80 para acceder a la totalidad de la memoria disponible.
-------------------------------------------------
Paginación
Losmodelos de Spectrum 128K, +2, +2A, +2B y +3 disponen de 128KB de memoria, aunque no toda está disponible simultáneamente. Al igual que en el modelo de 48KB, el microprocesador Z80 sólo puede direccionar 64K-direcciones dememoria, por lo que para acceder a esta memoria “extra”, se divide en bloques de 16KB y se “mapea” (pagina) sobre la dirección de memoria $c000.
¿Qué quiere decir esto? Que nuestroprocesador, con un bus de direcciones de 16 bits, sólo puede acceder a lamemoria para leer las “celdillas” entre $0000 y $FFFF (0-65535). Para leer casillas de memoria superiores a 65535, harían falta más de 16 bits de direcciones, ya que 65535 es el mayor entero que se puede formar con 16 bits (1111111111111111b).
Así que … ¿cómo hacemos para utilizar más de 64KB de memoria si nuestro procesadorsólo puede leer datos de la celdilla 0, 1, 2, 3 … 65534 y 65535? La respuesta es: mediante la paginación.
Los 64KB de memoria del Spectrum, se dividen en 4 bloques de 16KB. El primer bloque ($0000 - $4000) está mapeado sobre la ROM del Spectrum. Accediendo a los bytes desde $0000 a $3FFF de la memoria estamos accediendo a los bytes $0000 a $3FFF del “chip (físico)” de 16K de memoria quealmacena la ROM del Spectrum. Se dice, pues, que la ROM está mapeada (o paginada) sobre $0000 en el mapa de memoria.
Dejando la ROM de lado (16KB), los 48KB de memoria restantes están formados por 3 bloques de 16KB. El segundo bloque de 16K de memoria (primero de los 3 que estamos comentando), en el rango $4000 a $7FFF está mapeado sobre el “chip de memoria” que almacena el área de pantalla delSpectrum. El tercero ($8000 a $BFFFF) es memoria depropósito general (normalmente cargaremos nuestros programas aquí).
El bloque que nos interesa a nosotros es el cuarto. La zona final del área de memoria, desde $C000 a $FFFF, es nuestra “ventana” hacia el resto de memoria del 128K. Dividiendo los 128KB de memoria en bloques de 16KB, tendremos 8 bloques que podremos “montar” (o paginar) sobre elárea $C000 a $FFFF.
Veamos una figura donde se muestra el estado del mapa de memoria del Spectrum:
Cualquiera de los 8 bloques de 16KB (128 KB / 16 KB = 8 bloques) puede ser “mapeado” en los 16Kb que van desde $c000 a $ffff, y podremos cambiar este mapeo de un bloque a otro mediante instrucciones I/O concretas.
La última porción de 16KB de la memoria es, pues, una “ventana” que podemosdeslizar para que nos dé acceso a cualquiera de los 8 bloques disponibles. Esto nos permite “paginar” el bloque 0 y escribir o leer sobre él, por ejemplo. El byte 0 del bloque 0 se accede a través de la posición de memoria $C000 una vez paginado, el byte 1 desde $C0001, yasí hasta el byte 16383, al que accedemos mediante $FFFF.
Si paginamos el bloque 1 en nuestra ventana $C000-$FFFF, cuandoaccedamos a este rango de memoria, ya no accederíamos a los mismos datos que guardamos en el banco 0, sino a la zona de memoria “Banco 1”. Es posible incluso mapear la zona de pantalla (Banco 5), de forma que las direcciones $4000 y $C000 serían equivalentes: los 8 primeros píxeles de la pantalla.
El mapa de memoria del Spectrum con los bloques mapeables/paginables sobre $C000 es el siguiente:...
Regístrate para leer el documento completo.