SFD-700 mkII Guide Technique

English

SFD-700 mkII Guide Technique

Ce guide documente l'architecture materielle du SFD-700 mkII, les blocs fonctionnels CPLD, la carte de registres I/O, la carte memoire et les procedures de compilation et de programmation. Il est destine aux utilisateurs qui souhaitent comprendre le fonctionnement de la carte, diagnostiquer au niveau materiel, modifier le firmware ou construire la carte a partir des fichiers source fournis.
Pour la configuration et l'installation par l'utilisateur final, consultez le Manuel Utilisateur. Pour les revues de code source VHDL et le developpement du firmware, consultez le Guide du Developpeur.

Architecture Systeme

Le SFD-700 mkII est une carte d'extension connectee au bus. Elle se place sur le bus d'adresses, de donnees et de controle Z80 de l'ordinateur hote Sharp MZ et se presente comme un ensemble de ressources mappees en memoire et en I/O. L'intelligence centrale est un CPLD qui decode chaque cycle de bus et achemine les signaux de maniere appropriee.

Diagramme de Blocs Systeme
┌──────────────────────────────────────────────────────────────────┐
│                    SFD-700 mkII v1.2 PCB                         │
│                                                                  │
│  Host Z80 Bus (A[15:0], D[7:0], MREQ, IORQ, RD, WR, RESET)     │
│  ────────────────────────────┬───────────────────────────────    │
│                              │                                   │
│              ┌───────────────┴───────────────┐                  │
│              │     EPM7128SLC84-15 CPLD       │                  │
│              │                               │                  │
│              │  • I/O address decode          │                  │
│              │  • Memory address decode       ├──► ROM_CSn       │
│              │  • ROM/RAM page registers      ├──► RAM_CSn       │
│              │  • MZ-700/1500 mem mgmt        ├──► ROM_A10       │
│              │  • Drive/motor/side/dden regs  ├──► RAM_A10       │
│              │  • Data bus inversion (ID bus) ├──► FDCn          │
│              │  • Clock divide (16→8 MHz)     ├──► CLK_FDC       │
│              │  • Interrupt gating            ├──► DRVSAn/Bn/Cn/Dn│
│              │  • Mode latch (from jumper)    ├──► MOTOR / SIDE1 │
│              └──────────────┬────────────────┘   DDENn          │
│                             │                                    │
│            ┌────────────────┼────────────────┐                  │
│            │                │                │                  │
│     ┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐          │
│     │  WD1773 FDC │  │ Flash ROM   │  │  SRAM       │          │
│     │  (inverted  │  │ 512KB       │  │  32KB       │          │
│     │   data bus) │  │ (AFI + RFS) │  │ (workspace) │          │
│     └──────┬──────┘  └─────────────┘  └─────────────┘          │
│            │                                                     │
│     ┌──────┴──────────────────────────┐                         │
│     │    34-pin floppy connector J3   │                         │
│     └──────────────────────────────── ┘                         │
│                  │                                               │
│           Floppy Drives A–D                                      │
└──────────────────────────────────────────────────────────────────┘

Historique des Revisions PCB

Version Logique Programmable Statut Notes
v1.0 Deux Lattice GALs (GAL26CV12 + GAL16V8) Reference uniquement Fonctionnel sur MZ-700 dans MZ-1U06.
v1.1 Deux Lattice GALs (GAL26CV12 + GAL16V8) Reference uniquement Corrections PCB mineures.
v1.2 Seul Altera EPM7128SLC84-15 CPLD Actuel – recommande Remplace les deux GALs. Gestion memoire MZ-700/MZ-1500 complete et pagination ROM/RAM independante.

Circuits Integres Cles

EPM7128SLC84-15 -- CPLD (v1.2)
L'Altera MAX7000S EPM7128SLC84-15 est un CPLD base EEPROM dans un boitier PLCC 84 broches. Caracteristiques cles :
  • 128 macrocellules -- 72 des 128 sont utilisees par cette conception.
  • 15 ns delai de propagation maximal
  • Entrees tolerantes 5V -- compatible directement avec le bus Sharp MZ 5V.
  • Stockage EEPROM -- l'etat programme est retenu indefiniment sans alimentation.
  • Programmable in-system via JTAG
  • 68 broches I/O utilisateur -- 65 des 68 sont utilisees (96%).

