SFD-700 mkII Guida Tecnica
SFD-700 mkII Guida Tecnica
Questa guida documenta l'architettura hardware dell'SFD-700 mkII, i blocchi funzionali CPLD, la mappa dei registri I/O, la mappa di memoria e le procedure di compilazione e programmazione. E destinata agli utenti che desiderano comprendere il funzionamento della scheda, diagnosticare a livello hardware, modificare il firmware o costruire la scheda dai file sorgente forniti.
Per la configurazione e l'installazione da parte dell'utente finale, consultare il Manuale Utente. Per le revisioni del codice sorgente VHDL e lo sviluppo del firmware, consultare la Guida dello Sviluppatore.
Architettura di Sistema
L'SFD-700 mkII e una scheda di espansione collegata al bus. Si posiziona sul bus di indirizzi, dati e controllo Z80 del computer host Sharp MZ e si presenta come un insieme di risorse mappate in memoria e in I/O. L'intelligenza centrale e un CPLD che decodifica ogni ciclo di bus e instrada i segnali in modo appropriato.
Diagramma a Blocchi 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 │ └──────────────────────────────────────────────────────────────────┘
Cronologia Revisioni PCB
| Versione | Logica Programmabile | Stato | Note |
|---|---|---|---|
| v1.0 | Due Lattice GAL (GAL26CV12 + GAL16V8) | Solo riferimento | Funzionante su MZ-700 dentro MZ-1U06. |
| v1.1 | Due Lattice GAL (GAL26CV12 + GAL16V8) | Solo riferimento | Correzioni PCB minori. |
| v1.2 | Singolo Altera EPM7128SLC84-15 CPLD | Attuale – raccomandato | Sostituisce entrambi i GAL. Gestione memoria MZ-700/MZ-1500 completa e paginazione ROM/RAM indipendente. |
Circuiti Integrati Principali
EPM7128SLC84-15 -- CPLD (v1.2)
L'Altera MAX7000S EPM7128SLC84-15 e un CPLD basato su EEPROM in package PLCC a 84 pin. Caratteristiche principali: 128 macrocelle (72 utilizzate), 15 ns ritardo di propagazione massimo, ingressi tolleranti 5V, programmabile in-system via JTAG, 68 pin I/O utente (65 utilizzati, 96%).
WD1773 -- Controller Floppy Disk
Il WD1773 richiede un bus dati invertito -- il CPLD gestisce questo in modo trasparente. Sul MZ-80A (MODE 0) il CPLD instrada DRQ sul bit di indirizzo A10 della Flash ROM. Il WD1773 richiede un clock da 8 MHz generato dal CPLD dividendo l'oscillatore da 16 MHz per due.
Decodifica Indirizzi I/O
Il CPLD monitora le linee IORQn, RDn, WRn e A[7:0] dello Z80 e genera segnali di selezione interni. Tutta la decodifica e puramente combinatoria. Tre blocchi di indirizzi vengono decodificati: 0xD8-0xDB (registri FDC WD1773), 0xDC-0xDF (registri di controllo FDC), 0x60-0x63 (registri di paginazione ROM/RAM). Sugli host MZ-700 e MZ-1500, viene monitorato anche 0xE0-0xE6 (porte di gestione memoria dell'host).
Paginazione ROM / RAM
| Finestra | Intervallo indirizzi | Registro pagina (porta I/O) | Dimensione pagina | Memoria max |
|---|---|---|---|---|
| EXXX | E300h-EFFFh | 0x60 (D7=selezione ROM/RAM, bit [6:0]=pagina) | 4 KB | 128 x 4 KB = 512 KB |
| FXXX | F000h-FFFFh | 0x61 (D7=selezione ROM/RAM, bit [6:0]=pagina) | 4 KB | 128 x 4 KB = 512 KB |
Gestione Memoria MZ-700 / MZ-1500
| Porta | Azione | Effetto su SFD-700 mkII |
|---|---|---|
| 0xE1 | L’host mappa la DRAM su D000h-FFFFh | Imposta REG_ROMDIS – ROM/RAM SFD-700 disabilitata |
| 0xE3 | L’host mappa I/O mappato in memoria | Cancella REG_ROMDIS – ROM/RAM SFD-700 riabilitata |
| 0xE4 | L’host mappa ROM monitor + DRAM | Cancella REG_ROMDIS – ROM/RAM SFD-700 riabilitata |
| 0xE5 | L’host inibisce tutto l’accesso D000h-FFFFh | Imposta REG_ROMINH – ROM/RAM SFD-700 disabilitata |
| 0xE6 | Ritorno alla mappatura predefinita | Cancella REG_ROMINH – ROM/RAM SFD-700 riabilitata |
Mappa Registri I/O
| Porta | R/W | Registro | Descrizione |
|---|---|---|---|
| 0xD8 | R/W | WD1773 Status/Command | Lettura: registro di stato. Scrittura: registro comandi. |
| 0xD9 | R/W | WD1773 Track | Registro numero traccia corrente. |
| 0xDA | R/W | WD1773 Sector | Registro numero settore corrente. |
| 0xDB | R/W | WD1773 Data | Registro dati. |
| 0xDC | W | Drive & Motor | Bit [2:0]: selezione unita (4=A, 5=B, 6=C, 7=D, 0=nessuna). Bit [7]: abilitazione motore. |
| 0xDD | W | Head Side | D0=0 -> lato 1, D0=1 -> lato 0 |
| 0xDE | W | Data Density | D0=0 -> doppia densita (MFM), D0=1 -> singola densita (FM) |
| 0xDF | W/R | Interrupt Enable | Scrittura: abilita WD1773 INTRQ -> Z80 INT. Lettura: disabilita. |
| 0x60 | R/W | EXXX Page | D7 -> selezione memoria. Bit [6:0] -> indirizzo pagina per finestra E300h-EFFFh. |
| 0x61 | R/W | FXXX Page | D7 -> selezione memoria. Bit [6:0] -> indirizzo pagina per finestra F000h-FFFFh. |
| 0x63 | R | Mode Register | Legge il valore del jumper MODE memorizzato (0-6) |
Setup e build automatizzati
Sia la logica CUPL/GAL legacy (v1.0 / v1.1) che il bitstream CPLD/VHDL attuale (v1.2) possono essere compilati da un unico script di setup autonomo per la propria piattaforma. Lo script installa le toolchain necessarie — DOSBox per la logica CUPL e Altera Quartus II 13.0sp1 per il CPLD — clona il repository e puo eseguire una o entrambe le build, il tutto in modo interattivo con valori predefiniti ragionevoli che potete accettare premendo Invio. Questo e il modo consigliato per compilare; le sezioni manuali GAL e CPLD che seguono sono mantenute come dettaglio per utenti avanzati e ricostruzioni parziali.
macOS / Linux — setup_SFD700.sh
chmod +x setup_SFD700.sh
./setup_SFD700.sh
Questo installa
git, curl/wget e DOSBox (per la toolchain CUPL), e configura Quartus II 13.0sp1 per il CPLD. Su Linux, Quartus viene installato nativamente tramite un'installazione automatica in ~/altera/13.0sp1 (~1,6 GB di download). Su macOS — dove non esiste un Quartus nativo — la toolchain CPLD viene eseguita da un'immagine Docker (sfd700-quartus:13.0sp1). In entrambi i casi il package della famiglia di dispositivi MAX7000S viene recuperato automaticamente.
Windows 10 / 11 — setup_SFD700_windows_native.ps1 (Git Bash nativo, senza WSL). Da PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_SFD700_windows_native.ps1
Questo usa winget per installare Git for Windows (che fornisce
bash) e DOSBox, quindi installa Quartus II 13.0sp1 nativamente in C:\altera\13.0sp1 (download in streaming e ripristinabile) insieme al package MAX7000S. Gli script di build vengono eseguiti sotto Git Bash. Per usare Docker per la toolchain CPLD invece di Quartus nativo, impostare $env:SFD700_CPLD_METHOD = "docker" prima di eseguire lo script.
Domande poste dal setup, e cosa fare. Ogni richiesta ha un valore predefinito sicuro tra parentesi — la lettera maiuscola e il valore predefinito, quindi premendo Invio lo si accetta.
macOS / Linux (setup_SFD700.sh):
| Richiesta | Predefinito | Cosa fare |
|---|---|---|
Install now? [Y/n] (strumenti base + DOSBox) |
Si | Invio — installa git, curl/wget e DOSBox; potrebbe richiedere sudo. |
Repo URL [https://git.eaw.app/eaw/SFD700.git] |
repo pubblico | Invio per il repo pubblico, oppure incollare un URL diverso (ad es. privato). |
Install directory [~/SFD700] |
~/SFD700 |
Invio per ~/SFD700, oppure digitare un percorso. |
Choose [N/d] (toolchain CPLD su Linux) |
Nativa | N — Quartus nativo (consigliato su Linux); d per Docker. |
Build the CUPL/GAL logic now (./build_cupl.sh)? [Y/n] |
Si | Invio per compilare subito la logica GAL. |
Build the CPLD/VHDL bitstream now (./build_cpld.sh)? [Y/n] |
Si | Invio per compilare subito il bitstream CPLD. |
Windows (setup_SFD700_windows_native.ps1):
| Richiesta | Predefinito | Cosa fare |
|---|---|---|
Repo URL [https://git.eaw.app/eaw/SFD700.git] |
repo pubblico | Invio per il repo pubblico, oppure incollare un URL diverso. |
SFD700 checkout directory [%USERPROFILE%\SFD700] |
%USERPROFILE%\SFD700 |
Invio per il valore predefinito, oppure digitare un percorso. |
Install Quartus / MAX7000S support now? [Y/n] |
Si | Invio per installare Quartus II 13.0sp1 e il package MAX7000S. |
Build the CUPL/GAL logic now (build_cupl.sh)? [Y/n] |
Si | Invio per compilare subito la logica GAL. |
Build the CPLD/VHDL bitstream now (build_cpld.sh)? [Y/n] |
Si | Invio per compilare subito il bitstream CPLD. |
Output e programmazione. La build CUPL scrive i file JEDEC in
CUPL/ — SFD700_1.JED e SFD700_2.JED — che programmano un GAL con un programmatore TL866 / XGecu. La build CPLD scrive CPLD/v1.2/build/output_files/sfd700.pof, che programma l'EPM7128 via JTAG usando un USB-Blaster:
quartus_pgm -c "USB-Blaster" -m JTAG \ -o "p;CPLD/v1.2/build/output_files/sfd700.pof"
Compilazione del Bitstream CPLD
quartus_map --read_settings_files=on sfd700 # Analisi & Sintesi quartus_fit --read_settings_files=on sfd700 # Fitter (Posizionamento & Routing) quartus_asm --read_settings_files=on sfd700 # Assemblatore -- genera sfd700.pof quartus_sta sfd700 # Analisi temporale (opzionale)Programmazione del CPLD
quartus_pgm -c "USB-Blaster" -m JTAG \ -o "p;CPLD/v1.2/build/output_files/sfd700.pof"
Siti di Riferimento
| Risorsa | Link |
|---|---|
| Pagina progetto SFD-700 mkII | /it/sfd700/ |
| Manuale Utente SFD-700 mkII | /it/sfd700-usermanual/ |
| Guida dello Sviluppatore SFD-700 mkII | /it/sfd700-developersguide/ |
| SFD-800 (scheda compagna MZ-800) | /sfd800/ |