256MB en un MSX

Por Palver

Expert (76)

Imagen del Palver

28-03-2021, 23:17

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.

Login sesión o register para postear comentarios

Por Juan Luis

Expert (121)

Imagen del Juan Luis

29-03-2021, 18:35

En la parte del foro en inglés un creador de hardware ruso llamado Eugeny Brychkov propuso una expansión de memoria similar, pero parece que a la gente no le interesó mucho.

Idea of RAM expansion cartridge

Yo también trasteo un poco con FPGAs. Sobre lo de que leer de las memorias DDR3 es más costoso que un pulso de reloj del Z80 del MSX suena extraño. Es cierto que las memorias DDR les tienes que enviar comandos para realizar las lecturas/escrituras, y suelen estar optimizadas para acceso secuencial pero no para acceso aleatorio. Lo que se suele hacer en esos casos es implementar una pequeña caché dentro de la FPGA que almacene los accesos a memoria más recientes. Hay muchos libros y documentación de arquitectura de computadores en internet donde puedes ver diversos tipos de implementaciones de cachés. Solo sería copiar una de ellas, y en la FPGA puedes implementar la asociatividad de las líneas de la caché.

Otra opción sería utilizar un chip de memoria estática SRAM, si bien un chip SRAM de una determinada capacidad suele ser más costoso que una memoria DDR equivalente. Las memorias SRAM suelen ser asíncronas, es decir, no requieren señal de reloj para funcionar y responden en el mismo tiempo tanto en accesos secuenciales como en aleatorios.

En cualquier caso, para mí cualquier expansión será bienvenida. Aumenta las posibilidades del MSX.

Por Palver

Expert (76)

Imagen del Palver

29-03-2021, 22:57

El problema es que no sé lo suficiente como para hablar directamente con la DDR, y tengo que usar un intermediario prefabricado, el mig7 que proporciona xilinx. Y es el mig el que tarda 250-400 nS en devolver el resultado. Lo bueno es que una lectura devuelve 16 bytes a la vez. Esto ayudaría a hacer el pequeño caché que comentas.

Teniendo una memoria de 256MB a mano, me parece un desperdicio añadir una SRAM, la DDR es complicada, pero también más divertida.

Por Juan Luis

Expert (121)

Imagen del Juan Luis

29-03-2021, 23:57

Lo de meter una SRAM, te lo sugerí por si quieres evitar el implementar una caché y no quieres tener problemas de velocidad con la DDR. Obviamente es una solución mucho más cara y nadie lo implementa así. Yo he visto alguna implementación de ordenadores retro en FPGA, no recuerdo si la MiniMIG o la Mister, que sólo tienen 32MB de SRAM, sin DDR. Tuve la sensación de que la persona que ha implementado esta FPGA para retro no controlaba mucho de memorias DDR y no se le ocurrió meter una caché. Desde luego, implementar un controlador de memoria DDR en la FPGA no es trivial.

Palver, hay una web llamada OpenCores donde hay código abierto para implementar en FPGA muchas cosas, entre ellas controladores de memoria DDR, etc. Las personas que implementan FPGAs retro suelen tomar código de aquí. Echa un vistazo en la sección Memory Cores para ver código VHDL/Verilog de controladores de memoria DDR en FPGA. Quizás puedas evitar ese controlador que suministra Xilinx, y puedas encontrar un controlador DDR más eficiente.

https://opencores.org/projects

Por último comentar que si buscas en internet el Datasheet del chip de memoria que estas utilizando, suele venir la descripción de los comandos que hay que enviarles a las memorias DDR con todo lujo de detalles, así como la máquina de estados para gestionar las memorias. El tema de implementar un controlador es cuestión de planteárselo, y además cuentas con ejemplos en la web que te he puesto en el enlace.

Por AxelStone

Prophet (2932)

Imagen del AxelStone

30-03-2021, 15:21

El problema diría que justamente lo que interesa es tener velocidad, pq los pírricos 3,58Mhz del Z80 se quedan cortos. Es decir, realmente a 256Mb no vas a sacarle demasiado partido, en cambio al hecho de poder conectar una CPU más rápida se le saca mucho.

Ejemplo práctico: la Zemmix FPGA. Puede subir el reloj del Z80 hasta los 8,06Mhz y no más por culpa de la DDR, si fuera SRAM podría seguir subiendo. En estas circunstancias tienes un MSX2+ a 8Mhz y con 4Mb de RAM, lo cuál está genial, pero si me pregunas entre subir la CPU digamos a 14Mhz o la RAM a 32Mb, te diría claramente que la CPU.

Por Palver

Expert (76)

Imagen del Palver

30-03-2021, 21:02

Gracias por el apunte, Juan Luis. Estuve mirando la hoja técnica de la memoria y el lenguaje que usa es asequible, ha cambiado poco desde las primeras SDRAM. Lo que sí ha cambiado es la velocidad, en este modelo los comandos se mandan a 700 MHz (!!!). A esa frecuencia hay que volver a centrar el reloj y protegerlo de los cambios de temperatura y demás. Toca estudiar un poco.

AxelStone, el Z80 no está pensado para manejar esa barbaridad de memoria (y menos desde Basic, uff). Pero la fpga sí que puede aprovechar la velocidad de una DDR. Y eso puede ser útil.

Por Juan Luis

Expert (121)

Imagen del Juan Luis

01-04-2021, 03:10

AxelStone wrote:

El problema diría que justamente lo que interesa es tener velocidad, pq los pírricos 3,58Mhz del Z80 se quedan cortos. Es decir, realmente a 256Mb no vas a sacarle demasiado partido, en cambio al hecho de poder conectar una CPU más rápida se le saca mucho.

