Slots y subslots, ¿qué son?

Traducción de un extracto del artículo Multi-review: MSX Memory Mapper, MEGA-MAPPER and MEMORY SAMURAI (Part 1 of 2) escrito por Javi Lavanderia en su blog.

Slots

La CPU en los MSX es un Zilog Z80 (o compatible). Este procesador puede acceder a solo 64KB de memoria al mismo tiempo, así que para usar más memoria el MSX usa una técnica llamada bank switching (intercambio de bancos de memoria). El MSX tiene hasta cuatro bancos de memoria de 64KB cada uno, llamados slots.

Esto funciona así: el espacio de direccionado del Z80 se divide en cuatro trozos de 16KB llamados páginas:

Páginas de memoria del Z80 en el estándar MSX

Páginas de memoria del Z80 en el estándar MSX

 

Entonces, usando un mecanismo de hardware, el programador selecciona qué banco de memoria aparecerá en cada página de memoria de la CPU. Esto significa que el espacio de dirección de la CPU en la página 0 puede conectarse a la página 0 desde los slots 0 a 3, página 1 de la CPU puedo ser la página 1 de los slits 0 a 3, y así sucesivamente.

Como ejemplo, el Toshiba HX-10 (un modelo de 64KB) tiene esta configuración de memoria:

  • ROM en las páginas 0 y 1 del slot 0.
  • RAM en las páginas 0 a 3 del slot 2.
  • Slots 1 y 3 están conectados a las ranuras de cartucho.
  • Páginas 2 y 3 del slot 0 no se usan.

Cuando esta máquina arranca al MSX-BASIC comienza con esta configuración de slot:

Mapa de memoria del Toshiba HX-10 bajo MSX-BASIC

Mapa de memoria del Toshiba HX-10 bajo MSX-BASIC

Todas las generaciones de MSX soportan esta clase de intercambio de bancos, desde el más básico MSX1 hasta el más potente MSX turbo R.

Podemos ver fácilmente que usando solo estos tres slots en un MSX podemos tener como máximo 256KB de memoria total, después de añadir juntos ROM, RAM y lo que conectemos en las ranuras de cartucho.

Subslots

La segunda generación de ordenadores MSX extendieron el concepto de slots para permitir más memoria. Desde MSX2 hacia arriba un slot puede ser ampliado para soportar hasta cuatro subslots (también llamados ampliados, secundarios o slots expandidos).

El espacio de direccionamiento del Z80 aún se divide en cuatro páginas de 16KB, y cada una de ellas puede conectarse a cualquier slot desde 0 a 3 como antes. Sin embargo, cuando una página está conectada a un slot que es expandido tenemos también que especificar un subslot.

Como ejemplo, el Panasonic FS-A1F. Esta máquina es un MSX2 básico con 64KB de RAM, la aplicación A1 Cockpit en ROM, y una unidad de disco. Y tiene la siguiente configuración de slots:

 

Mapa de memoria del Panasonic FS-A1F

Mapa de memoria del Panasonic FS-A1F

Los slots que no son expandidos se conocen como slots primarios o básicos. En el caso del Panasonic FS-A1F, los slots 0, 1 y 2 son primarios, y el slot 3 es expandido.

Los slots expandidos no se pueden ampliar más.

Un simple cálculo da como resultado que si todos los slots fueran expandidos (lo que nunca ocurre), un ordenador MSX2 (o superior) podría tener como máximo 1MB de memoria total, si solo nos basáramos en estos bancos de memoria.

Usar slots y subslots funciona lo suficientemente bien en las aplicaciones que vienen integradas con el ordenador y con las ROMs del sistema. Sin embargo, teniendo varios subslots llenos de RAM no sería de mucha ayuda porque solamente podemos conectar un página de slot/subslot al mismo número de página del espacio de direccionamiento de la CPU. Buscar y usar toda la RAM en esta situación es complicado para el programador debido a todo el intercambio de bancos necesario.

Memory mappers

Además de estos, el estándar MSX2 define una extensión opcional para soportar más memoria: el mapeador de memoria. La mayoría (si no todos) los ordenadores MSX2/MSX2+/MSX turbo R con más de 64KB deRAM lo usan.

El mapeador consiste en un conjunto de bloques de RAM, cada uno de ellos de 16KB, llamados segmentos. Dependiendo de su tamaño pueden contener desde 4 a 256 de estos segmentos, siempre en potencias de dos: 4, 8, 16, 32, 64, 128 ó 256 segmentos para un total de 64, 128, 256, 512, 1024, 2048 ó 4096 KB.

Un mapeador ocupa las cuatro páginas del slot o subslot en el que se encuentra conectado, y hay un mecanismo de hardware que permite al software seleccionar qué segmento del mapeador está conectado a cada página del slot:

Segmentos de mapper selccionados en el mapper de un slot

Segmentos de mapper seleccionados en el mapper de un slot

Hay que tener en cuenta que el mismo segmento de mapeador puede ser asignado a más de una página simultáneamente. En el ejemplo de arriba, el segmento 0 está asignado a la página 0 y 3 al mismo tiempo. Esto significa que ambas páginas son un reflejo de la otra.

El Philips NMS 8250 es un MSX2 con un mapeador de memoria de 128KB conectado al subslot 3-2. Una posible configuración de memoria bajo MSX-BASIC podría ser esta:

Mapa de memoria del Philips NMS-8250

Mapa de memoria del Philips NMS-8250

El mapeador de memoria es perfecto para guardar datos de programa porque podemos intercambiar muy fácilmente los segmentos visibles y ponerlos en cualquier página del Z80.

Hay que tener en cuenta que pueden haber más de un mapeador de memoria en un ordenador MSX. MSX-DOS2 soporta hasta 8. Como curiosidad, después de considerar los slots asignados a la RAM, un MSX puede tener teóricamente un máximo de 52MB de memoria RAM.

Los MSX1 pueder usar cartuchos mapeadores de memoria, pero como no tienen la circuitería para cambiar los segmentos activos, solo pueden ver 64KB de RAM, a pesar del tamaño del mapeador.

3 Respuestas

  1. hiroko dice:

    ¡Hola!

    El nombre no es Memory Samurai pero Expansion Memory for MSX2/2+/turboR (aka:  MSX memory Bancho)
    En japonés: MSX2/2+/turboR用 16MBメモリー拡張カートリッジ  (通称:MSXメモリー番長))

Deja tu comentario sobre esto

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: