SFD-700 mkII Guia Tecnica

English

SFD-700 mkII Guia Tecnica

Esta guia documenta la arquitectura hardware del SFD-700 mkII, los bloques funcionales CPLD, el mapa de registros I/O, el mapa de memoria y los procedimientos de compilacion y programacion. Esta destinada a usuarios que desean comprender como funciona la tarjeta, diagnosticar a nivel de hardware, modificar el firmware o construir la tarjeta a partir de los archivos fuente proporcionados.
Para la configuracion e instalacion del usuario final, consulte el Manual de Usuario. Para revisiones del codigo fuente VHDL y desarrollo de firmware, consulte la Guia del Desarrollador.

Arquitectura del Sistema

El SFD-700 mkII es una tarjeta de expansion conectada al bus. Se ubica en el bus de direcciones, datos y control Z80 de la computadora host Sharp MZ y se presenta como un conjunto de recursos mapeados en memoria y en I/O. La inteligencia central es un CPLD que decodifica cada ciclo de bus y enruta las senales apropiadamente.

Diagrama de Bloques del Sistema
┌──────────────────────────────────────────────────────────────────┐
│                    SFD-700 mkII v1.2 PCB                         │
│                                                                  │
│  Host Z80 Bus (A[15:0], D[7:0], MREQ, IORQ, RD, WR, RESET)     │
│  ────────────────────────────┬───────────────────────────────    │
│                              │                                   │
│              ┌───────────────┴───────────────┐                  │
│              │     EPM7128SLC84-15 CPLD       │                  │
│              └──────────────┬────────────────┘                  │
│            ┌────────────────┼────────────────┐                  │
│     ┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐          │
│     │  WD1773 FDC │  │ Flash ROM   │  │  SRAM       │          │
│     │  (inverted  │  │ 512KB       │  │  32KB       │          │
│     │   data bus) │  │ (AFI + RFS) │  │ (workspace) │          │
│     └──────┬──────┘  └─────────────┘  └─────────────┘          │
│     ┌──────┴──────────────────────────┐                         │
│     │    34-pin floppy connector J3   │                         │
│     └──────────────────────────────── ┘                         │
│           Floppy Drives A–D                                      │
└──────────────────────────────────────────────────────────────────┘

Historial de Revisiones PCB

Version Logica Programable Estado Notas
v1.0 Dos Lattice GALs (GAL26CV12 + GAL16V8) Solo referencia Funcional en MZ-700 dentro de MZ-1U06.
v1.1 Dos Lattice GALs (GAL26CV12 + GAL16V8) Solo referencia Correcciones menores de PCB.
v1.2 Unico Altera EPM7128SLC84-15 CPLD Actual – recomendado Reemplaza ambos GALs. Gestion de memoria MZ-700/MZ-1500 completa y paginacion ROM/RAM independiente.

Circuitos Integrados Clave

EPM7128SLC84-15 -- CPLD (v1.2)
El Altera MAX7000S EPM7128SLC84-15 es un CPLD basado en EEPROM en encapsulado PLCC de 84 pines. Caracteristicas clave: 128 macroceldas (72 usadas), 15 ns retardo de propagacion maximo, entradas tolerantes a 5V, programable in-system via JTAG, 68 pines I/O de usuario (65 usados, 96%).

WD1773 -- Controlador de Disquete
El WD1773 requiere un bus de datos invertido -- el CPLD lo maneja de forma transparente. En el MZ-80A (MODE 0) el CPLD enruta DRQ al bit de direccion A10 de la Flash ROM. El WD1773 requiere un reloj de 8 MHz generado por el CPLD dividiendo el oscilador de 16 MHz por dos.

Decodificacion de Direcciones I/O

El CPLD monitorea las lineas IORQn, RDn, WRn y A[7:0] del Z80 y genera senales de seleccion internas. Toda la decodificacion es puramente combinatoria. Tres bloques de direcciones se decodifican: 0xD8-0xDB (registros FDC WD1773), 0xDC-0xDF (registros de control FDC), 0x60-0x63 (registros de paginacion ROM/RAM). En hosts MZ-700 y MZ-1500, tambien se monitorea 0xE0-0xE6 (puertos de gestion de memoria del host).