Ejemplo práctico: la Zemmix FPGA. Puede subir el reloj del Z80 hasta los 8,06Mhz y no más por culpa de la DDR, si fuera SRAM podría seguir subiendo. En estas circunstancias tienes un MSX2+ a 8Mhz y con 4Mb de RAM, lo cuál está genial, pero si me pregunas entre subir la CPU digamos a 14Mhz o la RAM a 32Mb, te diría claramente que la CPU.

Yo sé Axel que los usuarios de MSX quieren más madera en cuanto a la CPU se refiere, pero es que el problema es que el MSX no fue diseñado para que una CPU externa tomara el control del sistema. Otros ordenadores, como el Commodore Amiga, sí que fueron concebidos desde su inicio para que una tarjeta de expansión con una CPU externa tomase el control del bus, y de hecho en su época se fabricaron aceleradoras 68030 e incluso 68060 con un PowerPC.

El problema del MSX que lo comenté en otro hilo del foro es que en las 50 líneas del slot de expansión no están presentes las señales de las patillas BusRequest y BusAcknowledge del Z80, que permitirían a un periférico hacer transmisiones por canal DMA y a una CPU externa tomar el control del bus. Un creador de hardware español, que por desgracia ha fallecido hace poco, Leonardo Padiel creo que se llamaba, ya se dio cuenta que no era posible implementar una CPU externa que tomase el control del bus. Lo que hizo él fue poner un Z380 en una tarjeta externa, pero el Z80 tenía que enviarle trozos de código a la tarjeta por puertos E/S y darle diversas órdenes para que se pusiese a trabajar. El Z380 actuaba como un coprocesador, no como una CPU totalmente autónoma. En las expansiones del el Amiga eso sí es posible.

Una opción factible sería una aceleradora tipo Vampire, en la que sacas el Z80 del zócalo (si es que tiene zócalo y si no se lo pones) y la tarjeta se conecta sobre el zócalo y así sí podría tomar el control completo del sistema, pero claro, en la mayoría de los MSX no hay sitio para hacer ese tipo de ampliaciones. Yo no veo muchas opciones.

Es un tema complejo Axel, pero entiendo que a la gente le interese más la velocidad que la memoria. Para mí los puntos flacos del MSX son la velocidad del Z80, la velocidad del bus que no fue ampliado ni mejorado y la imposibilidad de direccionar la memoria linealmente por encima de los 64 KBytes.

Por erpirao

Paragon (1174)

Imagen del erpirao

01-04-2021, 21:10

hola a ver por poner un aporte
1.- no coincido que el msx2 requiera de más de los 3.57mhz que vino de serie, más aún sabiendo que el msx2 se consideró un ordenador caro incluso en japón, en 1985 rondaban los 100.000ys (al cambio casi igual en pelas) y no sería hasta el fs-a1 y el hb-f1 que se hubieron msx2 a bajo precio (el perfect catalogue es una mina para eso), poner el z80 al menos a 6mhz hubiese disparado el precio de la máquina (al pc8801 me remito)
2.- al final sharksym ha conseguido convertir un msx2+ en turboR extrayendo las bios fuera y haciendo un bypass (cosa que en teoría no se podía hacer), slt-turbo-z280 como copro en un msx2+
3.- que hubiese sido mucho mejor un msx2 con ciertas mejoras (al final con una de cualquiera de estas tres me hubiese valido):
3.1- más Vram o un modo pattern mejorado (4 colore por lineas del pattern en lugar de 2) y sprites pattern (osea igualar los sprites hard al pattern)
3.2- cpu más rápida/mas ram, de serie (todos los msx2 con 128KB de serie en lugar de los rácanos 64), o memoria lineal (no hace falta 16MB del z280), con 1MB que maneja la MMU del z180 sobra de 1985 a 1988 (msx el que sea).
pero ojo, el msx2 con 3.57 mhz te da un akin, un deva o un smw, también te escupe un sf2 o mismamente un fantasm soldier 2, que con el parche de victor, es una gozada, achacar al z80 el problemas cuando hay máquinas que con igual o menos cpu hacen cosas mejores....
de hecho lo que me parece raro es que no hubiese un modo pattern hd (osea un sc4 pero trasladado al sc7), con la resolución del sc7 se notarían menos los compromisos de 2 colores por pattern.
otra mejora hubiese sido que el vdp fuera más rápido, el webmsx te permite acelerar el vdp en caliente y se nota bastante un vdp x2 sobre el mismo z80.
ahora bien al tema del hilo, 256MB guay, pero que cpu le vamos a poner a manejar eso?, un z80 con sus 150KB/s que puede tardar en buscar y refrescar esa memoria?.
otro tema que hace mucho que se planteó y creo que no hay interés es usar doping para los cartuchos, un stm32, que es un controlador de 3€ te mete un cálculo bestial, si lo pones en un cartucho, puedes pegar un buen punch a cualquier soft (vale que habría que programarlo), pero el bicho te podría servir para comprimir de gratis

Por Palver

Expert (76)

Imagen del Palver

04-04-2021, 00:08

La idea del coprocesador es interesante, y se podría aplicar a la memoria: si tuviéramos un “hada madrina” que pudiera llenar bancos y bancos de memoria con información de forma rápida, con qué se podrían llenar?

Por erpirao

Paragon (1174)

Imagen del erpirao

04-04-2021, 01:48

del tema del copro,. hace ya un porrón de años, los brasileños hicieron un cartucho fpu, el tema sería hacerlo más asequible, sencillo e integrarlo en un cartucho flash ascii16 (no hace falta que sea multimapper).