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:
- 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:
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:
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:
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:
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.
¡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メモリー番長))
Gracias por la aclaración. El título fue traducido por Javi Lavandeira para su artículo y yo simplemente lo copié.
Aclarado queda entonces para futura referencia.
Saludos.
Hola,
No es el título que traduje yo, sino el nombre que le dan al producto en su propia tienda online:
http://www.march-rabbit.jp/index.php?main_page=product_info&products_id=4277
Saludos,