Hardware abierto para MSX

MSX-SDF-1

Un kit de desarrollo de I/O para MSX: la placa pone la base, el proyecto lo pone cada uno

Un cartucho abierto y experimental para construir tus propios periféricos: un microcontrolador asomado al bus del MSX, una EEPROM de 64 KB del lado del Z80 —regrabable con un adaptador de cartucho a grabador— y media placa de islas perforadas para montar lo que tu proyecto necesite. Cambiando la ROM y el firmware, la misma placa puede ser un puerto serie, una interfaz de sensores o una disquetera.

Incluye tres proyectos de ejemplo, que son lo único terminado por ahora: un lector de tarjetas SD que monta imágenes .DSK y funciona como disquetera en cualquier MSX, un reloj con pila que se suma al lector, y el SDF-Pico, que reemplaza el ATmega por una Raspberry Pi Pico 2 W y reúne en un solo cartucho el lector de SD, Wi-Fi y un reloj por Internet.

Está pensado para que se pueda armar en casa. Todos los integrados son THT y se consiguen en cualquier casa de electrónica — un ATmega328P, una EEPROM y tres chips de la serie 74. Sin GAL, sin CPLD, sin nada que haya que programar con herramientas raras.

  • Prototipo · rev1
  • MSX1 en adelante
  • Componentes THT
  • Área de experimentación
  • Licencia MIT
Render de la cara superior del PCB del cartucho MSX-SDF-1

Cara superior de la rev1, generada a partir de los Gerbers del repositorio.

Antes que nada

Esto es un prototipo. Todavía no armes uno.

La rev1 de la placa está fabricada y tiene errores conocidos. Funciona, pero sólo después de cinco correcciones a mano: dos cortes de pista, un 74LS03 agregado al aire con un par de resistencias, algunos cables, y cambiar tres integrados del zócalo por su versión HCT. No la recomiendo salvo que quieras meterte en eso a sabiendas, con el documento de correcciones al lado.

La rev2 va a traer la mayoría de esos problemas resueltos de fábrica. Si lo que querés es una placa para armar y usar, esperala.

El detalle, en el repositorio

El kit

Menos un periférico terminado. Más un kit de desarrollo.

Lo que hay en el cartucho es un microcontrolador asomado al bus del MSX por dos puertos de I/O, una EEPROM de 64 KB que el Z80 ve completa en el slot —regrabable con un adaptador, para que cada perfil ponga ahí sus rutinas—, y un protocolo byte a byte entre los dos. Nada de eso es específico de un periférico: es la base sobre la que se monta cualquiera.

Cambiando la ROM y el firmware, y dejando el resto intacto —el mismo decodificador, el mismo handshake, el mismo formato de comando y respuesta— la misma placa puede ser otra cosa. Un puerto serie. Una interfaz de sensores. Un puente hacia un micro con WiFi. Cada uso es un perfil: su firmware, su ROM, y lo que necesite en hardware.

Por eso media placa es un área de islas perforadas. No es relleno ni espacio sobrante: es donde se arma lo que cada perfil necesite, colgado del I²C y del SPI que ya salen por el header. El ATmega no tiene que traer la periferia adentro — tiene que saber hablarle.

Y los perfiles se combinan o se quedan solos. Un armado sin tarjeta SD no es una versión incompleta: es otro producto. Se puede poblar sólo lo que hace falta para un RS-232, con su propia ROM y sin una línea de código de disco.

ejemplo

Lector de SD

El primer proyecto de ejemplo: imágenes .DSK desde la tarjeta, y el MSX convencido de que tiene disquetera. Tiene su propia página.

ejemplo

Reloj

El segundo ejemplo, y el primer periférico por I²C: un DS1307 con pila, y MSX-DOS arranca sabiendo la fecha. Sensores, memorias y expansores entran igual, sin tocar el diseño. Tiene su propia página.

perfil

Puerto serie RS-232

En el micro no queda UART libre, y no hace falta: un UART por I²C más el conversor de niveles se arman en el área universal. El firmware sólo agrega los comandos.

perfil

Puente a un micro con WiFi

Un ESP32 en el área universal, enlazado por SPI o I²C. Es el camino más corto de un MSX a una red moderna.

ejemplo

SDF-Pico

El tercer ejemplo, y el primero que cambia el microcontrolador: una Raspberry Pi Pico 2 W en lugar del ATmega, sin /WAIT. Reúne el lector de SD, una conexión Wi-Fi que se configura desde el MSX y un reloj que toma la hora de Internet. Tiene su propia página.

Todo esto es dirección de diseño, no funcionalidad existente. La placa permite estos usos; todavía no los tiene. Lo probado hoy es el lector de SD y el reloj que se le suma.

El header H1

El header de diez pines es por donde el kit sale al área universal: lleva el bus SPI completo, el I²C del ATmega y dos GPIO libres. El módulo SD del ejemplo se enchufa acá, pero el hardware para todo lo de arriba ya está puesto y esperando firmware.

En la rev1 el header no tiene serigrafía. Este es el pinout que sale del netlist.

Pin Señal Uso
1VCCAlimentación · 5 V
2SCKReloj de SPI
3MISOSPI · entrada de datos
4MOSISPI · salida de datos
5CSChip select de SPI · la SD, en el ejemplo
6PB1GPIO libre
7PB0GPIO libre
8SDAI²C · datos
9SCLI²C · reloj
10GNDMasa

Estado

Dónde está el proyecto

El hardware de la placa y el proyecto de ejemplo completo —el driver de disco en Z80 y el firmware del micro— están en el repositorio, junto con el esquemático, la lista de componentes y las correcciones de la rev1. Ahí está el detalle técnico y todo lo que hace falta para reproducirla.

Hardware
Rev1 fabricada, con errores conocidos y cinco correcciones a mano documentadas, más una sexta a probar. La rev2 los va a traer resueltos de fábrica.
Ejemplo: lector de SD
Lectura y escritura de sectores andando. La imagen de cada unidad se elige desde BASIC con CALL SDFMOUNT, y queda guardada al apagar.
Ejemplo: reloj
Un DS1307 por I²C: MSX-DOS arranca con fecha y hora, y el BASIC la lee y la pone con CALL RTC y OPEN "RTC:".
Ejemplo: SDF-Pico
Con una Pico 2 W en lugar del ATmega: el lector de SD, el Wi-Fi configurado con CALL WIFI y la hora de Internet, probados en una DPC-200.
Alcance
Lo probado son los tres proyectos de ejemplo: el lector de SD, el reloj que se le suma y el SDF-Pico. Los otros perfiles, el resto de los comandos de BASIC para periferia y el bootloader son una dirección de diseño, no funcionalidad existente.