WD1773 -- Controleur de Disquette
Le Western Digital WD1773 est un controleur de disquette monopuce. Caracteristiques cles pour cette conception :
  • Bus de donnees inverse -- le CPLD gere cela de maniere transparente via un bus de donnees inverse dedie (ID[7:0]).
  • DRQ (Data Request) -- sur le MZ-80A (MODE 0), le CPLD route DRQ vers le bit d'adresse A10 de la Flash ROM.
  • INTRQ (Interrupt Request) -- route vers la ligne INT du Z80 uniquement lorsqu'active par ecriture sur le port 0xDF.
  • Horloge 8 MHz requise -- le CPLD la genere par division de l'oscillateur 16 MHz par deux.

SST39SF040 (ou compatible) -- Flash ROM 512 Ko
La Flash ROM stocke le firmware de demarrage machine (AFI ROM) et le ROM Filing System. Elle est organisee en pages de 4 Ko, adressables via les deux fenetres memoire paginees du CPLD (EXXX et FXXX).

Architecture d'Horloge

Un oscillateur a quartz 16 MHz (X1) fournit l'horloge principale. A l'interieur du CPLD, une bascule a division par deux produit une horloge 8 MHz (CLK_8Mi) pour le WD1773. Tous les processus registres dans le CPLD sont cadences par l'horloge 16 MHz.

Decodage d'Adresse I/O

Le CPLD surveille les lignes IORQn, RDn, WRn et A[7:0] du Z80 et genere des signaux de selection internes. Tout le decodage est purement combinatoire. Trois blocs d'adresses sont decodes :
  • 0xD8-0xDB -- Registres FDC WD1773.
  • 0xDC-0xDF -- Registres de controle FDC.
  • 0x60-0x63 -- Registres de pagination ROM/RAM.
Sur les hotes MZ-700 et MZ-1500 (MODEs 1 et 4), un quatrieme bloc est egalement surveille :
  • 0xE0-0xE6 -- Ports de gestion memoire de l'hote.

Decodage d'Adresse Memoire

Le CPLD surveille egalement les cycles memoire Z80 et genere des sorties chip-select pour la Flash ROM et la SRAM :
  • Fenetre EXXX (E300h-EFFFh)
  • Fenetre FXXX (F000h-FFFFh)

Inversion du Bus de Donnees

Le WD1773 utilise une convention historique ou tous les bits du bus de donnees sont inverses. Le CPLD gere cela en ligne via deux bus bidirectionnels 8 bits : Z80_DATA[7:0] (non inverse) et ID[7:0] (inverse, connecte au WD1773).

Pagination ROM / RAM

Fenetre Plage d’adresses Registre de page (port I/O) Taille de page Stockage max
EXXX E300h-EFFFh 0x60 (D7=selection ROM/RAM, bits [6:0]=page) 4 Ko 128 x 4 Ko = 512 Ko
FXXX F000h-FFFFh 0x61 (D7=selection ROM/RAM, bits [6:0]=page) 4 Ko 128 x 4 Ko = 512 Ko

Gestion Memoire MZ-700 / MZ-1500

Port Action Effet sur SFD-700 mkII
0xE1 L’hote mappe la DRAM sur D000h-FFFFh Active REG_ROMDIS – ROM/RAM SFD-700 desactivee
0xE3 L’hote mappe les I/O mappees en memoire Efface REG_ROMDIS – ROM/RAM SFD-700 reactivee
0xE4 L’hote mappe ROM moniteur + DRAM Efface REG_ROMDIS – ROM/RAM SFD-700 reactivee
0xE5 L’hote inhibe tout acces D000h-FFFFh Active REG_ROMINH – ROM/RAM SFD-700 desactivee
0xE6 Retour au mappage par defaut Efface REG_ROMINH – ROM/RAM SFD-700 reactivee

Astuce DRQ-vers-Ligne-d'Adresse du MZ-80A

