MZ-80A RomDisk — Guide Technique

Guide Technique du RomDisk

Ce guide documente la conception materielle du circuit imprime Sharp MZ-80A RomDisk, l'architecture memoire, les mecanismes de controle de banque, les options d'interface SPI, la disposition des modules logiciels, la conception du systeme de fichiers SD Card Filing System, l'implementation CP/M et le systeme de compilation complet. Il est destine aux utilisateurs qui souhaitent comprendre le fonctionnement du RomDisk au niveau systeme, compiler le firmware a partir du code source ou developper de nouveaux logiciels utilisant l'environnement ROM a banques.
Pour l'utilisation quotidienne et la reference des commandes du moniteur, consultez le Manuel Utilisateur RFS. Pour les explications du code source assembleur Z80, consultez le Guide du Developpeur RFS.

Versions Materielles

Le circuit imprime RomDisk est une carte fille pour le Sharp MZ-80A. Il se branche sur le connecteur d'extension du MZ-80A et utilise des supports rehausseurs pour intercepter les lignes de selection de puce du Monitor ROM (4 Ko a 0x0000-0x0FFF) et du User ROM (2 Ko a 0xE800-0xEFFF), remplacant les deux par de la Flash RAM paginee. Trois revisions materielles ont ete produites.

Version 1.1
La carte de production originale. Caracteristiques principales :
  • Une Flash RAM SST39SF040 de 512 Ko dans le support Monitor ROM (U1) -- fournit huit emplacements de banque de 4 Ko.
  • Une Flash RAM de 512 Ko dans le support User ROM (U4) -- fournit 256 emplacements de banque de deux kilooctets, bien que RFS n'utilise que les douze premiers.
  • Simple verrou de type D pour la selection de banque -- le registre de banque est accessible en permanence sans mecanisme de protection.
  • Acces a la carte SD via SPI logiciel bitbang a travers les broches du port parallele imprimante du Sharp MZ-80A. Cette methode est fonctionnelle mais lente par rapport au SPI materiel ulterieur.
Les cartes v1.1 utilisent le drapeau de compilation PP_SPI_ENA. Il n'y a pas de verrou code ; les registres de banque peuvent etre ecrits a tout moment.

Version 2.0
Une revision majeure ajoutant le SPI materiel, des emplacements Flash supplementaires, une SRAM optionnelle et un mecanisme de securite pour les registres de banque :
  • Verrou code -- un compteur ascendant 4 bits 74HCT191 controle la logique de decodage des registres de controle E/S. A la mise sous tension ou apres une lecture de reinitialisation, le compteur est a 0 et les registres de banque sont inaccessibles (les lectures de 0xEFF8-0xEFFF retournent les donnees Flash ROM normalement). Les registres de controle ne deviennent actifs qu'apres exactement 16 lectures sequentielles dans la plage 0xEFF8-0xEFFF qui incrementent le compteur jusqu'a sa sortie Terminal Count. Cela empeche les commutations de banque accidentelles lorsque du code Z80 accede a cette plage d'adresses pendant l'execution normale.
  • Circuit SPI materiel -- registre a decalage serie-parallele 74HCT595 (sortie MOSI/CLK) et registre a decalage parallele-serie 74HCT165 (entree MISO), cadences a 8 MHz par un oscillateur a quartz de 16 MHz. Support de carte SD monte directement sur le circuit imprime.
  • Deuxieme et troisieme emplacements Flash User ROM (U5 et U6) -- chacun un SST39SF040 supplementaire de 512 Ko. Les bits BK2A19/BK2A20 dans le registre BNKCTRL selectionnent lequel des trois circuits User ROM est actif.
  • SRAM optionnelle de 512 Ko -- AS6C4008, sur support. Destinee a une utilisation future comme espace de travail pagine supplementaire.
  • Le cavalier a souder JP6 selectionne si le circuit SPI materiel ou un circuit SPI logiciel bitbang est monte.