Paginacion ROM / RAM

Ventana Rango de direcciones Registro de pagina (puerto I/O) Tamano de pagina Almacenamiento max
EXXX E300h-EFFFh 0x60 (D7=seleccion ROM/RAM, bits [6:0]=pagina) 4 KB 128 x 4 KB = 512 KB
FXXX F000h-FFFFh 0x61 (D7=seleccion ROM/RAM, bits [6:0]=pagina) 4 KB 128 x 4 KB = 512 KB

Gestion de Memoria MZ-700 / MZ-1500

Puerto Accion Efecto en SFD-700 mkII
0xE1 El host mapea DRAM en D000h-FFFFh Establece REG_ROMDIS – ROM/RAM SFD-700 deshabilitada
0xE3 El host mapea I/O mapeada en memoria Borra REG_ROMDIS – ROM/RAM SFD-700 rehabilitada
0xE4 El host mapea ROM monitor + DRAM Borra REG_ROMDIS – ROM/RAM SFD-700 rehabilitada
0xE5 El host inhibe todo acceso D000h-FFFFh Establece REG_ROMINH – ROM/RAM SFD-700 deshabilitada
0xE6 Retorno al mapeo predeterminado Borra REG_ROMINH – ROM/RAM SFD-700 rehabilitada

Mapa de Registros I/O

Puerto R/W Registro Descripcion
0xD8 R/W WD1773 Status/Command Lectura: registro de estado. Escritura: registro de comandos.
0xD9 R/W WD1773 Track Registro de numero de pista actual.
0xDA R/W WD1773 Sector Registro de numero de sector actual.
0xDB R/W WD1773 Data Registro de datos.
0xDC W Drive & Motor Bits [2:0]: seleccion de unidad (4=A, 5=B, 6=C, 7=D, 0=ninguna). Bit [7]: habilitacion de motor.
0xDD W Head Side D0=0 -> lado 1, D0=1 -> lado 0
0xDE W Data Density D0=0 -> doble densidad (MFM), D0=1 -> densidad simple (FM)
0xDF W/R Interrupt Enable Escritura: habilitar WD1773 INTRQ -> Z80 INT. Lectura: deshabilitar.
0x60 R/W EXXX Page D7 -> seleccion almacenamiento. Bits [6:0] -> direccion pagina para ventana E300h-EFFFh.
0x61 R/W FXXX Page D7 -> seleccion almacenamiento. Bits [6:0] -> direccion pagina para ventana F000h-FFFFh.
0x63 R Mode Register Lee el valor del jumper MODE almacenado (0-6)

Instalacion y build automatizados

Tanto la logica heredada CUPL/GAL (v1.0 / v1.1) como el bitstream actual CPLD/VHDL (v1.2) pueden compilarse desde un unico script de instalacion autonomo para su plataforma. El script instala las cadenas de herramientas requeridas -- DOSBox para la logica CUPL y Altera Quartus II 13.0sp1 para el CPLD -- clona el repositorio y puede ejecutar uno o ambos builds, todo de forma interactiva con valores por defecto sensatos que puede aceptar pulsando Enter. Esta es la forma recomendada de compilar; las secciones manuales de GAL y CPLD que siguen se conservan como detalle para usuarios avanzados y recompilaciones parciales.

macOS / Linux — setup_SFD700.sh

chmod +x setup_SFD700.sh
./setup_SFD700.sh
Esto instala git, curl/wget y DOSBox (para la cadena de herramientas CUPL), y configura Quartus II 13.0sp1 para el CPLD. En Linux, Quartus se instala de forma nativa mediante una instalacion desatendida en ~/altera/13.0sp1 (descarga de ~1,6 GB). En macOS -- donde no existe Quartus nativo -- la cadena de herramientas CPLD se ejecuta desde una imagen Docker (sfd700-quartus:13.0sp1) en su lugar. En cualquier caso, el paquete de la familia de dispositivos MAX7000S se obtiene automaticamente.

