Las fpga’s modernas tienen capacidad de sobra para meter dentro un MSX completo y todos sus accesorios. Bueno, en realidad no todos. Una excepción es la memoria. Una fpga suele tener menos de 1MB de ram. Para compensar, los fabricantes de placas de desarrollo de fpga suelen añadir memorias ram externas. Por ejemplo, la placa que utilizo últimamente (qmtech artix 7) viene con una memoria DDR3 de 256MB. Las memorias DDR3 tienen capacidades altas, velocidades de transferencia muy altas... y una interfaz muy poco amigable para el mundo de los 8 bits. Pero la idea de conectar esa memoria a un MSX es demasiado tentadora, así que había que buscar alguna manera de hacerlo. Y ahí viene el fabricante de la fpga (xilinx) en nuestra ayuda. Xilinx proporciona una herramienta para generar un interfaz a medida que permita hablar con una memoria moderna de una forma más amigable. La herramienta se llama mig7 (Memory Interface Generator series 7) y está optimizada para transferir grandes volúmenes de información. Que es justo lo que no necesitamos en el mundo de los 8 bits, donde las cosas van de byte en byte. El caso es q el mig7 funciona, y permite leer y escribir bytes en la memoria DDR3 usando el idioma que habla el z80. Pero el coste de tanta optimización se mide en nanosegundos. Y es que el tiempo de lectura de la DDR3 usando el mig7 es mayor que un pulso de reloj del z80 a 3.6MHz. Eso obliga a añadir un ciclo extra a las lecturas de memoria, con lo que el acceso a la ddr es más lento que a cualquier otra ram de hoy en día. Pero oye, son 256MB.
Para poder gestionar toda esa memoria se ha hecho un mapper utilizando los puertos fc-ff, pero no por separado, sino unidos para formar un registro de 32 bits que se suma a la dirección apuntada por el bus. De esta forma se podría acceder a 4GB por slot. Que no está mal para un MSX.
En un MSX1 dentro de una fpga funciona sin problemas. Queda probar a conectar la memoria a un MSX real. Supongo que un MSX2 se hará un lío con el mapper de 32 bits, que no se parece a ningún otro tipo de mapper.
Aquí está la interfaz para hablar con el mig7 y el módulo principal con el mapper.