SFD-700 mkII Guida Tecnica

English

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/