Bogue connu : Le Z80 effectue des cycles de rafraichissement DRAM en utilisant les broches de bus d'adresses A0-A7 (l'adresse de rafraichissement). Lorsque ces cycles generaient une adresse dans la plage 0xEFF8-0xEFFF, le compteur 74HCT191 s'incrementait de maniere intempestive, provoquant l'ouverture inattendue du verrou code et permettant des ecritures accidentelles dans les registres de banque.

Version 2.1 (Actuelle)
Une revision de correction ciblee traitant le probleme d'adresse de rafraichissement de la v2.0. Modifications par rapport a la v2.0 :
  • Porte ET a partir de diodes discretes (D1/D2) ajoutee a l'entree d'horloge du compteur. La porte combine le signal de decodage d'adresse avec le signal Z80 /MREQ, de sorte que seuls les vrais cycles de bus de lecture memoire (pas les cycles de rafraichissement) puissent incrementer le compteur 74HCT191. Les cycles de rafraichissement activent /RFSH et desactivent /MREQ, ils sont donc bloques.
  • 0xEFF9 recable comme adresse dediee d'effacement du verrou code. Une seule lecture de 0xEFF9 reinitialise le compteur 74HCT191 a 0 et desactive l'acces aux registres de controle E/S.
  • Serigraphie du circuit imprime nettoyee -- references des composants corrigees.
La version 2.1 est la version actuelle recommandee. Toutes les nouvelles constructions doivent utiliser la v2.1.

Architecture Memoire

Le processeur Z80 du Sharp MZ-80A adresse 64 Ko de memoire. Le RomDisk remplace les deux fenetres ROM par de la Flash RAM paginee et ajoute huit registres de controle E/S dans les huit octets superieurs de la plage d'adresses User ROM. La plage complete 0x1200-0xCFFF reste disponible pour les programmes utilisateur.

Disposition de l'Espace d'Adressage Z80
Address     Size    Contents
─────────────────────────────────────────────────────────────────────────────
0x0000      4 KB    Fenetre Monitor ROM — page de 4 Ko dans la Flash MROM de 512 Ko (U1)
                    Banks: 0 = SA-1510 (40 colonnes, par defaut a la mise sous tension)
                           1 = SA-1510 80 colonnes
                           2 = CP/M CBIOS Kernel
                           3 = Utilitaires RFS Monitor ROM
                           4 = 1Z-013A moniteur MZ-700
                           5 = 1Z-013A 80 colonnes
                           6 = IPL (Initial Program Loader)
                           7 = (vide)
0x1000      256 B   Variables systeme MZ-80A et pile
0x1200    ~46 KB    RAM utilisateur (zone de programme principale, 0x1200–0xCFFF)
0xCFFF
0xD000      12 KB   RAM video + E/S mappee en memoire (materiel carte mere Sharp MZ-80A)
0xE800       2 KB   Fenetre User ROM — page de 2 Ko dans la Flash UROM de 512 Ko (U4/U5/U6)
                    Banks 0–7:  Modules firmware RFS
                    Banks 8–11: Modules CP/M CBIOS
0xEFF8       8 B    Zone de lecture du verrou code (v2+): 16 lectures ici deverrouillent les registres de controle
                    Egalement donnees Flash ROM quand le verrou est ferme
