SFD-700 mkII Guia Tecnica
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/ |