Windows 10 / 11 — setup_SFD700_windows_native.ps1 (Git Bash nativo, sin WSL). Desde PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_SFD700_windows_native.ps1
Esto usa winget para instalar Git for Windows (que proporciona bash) y DOSBox, luego instala Quartus II 13.0sp1 de forma nativa en C:\altera\13.0sp1 (descarga en streaming y reanudable) junto con el paquete MAX7000S. Los scripts de build se ejecutan bajo Git Bash. Para usar Docker para la cadena de herramientas CPLD en lugar de Quartus nativo, defina $env:SFD700_CPLD_METHOD = "docker" antes de ejecutar el script.

Preguntas que hace el instalador, y que hacer. Cada solicitud tiene un valor por defecto seguro entre corchetes; la letra en mayuscula es el valor por defecto, asi que pulsar Enter lo acepta.

macOS / Linux (setup_SFD700.sh):

Solicitud Por defecto Que hacer
Install now? [Y/n] (herramientas base + DOSBox) Si Enter: instala git, curl/wget y DOSBox; puede pedir sudo.
Repo URL [https://git.eaw.app/eaw/SFD700.git] repo publico Enter para el repo publico, o pegue otra URL (p. ej. privada).
Install directory [~/SFD700] ~/SFD700 Enter para ~/SFD700, o escriba una ruta.
Choose [N/d] (cadena de herramientas CPLD en Linux) Nativo N: Quartus nativo (recomendado en Linux); d para Docker.
Build the CUPL/GAL logic now (./build_cupl.sh)? [Y/n] Si Enter para compilar la logica GAL de inmediato.
Build the CPLD/VHDL bitstream now (./build_cpld.sh)? [Y/n] Si Enter para compilar el bitstream CPLD de inmediato.

Windows (setup_SFD700_windows_native.ps1):

Solicitud Por defecto Que hacer
Repo URL [https://git.eaw.app/eaw/SFD700.git] repo publico Enter para el repo publico, o pegue otra URL.
SFD700 checkout directory [%USERPROFILE%\SFD700] %USERPROFILE%\SFD700 Enter para el valor por defecto, o escriba una ruta.
Install Quartus / MAX7000S support now? [Y/n] Si Enter para instalar Quartus II 13.0sp1 y el paquete MAX7000S.
Build the CUPL/GAL logic now (build_cupl.sh)? [Y/n] Si Enter para compilar la logica GAL de inmediato.
Build the CPLD/VHDL bitstream now (build_cpld.sh)? [Y/n] Si Enter para compilar el bitstream CPLD de inmediato.
Salida y programacion. El build CUPL escribe archivos JEDEC en CUPL/ -- SFD700_1.JED y SFD700_2.JED -- que programan un GAL con un programador TL866 / XGecu. El build CPLD escribe CPLD/v1.2/build/output_files/sfd700.pof, que programa el EPM7128 por JTAG usando un USB-Blaster:
quartus_pgm -c "USB-Blaster" -m JTAG \
  -o "p;CPLD/v1.2/build/output_files/sfd700.pof"
Vease Compilacion del Bitstream CPLD y Programacion del CPLD mas abajo para los pasos manuales subyacentes.

Compilacion del Bitstream CPLD

quartus_map --read_settings_files=on sfd700   # Analisis & Sintesis
quartus_fit --read_settings_files=on sfd700   # Fitter (Colocacion & Enrutamiento)
quartus_asm --read_settings_files=on sfd700   # Ensamblador -- genera sfd700.pof
quartus_sta sfd700                            # Analisis de temporizado (opcional)

Programacion del CPLD
quartus_pgm -c "USB-Blaster" -m JTAG \
  -o "p;CPLD/v1.2/build/output_files/sfd700.pof"

Sitios de Referencia

Recurso Enlace
Pagina del proyecto SFD-700 mkII /es/sfd700/
Manual de Usuario SFD-700 mkII /es/sfd700-usermanual/
Guia del Desarrollador SFD-700 mkII /es/sfd700-developersguide/
SFD-800 (tarjeta companera MZ-800) /sfd800/