Le Sharp MZ-80A fait fonctionner son CPU Z80 a 2 MHz. La solution de Sharp (adoptee ici) est de connecter la sortie DRQ du WD1773 au bit d'adresse A10 de la Flash ROM. La ROM de demarrage contient deux copies de la routine de lecture de secteur dans des segments de 1 Ko alternes. Le CPLD implemente ceci en MODE 0 uniquement : ROM_A10 <= '1' when (MODE = MZ-80A) and DRQ = '1', else Z80_ADDR(10).

Controle d'Interruption

Le WD1773 active INTRQ lorsqu'une commande est terminee. Le CPLD controle ce signal via un bit d'activation registre (REG_INT) : ecriture sur 0xDF active le routage INTRQ vers Z80 INT; lecture depuis 0xDF le desactive.

Carte de Registres I/O

Port R/W Registre Description
0xD8 R/W WD1773 Status/Command Lecture : registre d’etat. Ecriture : registre de commande.
0xD9 R/W WD1773 Track Registre de numero de piste courant.
0xDA R/W WD1773 Sector Registre de numero de secteur courant.
0xDB R/W WD1773 Data Registre de donnees.
0xDC W Drive & Motor Bits [2:0]: selection lecteur (4=A, 5=B, 6=C, 7=D, 0=aucun). Bit [7]: activation moteur.
0xDD W Head Side D0=0 -> cote 1, D0=1 -> cote 0
0xDE W Data Density D0=0 -> double densite (MFM), D0=1 -> simple densite (FM)
0xDF W/R Interrupt Enable Ecriture : activer WD1773 INTRQ -> Z80 INT. Lecture : desactiver.
0x60 R/W EXXX Page D7 -> selection stockage (0=Flash ROM, 1=SRAM). Bits [6:0] -> adresse de page pour fenetre E300h-EFFFh.
0x61 R/W FXXX Page D7 -> selection stockage (0=Flash ROM, 1=SRAM). Bits [6:0] -> adresse de page pour fenetre F000h-FFFFh.
0x63 R Mode Register Renvoie la valeur du cavalier MODE verrouille (0-6)

Carte Memoire

Fenetre Plage d’adresses Z80 Registre de page Taille effective Notes
EXXX E300h-EFFFh 0x60 3,75 Ko par page E000h-E2FFh est I/O mappee en memoire MZ-700/MZ-1500
FXXX F000h-FFFFh 0x61 4 Ko par page Fenetre complete. Page 0 = ROM AFI MZ-80A. Page 1 = ROM AFI MZ-700.

Configuration et build automatises

La logique CUPL/GAL historique (v1.0 / v1.1) et le bitstream CPLD/VHDL actuel (v1.2) peuvent tous deux etre compiles a partir d'un unique script de configuration autonome propre a votre plateforme. Le script installe les chaines d'outils requises — DOSBox pour la logique CUPL et Altera Quartus II 13.0sp1 pour le CPLD — clone le depot et peut lancer l'un ou l'autre des builds, voire les deux, le tout de maniere interactive avec des valeurs par defaut sensees que vous pouvez accepter en appuyant sur Entree. C'est la methode de compilation recommandee ; les sections manuelles GAL et CPLD qui suivent sont conservees comme reference detaillee pour les utilisateurs avances et les rebuilds partiels.

macOS / Linux — setup_SFD700.sh