0xEFF9       1 B    Reinitialisation du verrou code: une lecture reverrouille les registres de controle (v2.1+)
0xEFFB       1 B    HWSPIDATA  — Registre de donnees SPI materiel (v2+)
0xEFFC       1 B    HWSPISTART — Registre de demarrage/declenchement SPI materiel (v2+)
0xEFFD       1 B    BNKSELMROM — Registre de selection de banque Monitor ROM
0xEFFE       1 B    BNKSELUSER — Registre de selection de banque User ROM
0xEFFF       1 B    BNKCTRL    — Registre de controle de banque
0xF000       4 KB   Espace ROM Floppy AFI (ROM du controleur de disquette Sharp d'origine)
─────────────────────────────────────────────────────────────────────────────

Banques Monitor ROM (4 Ko chacune)
La fenetre Monitor ROM a 0x0000-0x0FFF est commutee par banque sur huit banques de 4 Ko stockees dans la puce Flash MROM en U1. La banque 0 est selectionnee a la mise sous tension.
Bank Module Description
0 monitor_sa1510.asm Moniteur SA-1510 original 40 colonnes. La banque par defaut a la mise sous tension.
1 monitor_80c_sa1510.asm SA-1510 modifie pour affichage 80 colonnes (necessite le module Kuma 80 colonnes).
2 cbios.asm Noyau CBIOS CP/M 2.2 – relogeable a 0xC000-0xCFFF lors du demarrage CP/M.
3 rfs_mrom.asm Utilitaires RFS Monitor ROM – analyse et chargement d’images MZF. S’execute depuis l’espace MROM pour pouvoir paginer le User ROM sans se remplacer lui-meme.
4 monitor_1z-013a.asm Variante moniteur MZ-700 1Z-013A.
5 monitor_80c_1z-013a.asm Moniteur 1Z-013A modifie pour affichage 80 colonnes.
6 ipl.asm Initial Program Loader.
7 (vide) Non utilise.

Banques User ROM (2 Ko chacune)
La fenetre User ROM a 0xE800-0xEFFF est commutee par banque sur 12 banques actives reparties sur les trois puces Flash User ROM (U4, U5, U6). Le registre BNKSELUSER selectionne la page de 2 Ko dans la puce active ; les bits BK2A19 et BK2A20 dans BNKCTRL selectionnent quelle puce est adressee.
Bank Module Description
0 rfs.asm Point d’entree principal RFS, repartiteur de commandes, table de commandes, infrastructure de commutation de banque partagee par toutes les banques.
1 rfs_bank1.asm Fonctions du controleur de disquette (FDC) – selection de lecteur et demarrage FDC.
2 rfs_bank2.asm Controleur de carte SD – pilote SPI, initialisation de carte SD, repertoire et lecture/ecriture de fichiers SDCFS.
3 rfs_bank3.asm Utilitaires memoire – vidage hexadecimal (D), edition memoire (M), copie memoire (CP), copie cassette vers SD (T2SD/SD2T).
4 rfs_bank4.asm Controleur CMT (cassette) – chargement, sauvegarde et verification de cassette.
5 rfs_bank5.asm (Reserve / non utilise.)
6 rfs_bank6.asm Ecran d’aide, chaines de messages, table de conversion de jeu de caracteres ASCII vers Sharp.
7 rfs_bank7.asm Test memoire (R), test de temporisateur 8253 (T).
8 cbios_bank1.asm CP/M CBIOS – fonctions audio et utilitaires bas niveau.
9 cbios_bank2.asm CP/M CBIOS – pilote d’ecran et emulation de terminal ANSI.
10 cbios_bank3.asm CP/M CBIOS – pilote de lecteur de carte SD (lecteurs CP/M A:-G:).
11 cbios_bank4.asm CP/M CBIOS – controleur de disquette.

Controle de Banque

Mecanisme du Verrou Code
Sur les cartes v2.0 et v2.1, les registres de controle de banque sont proteges par un compteur ascendant 4 bits 74HCT191 faisant office de verrou code. Le mecanisme empeche le code Z80 s'executant depuis la RAM programme de commuter accidentellement les banques ROM simplement en lisant ou ecrivant une adresse qui se trouve dans la plage 0xEFF8-0xEFFF.
Fonctionnement :
  1. A la mise sous tension ou apres une lecture de reinitialisation du verrou, le compteur 74HCT191 est a 0. La logique de decodage des registres de controle E/S est desactivee -- les lectures de 0xEFF8-0xEFFF retournent les donnees Flash ROM normalement, et les ecritures sur BNKSELMROM/BNKSELUSER/BNKCTRL n'ont aucun effet.
  2. Pour deverrouiller les registres de controle : effectuez exactement 16 cycles de lecture sur n'importe quelle adresse dans la plage 0xEFF8-0xEFFF. Chaque lecture incremente le compteur de un. Sur les cartes v2.1, seuls les vrais cycles de bus de lecture memoire (avec /MREQ active) comptent ; les cycles de rafraichissement DRAM du Z80 (qui activent /RFSH et desactivent /MREQ) sont bloques par la porte ET D1/D2 et n'incrementent pas le compteur.
  3. Lorsque le compteur atteint le Terminal Count (16), la sortie TC devient active et active la logique de decodage des registres de controle E/S. Les registres de selection de banque sont maintenant inscriptibles.
  4. Pour reverrouiller : lisez l'adresse 0xEFF9 une fois. Cela active la ligne de chargement/reinitialisation du compteur, remet le compteur a 0 et desactive immediatement les registres de controle E/S.
Le nombre de lectures necessaires au deverrouillage peut etre ajuste via les bits CDLTCH1-3 du registre BNKCTRL, qui configurent le decalage initial du compteur (permettant effectivement de 1 a 16 lectures). Le firmware par defaut utilise la sequence complete de 16 lectures.

Registre de Controle de Banque (BNKCTRL, 0xEFFF)
Le registre BNKCTRL controle les signaux SPI bitbang, la selection de puce de la carte SD, la configuration du verrou code et la selection de puce User ROM. Il est en ecriture seule (apres le deverrouillage du verrou code).
Bits Name Description
0 BBCLK Sortie d’horloge SPI BitBang. Basculee par les routines SPI logicielles pour generer le signal d’horloge SPI.
1 SDCS Selection de puce de la carte SD – actif bas. Mettre a 0 pour selectionner la carte SD, 1 pour deselectionner.
2 BBMOSI Sortie de donnees SPI BitBang MOSI. Reglee sur la valeur du bit avant de basculer BBCLK.
5:3 CDLTCH1-3 Bits de configuration du verrou code. Definit le decalage initial du compteur, controlant le nombre de lectures de 0xEFF8-0xEFFF necessaires pour deverrouiller les registres. Par defaut 0 = 16 lectures necessaires.
6 BK2A19 Bit 0 de selection de peripherique/adresse User ROM. Combine avec BNKSELUSER pour adresser les 512 Ko complets de chaque puce User ROM et pour selectionner entre U4, U5 et U6.
7 BK2A20 Bit 1 de selection de peripherique/adresse User ROM. Voir BK2A19.
Les bits BK2A19/BK2A20 etendent l'espace d'adressage User ROM effectif au-dela des 256 banques de deux kilooctets disponibles via BNKSELUSER seul. Combines avec BNKSELUSER, ils forment une adresse composite dans les trois puces Flash User ROM, selectionnant quelle puce est active (U4, U5 ou U6) et quelle page de 2 Ko est mappee sur la fenetre 0xE800-0xEFFF.

Interface SPI

Trois implementations SPI sont prises en charge et sont selectionnees lors de la compilation en definissant exactement un drapeau a 1 dans rfs_definitions.asm. Un seul peut etre active dans une compilation de firmware donnee.
Flag Value Method Speed Hardware Required
HW_SPI_ENA 1 SPI materiel – registres a decalage 74HCT595/74HCT165, quartz 16 MHz 8 MHz – comparable a la vitesse d’acces Flash ROM PCB v2.0/v2.1 avec JP6 configure pour SPI materiel
SW_SPI_ENA 1 SPI logiciel bitbang via manipulation de bits du port E/S Z80 de BNKCTRL ~300 Ko/s – plus rapide que la disquette, plus lent que la ROM PCB v2.0/v2.1 avec JP6 configure pour SPI logiciel
PP_SPI_ENA 1 Bitbang par port parallele imprimante (methode originale v1.1) Le plus lent PCB v1.1 uniquement
Fonctionnement du SPI materiel (cartes v2.0/v2.1) :
  1. Ecrivez l'octet de donnees dans HWSPIDATA (0xEFFB). Le registre a decalage 74HCT595 charge l'octet pret pour la transmission.
  2. Ecrivez n'importe quelle valeur dans HWSPISTART (0xEFFC) pour demarrer le transfert. Le registre a decalage envoie l'octet sur la ligne MOSI synchronise a l'oscillateur de 16 MHz, tandis que le 74HCT165 recoit simultanement les bits MISO de la carte SD.
  3. Lisez HWSPIDATA (0xEFFB) pour recuperer l'octet recu. L'echange complet de 8 bits s'acheve en moins de temps qu'un seul cycle de lecture memoire Z80 -- c'est pourquoi le debit du SPI materiel est comparable a la vitesse d'acces Flash ROM.
Fonctionnement du SPI logiciel bitbang : Le firmware manipule directement les champs BBCLK (bit 0), BBMOSI (bit 2) et SDCS (bit 1) du registre BNKCTRL dans une boucle serree, basculant BBCLK une fois par bit tout en reglant BBMOSI sur la valeur du bit sortant. MISO est echantillonne depuis un bit de port d'entree dedie. Cela atteint environ 300 Ko/s, ce qui est suffisant pour les transferts de carte SD.
Bitbang par port parallele (v1.1 uniquement) : Utilise les lignes de donnees et d'etat du port parallele imprimante du Sharp MZ-80A comme signaux SPI. Fonctionnel mais le plus lent des trois options en raison du timing des E/S du port imprimante.

Architecture Logicielle

La table complete des modules -- chaque fichier source, sa puce Flash cible, sa banque ROM et sa fonction :
Module Flash Chip Bank Size Description
rfs.asm User (U4) 0 2 KB Repartiteur de commandes, table de commandes, infrastructure de commutation de banque.
rfs_bank1.asm User (U4) 1 2 KB Controleur de disquette – selection de lecteur et demarrage FDC.
rfs_bank2.asm User (U4) 2 2 KB Controleur de carte SD – pilote SPI, repertoire SDCFS, lecture/ecriture de fichiers.
rfs_bank3.asm User (U4) 3 2 KB Utilitaires memoire – D, M, CP, T2SD, SD2T.
rfs_bank4.asm User (U4) 4 2 KB Controleur CMT – chargement, sauvegarde, verification de cassette.
rfs_bank5.asm User (U4) 5 2 KB (Reserve / non utilise.)
rfs_bank6.asm User (U4) 6 2 KB Ecran d’aide, chaines de messages, conversion de jeu de caracteres.
rfs_bank7.asm User (U4) 7 2 KB Test memoire (R), test de temporisateur (T).
cbios_bank1.asm User (U4) 8 2 KB CP/M CBIOS – audio, utilitaires bas niveau.
cbios_bank2.asm User (U4) 9 2 KB CP/M CBIOS – pilote d’ecran, emulateur de terminal ANSI.
cbios_bank3.asm User (U4) 10 2 KB CP/M CBIOS – pilote de lecteur de carte SD (lecteurs A:-G:).
cbios_bank4.asm User (U4) 11 2 KB CP/M CBIOS – controleur de disquette.
monitor_sa1510.asm Monitor (U1) 0 4 KB ROM moniteur SA-1510 original (40 colonnes).
monitor_80c_sa1510.asm Monitor (U1) 1 4 KB SA-1510 modifie pour affichage 80 colonnes.
cbios.asm Monitor (U1) 2 4 KB Noyau CBIOS CP/M 2.2 (relogeable a 0xC000 pendant le demarrage CP/M).
rfs_mrom.asm Monitor (U1) 3 4 KB Utilitaires RFS Monitor ROM – analyse ROM, chargement MZF.
monitor_1z-013a.asm Monitor (U1) 4 4 KB Variante moniteur MZ-700 1Z-013A.
monitor_80c_1z-013a.asm Monitor (U1) 5 4 KB 1Z-013A modifie pour affichage 80 colonnes.
ipl.asm Monitor (U1) 6 4 KB Initial Program Loader.
Puisque le Z80 ne peut voir qu'une tranche de 2 Ko du User ROM a la fois, chaque banque User ROM contient une copie du stub de commutation de banque a une adresse fixe dans la fenetre. Lorsque la banque 0 doit appeler une routine dans la banque 3, elle ecrit le numero de banque de destination dans BNKSELUSER, saute au point d'entree connu dans la banque nouvellement mappee, execute le code requis, reecrit la banque 0 dans BNKSELUSER et revient. Ce mecanisme rend les 12 x 2 Ko = 24 Ko de code User ROM accessibles depuis n'importe quel contexte d'execution.
Contrainte importante sur les cartes v2.0/v2.1 : aucune sequence d'instructions en boucle serree dans le code de banque User ROM ne doit couvrir la plage d'adresses 0xEFF8-0xEFFF, car des lectures repetees dans cette plage incrementeront le compteur du verrou code et finiront par deverrouiller les registres de banque de maniere inattendue.

Systeme de Fichiers Carte SD (SDCFS)

Plutot que d'implementer FAT (qui serait trop volumineux pour tenir dans les banques ROM de 2 Ko disponibles), le firmware RomDisk utilise un systeme de fichiers specialement concu appele SD Card Filing System (SDCFS). La conception privilegie la simplicite et une empreinte ROM minimale par rapport a la flexibilite.
La carte SD est utilisee en mode brut -- aucune table de partition n'est ecrite. L'image SDCFS commence a l'octet 0 (secteur 0) de la carte. Les images disque CP/M sont placees a la limite de 256 Mo pour garantir que les 10 lecteurs RFS aient de la place quelle que soit leur occupation.

Structure du Repertoire
Chaque lecteur SDCFS contient un repertoire plat de jusqu'a 256 entrees. Chaque entree fait exactement 32 octets, utilisant une structure derivee du format d'en-tete de cassette MZF standard (la meme disposition de 32 octets utilisee sur les cassettes Sharp MZ) :
Field Bytes Description
FLAG1 1 Bit 7 = 1 : entree valide. Bit 7 = 0 : inactive / supprimee.
FLAG2 1 Type d’execution MZF (0x01 = programme binaire).
FILE NAME 17 Nom de fichier MZF standard de 17 caracteres (encodage de caracteres Sharp).
START SECTOR 4 Premier secteur de carte SD dans cette image de lecteur ou le bloc de donnees du fichier commence.
SIZE 2 Nombre d’octets reel des donnees du fichier.
LOAD ADDR 2 Adresse RAM Z80 ou charger les donnees du fichier.
EXEC ADDR 2 Adresse d’auto-execution pour les fichiers binaires (saute a cette adresse apres le chargement si non nulle).
RESERVED 3 Non utilise actuellement.
Le repertoire occupe les premiers 8 Ko de chaque image de lecteur (256 entrees x 32 octets). Les donnees des fichiers suivent immediatement. Chaque fichier se voit allouer un bloc fixe de 64 Ko -- correspondant a la taille maximale de bloc de cassette Sharp MZ -- ce qui maintient la disposition sur disque trivialement simple et fait de la copie SD vers cassette un transfert direct octet par octet aligne sur les secteurs.

Disposition de la Carte SD
ADDRESS       CONTENT
────────────────────────────────────────────────────────────────────────
0x00000000    RFS DRIVE 0  (16 MB)
                0x00000000–0x00001FE0  Directory (256 × 32 B)
                0x00002000–0xFF2000    File blocks (256 × 64 KB)
0x01002000    RFS DRIVE 1  (meme structure)
...
0x09012000    RFS DRIVE 9  (meme structure)
0x0A014000    (remplissage jusqu'a la limite de 256 Mo)
────────────────────────────────────────────────────────────────────────
0x10000000    CP/M DISK IMAGE 0  (A:)  — 16 MB
0x11000000    CP/M DISK IMAGE 1  (B:)  — 16 MB
...
0x16000000    CP/M DISK IMAGE 6  (G:)  — 16 MB
────────────────────────────────────────────────────────────────────────

Implementation CP/M 2.2

CP/M 2.2 est disponible sur le RomDisk comme fonctionnalite integree. La saisie de CPM a l'invite du moniteur RFS demarre CP/M directement depuis la carte SD. Le TPA CP/M est de 47 Ko ; le CCP se trouve a 0x9C00 avec le BDOS au-dessus, tandis que l'ensemble du CBIOS reside en ROM (banque Monitor ROM 2 plus banques User ROM 8-11) et ne consomme aucune RAM programme.
Processus de Demarrage
  1. La commande RFS CPM commute le Monitor ROM sur la banque 2 (le noyau CBIOS), qui contient le point d'entree de demarrage a froid CP/M a 0x0000.
  2. La routine de demarrage a froid du CBIOS initialise tout le materiel (clavier, ecran, carte SD, disquette si presente) et construit les en-tetes de parametres de disque pour chaque lecteur disponible.
  3. Le CBIOS lit les images CCP et BDOS depuis le disque systeme CP/M sur la carte SD en RAM a 0x9C00.
  4. Le controle est passe au CCP a 0x9C00. CP/M fonctionne maintenant.
Lors d'un demarrage a chaud (par exemple apres qu'une grande application a ecrase le CCP), le vecteur de demarrage a chaud du CBIOS a 0x0003 recharge le CCP et le BDOS depuis le disque et rentre dans le CCP.
Disposition des Modules CBIOS
Le BIOS personnalise est reparti sur cinq modules ROM pour qu'aucune banque de 2 Ko ne soit depassee :
Module ROM Location Contents
cbios.asm Banque Monitor ROM 2 (0x0000-0x0FFF quand active) Les 17 vecteurs API CP/M CBIOS, gestionnaires de demarrage a froid/chaud, gestionnaire d’interruption, tables de parametres de disque.
cbios_bank1.asm Banque User ROM 8 Audio (sonnerie, melodie), routines d’horloge temps reel, gestionnaire de clavier bas niveau.
cbios_bank2.asm Banque User ROM 9 Pilote d’ecran (sortie caractere, defilement, controle du curseur), emulateur de terminal ANSI/VT100.
cbios_bank3.asm Banque User ROM 10 Pilote de lecteur de carte SD – traduit les lectures et ecritures de secteurs de 128 octets CP/M en images de lecteur SDCFS a la limite de 256 Mo.
cbios_bank4.asm Banque User ROM 11 Controleur de disquette – prend en charge les disquettes physiques CP/M.
Configuration des Lecteurs CP/M
Les lecteurs CP/M sont mappes sur des images disque de carte SD pendant le demarrage a froid du CBIOS. L'attribution standard des lecteurs est :
CP/M Drive Image Contents
A: CP/M Disk Image 0 Programmes du systeme d’exploitation, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80.
B: CP/M Disk Image 1 Pascal MTP v5.61, Turbo Pascal v3.00a, disquettes Pascal User Group.
C: CP/M Disk Image 2 PLI, PLM 80, WordStar v3.0/v3.3/v4.0.
D:-G: CP/M Disk Images 3-6 Disquettes de la collection CP/M de Grant Searle.

Systeme de Compilation

Tout le developpement se fait sous Linux (Debian/Ubuntu). Le systeme de compilation est autonome dans le depot. Le point d'entree principal est build.sh dans le repertoire software/RFS/.

Prerequis
Tool Purpose
Java JRE 8+ Execute l’assembleur GLASS Z80 (tools/glass.jar). java doit etre dans le PATH.
bash Tous les scripts de compilation sont des scripts shell bash.
perl Requis par tools/mzftool.pl pour la manipulation des fichiers MZF.
gcc / make Compile cpmtools a partir du code source lors de la premiere compilation (automatique).
dd, cat, stat Utilitaires Linux standard utilises par les scripts de packaging.
L'assembleur GLASS Z80 est fourni sous forme de tools/glass.jar -- aucune installation separee n'est requise.

Drapeaux de Compilation
Editez asm/include/rfs_definitions.asm avant la compilation. Les drapeaux d'interface SPI sont mutuellement exclusifs -- definissez exactement un a 1 :
Flag Default Description
HW_SPI_ENA 1 SPI materiel (PCB v2.0/v2.1, JP6 configure pour SPI materiel). Par defaut pour toutes les cartes actuelles.
SW_SPI_ENA 0 SPI logiciel bitbang (PCB v2.0/v2.1, JP6 configure pour SPI logiciel).
PP_SPI_ENA 0 SPI bitbang par port parallele. Pour les cartes v1.1 uniquement.
FUSIONX_ENA 1 Inclure le support tranZPUter FusionX.
ENADEBUG 0 Activer la sortie de debogage a la compilation.

Etapes de Compilation
git clone https://git.eaw.app/eaw/RFS.git
cd RFS/software/RFS

# Compilation complete -- assemble toutes les ROM, package les images Flash, cree l'image carte SD :
./build.sh

# Compilation complete incluant le retraitement de tous les fichiers d'application MZF
# (necessaire uniquement lorsque les fichiers dans MZF/ ont change) :
./build.sh -m
build.sh execute les etapes suivantes dans l'ordre :
  1. Compile cpmtools a partir du code source si ce n'est pas deja fait, et l'ajoute au PATH.
  2. tools/assemble_rfs.sh -- assemble toutes les banques firmware RFS (rfs.asm, rfs_bank1-7.asm) en images ROM individuelles.
  3. tools/assemble_cpm.sh -- assemble le CBIOS CP/M 2.2 (cbios.asm, cbios_bank1-4.asm) et le noyau CP/M CCP+BDOS.
  4. tools/assemble_roms.sh -- assemble toutes les variantes de moniteur (SA-1510, 80c, 1Z-013A, IPL) et les binaires d'application MZF.
  5. tools/processMZFfiles.sh (uniquement avec le drapeau -m) -- convertit les fichiers MZF bruts de MZF/ en images remplies en secteurs de 128 et 256 octets dans MZB/.
  6. tools/make_roms.sh -- empaquete les images ROM assemblees et les binaires d'application MZF en images Flash ROM de 512 Ko pour chaque puce Flash.
  7. tools/make_cpmdisks.sh -- cree les images disque CP/M au format RAW (pour carte SD) et au format CPC Extended Disk (pour emulateurs de disquette).
  8. tools/make_sdcard.sh -- combine les 10 images de lecteur RFS et les 7 images disque CP/M en l'image finale de carte SD.

Fichiers de Sortie
Apres une compilation reussie, le repertoire roms/ contient :
File Target Chip Description
MROM_ROMDISK_256.bin Flash Monitor ROM (U1) Image Monitor ROM : SA-1510, 80c SA-1510, CP/M CBIOS, utilitaires RFS mrom, moniteurs 1Z-013A, IPL sur 7 x 4 Ko banques.
USER_ROM_256.bin Flash User ROM U4 Banques RFS 0-7, banques CP/M CBIOS 8-11, applications MZF empaquetees.
USER_ROM_II_256.bin Flash User ROM U5 Applications MZF supplementaires (debordement de U4).
USER_ROM_III_256.bin Flash User ROM U6 Applications MZF supplementaires (debordement de U5).
SHARP_MZ80A_RFS_IMAGE_0–9.img Carte SD Images de lecteur RFS individuelles, une par lecteur (lecteurs 0-9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img Carte SD Image combinee : 10 lecteurs RFS + 7 images disque CP/M. Ecrivez ce fichier sur la carte SD.
Pour programmer les puces Flash, utilisez un programmeur compatible SST39SF040. Ecrivez MROM_ROMDISK_256.bin sur U1, USER_ROM_256.bin sur U4, et les images de debordement sur U5 et U6 si equipes. Pour ecrire l'image de la carte SD, utilisez dd :
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512 status=progress

Sites de Reference

Resource Link
Page du projet RomDisk /sharpmz-upgrades-romdisk/
Page du projet RFS /sharpmz-upgrades-rfs/
Manuel Utilisateur RFS /sharpmz-upgrades-rfs-usermanual/
Guide du Developpeur RFS /sharpmz-upgrades-rfs-developersguide/
Guide Technique RFS /sharpmz-upgrades-rfs-technicalguide/
Galerie RFS /sharpmz-upgrades-rfs-gallery/
Guide Technique SFD-700 mkII /sfd700-technicalguide/
Guide Technique picoZ80 /picoz80-technicalguide/
Assembleur GLASS Z80 Fourni dans tools/glass.jar
Fiche technique Flash SST39SF040 Page produit Microchip / Greenliant
Fiche technique SRAM AS6C4008 Page produit Alliance Memory