SFD-700 mkII Guide Technique
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 :
WD1773 -- Controleur de Disquette
- 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%).
Le Western Digital WD1773 est un controleur de disquette monopuce. Caracteristiques cles pour cette conception :
SST39SF040 (ou compatible) -- Flash ROM 512 Ko
- 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.
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.
- 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 |