chmod +x setup_SFD700.sh
./setup_SFD700.sh
Ceci installe git, curl/wget et DOSBox (pour la chaine d'outils CUPL) et configure Quartus II 13.0sp1 pour le CPLD. Sous Linux, Quartus est installe nativement via une installation sans surveillance dans ~/altera/13.0sp1 (~1,6 Go de telechargement). Sous macOS — ou aucun Quartus natif n'existe — la chaine d'outils CPLD s'execute a partir d'une image Docker (sfd700-quartus:13.0sp1). Dans les deux cas, le paquet de la famille de composants MAX7000S est recupere automatiquement.

Windows 10 / 11 — setup_SFD700_windows_native.ps1 (Git Bash natif, sans WSL). Depuis PowerShell :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_SFD700_windows_native.ps1
Ceci utilise winget pour installer Git for Windows (qui fournit bash) et DOSBox, puis installe Quartus II 13.0sp1 nativement dans C:\altera\13.0sp1 (telechargement en flux, reprenable) avec le paquet MAX7000S. Les scripts de build s'executent sous Git Bash. Pour utiliser Docker pour la chaine d'outils CPLD au lieu du Quartus natif, definissez $env:SFD700_CPLD_METHOD = "docker" avant de lancer le script.

Questions posees par la configuration, et que faire. Chaque invite a une valeur par defaut securisee entre crochets — la lettre majuscule est la valeur par defaut, donc appuyer sur Entree l’accepte.

macOS / Linux (setup_SFD700.sh) :

Invite Defaut Que faire
Install now? [Y/n] (outils de base + DOSBox) Oui Entree — installe git, curl/wget et DOSBox ; peut demander sudo.
Repo URL [https://git.eaw.app/eaw/SFD700.git] depot public Entree pour le depot public, ou collez une autre URL (par ex. privee).
Install directory [~/SFD700] ~/SFD700 Entree pour ~/SFD700, ou saisissez un chemin.
Choose [N/d] (chaine d’outils CPLD Linux) Natif N — Quartus natif (recommande sous Linux) ; d pour Docker.
Build the CUPL/GAL logic now (./build_cupl.sh)? [Y/n] Oui Entree pour compiler la logique GAL immediatement.
Build the CPLD/VHDL bitstream now (./build_cpld.sh)? [Y/n] Oui Entree pour compiler le bitstream CPLD immediatement.

Windows (setup_SFD700_windows_native.ps1) :

Invite Defaut Que faire
Repo URL [https://git.eaw.app/eaw/SFD700.git] depot public Entree pour le depot public, ou collez une autre URL.
SFD700 checkout directory [%USERPROFILE%\SFD700] %USERPROFILE%\SFD700 Entree pour le defaut, ou saisissez un chemin.
Install Quartus / MAX7000S support now? [Y/n] Oui Entree pour installer Quartus II 13.0sp1 et le paquet MAX7000S.
Build the CUPL/GAL logic now (build_cupl.sh)? [Y/n] Oui Entree pour compiler la logique GAL immediatement.
Build the CPLD/VHDL bitstream now (build_cpld.sh)? [Y/n] Oui Entree pour compiler le bitstream CPLD immediatement.
Sortie et programmation. Le build CUPL ecrit les fichiers JEDEC dans CUPL/SFD700_1.JED et SFD700_2.JED — qui programment un GAL avec un programmateur TL866 / XGecu. Le build CPLD ecrit CPLD/v1.2/build/output_files/sfd700.pof, qui programme l'EPM7128 via JTAG a l'aide d'un USB-Blaster :
quartus_pgm -c "USB-Blaster" -m JTAG \
  -o "p;CPLD/v1.2/build/output_files/sfd700.pof"
Voir Compilation du Bitstream CPLD et Programmation du CPLD ci-dessous pour les etapes manuelles sous-jacentes.

Compilation du Bitstream CPLD

Le bitstream CPLD est compile avec Quartus II 13.0.1 SP1 Web Edition. Cette version specifique est requise car les versions ulterieures ont supprime le support de la famille MAX7000S.
quartus_map --read_settings_files=on sfd700   # Analyse & Synthese
quartus_fit --read_settings_files=on sfd700   # Fitter (Placement & Routage)
quartus_asm --read_settings_files=on sfd700   # Assembleur -- genere sfd700.pof
quartus_sta sfd700                            # Analyse de timing (optionnel)

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

Sites de Reference

Ressource Lien
Page projet SFD-700 mkII /fr/sfd700/
Manuel Utilisateur SFD-700 mkII /fr/sfd700-usermanual/
Guide du Developpeur SFD-700 mkII /fr/sfd700-developersguide/
SFD-800 (carte compagnon MZ-800) /sfd800/
Altera MAX7000S Intel FPGA
Quartus II 13.0.1 SP1 Web Edition Intel FPGA Software Archive