Systeme de fichiers ROM (RFS)

Presentation

Le Rom Filing System (RFS) est un package firmware ecrit en assembleur Z80 qui fournit un moniteur interactif avec un systeme de fichiers sur stockage de masse, le lancement d'applications, des utilitaires memoire et des outils de debogage pour le Sharp MZ-80A et le materiel compatible.
RFS remplace la ROM Moniteur et la ROM Utilisateur de la machine hote via des adaptateurs de socket connectes a la carte d'extension. Il se presente a l'utilisateur comme une version amelioree du programme moniteur SA-1510 original avec la meme invite * familiere, toutes les commandes originales intactes et un ensemble complet de nouvelles commandes pour la gestion de fichiers sur carte SD et ROM, le demarrage CP/M, le chargement BASIC et bien plus encore.
Le firmware prend en charge quatre plateformes materielles, chacune selectionnee a la compilation via un indicateur dans rfs_definitions.asm :
  • Carte RomDisk — la cible originale. Jusqu'a 4×512 Ko de Flash RAM, 512 Ko de RAM statique et un lecteur de carte SDXC. Les ROM Moniteur et Utilisateur sont commutees par banques a travers la Flash RAM.
  • SFD-700 — la carte d'interface disquette Sharp. RFS occupe l'espace CPLD/ROM du SFD-700 et fournit le moniteur, le chargement BASIC et le demarrage disquette.
  • tranZPUter FusionX — la carte d'amelioration Z80 basee sur FPGA. RFS s'execute dans son espace Flash ROM.
  • picoZ80 — la carte de remplacement/emulateur Z80 basee sur Raspberry Pi Pico. Sur le picoZ80, RFS fonctionne selon le persona machine presente a l'hote — en plus du MZ-80A, cela inclut desormais le Sharp MZ-80K, qui peut utiliser les memes cartes d'interface Sharp que le MZ-80A (RFS, MZ80AFI, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034) ainsi que son propre controleur de disquette natif MZ-80FD (T3444M).

Moniteur RFS

Au demarrage, la banniere d'accueil SA-1510 familiere apparait, completee par "+ RFS" lorsque le systeme de fichiers a ete initialise avec succes. L'ensemble complet des commandes SA-1510 est disponible, ainsi qu'un ensemble de commandes etendues. Certaines commandes etendues (operations sur carte SD, selection de lecteur) ne sont presentes que dans la version RomDisk / picoZ80. Un assembleur et un desassembleur Z80 integres sont disponibles dans toutes les versions.
L'ensemble complet des commandes est liste ci-dessous. Les commandes marquees (R) ne sont presentes que dans la version RomDisk / picoZ80.
Commande Parametres Description
0 .. 9 (R) Selectionner le lecteur SD RFS actif (0–9).
40 (R) Passer en mode d’affichage 40 colonnes (necessite la mise a niveau Kuma 40/80 ou le Video Module).
80 (R) Passer en mode d’affichage 80 colonnes (necessite la mise a niveau Kuma 40/80 ou le Video Module).
ASM <address> Assembleur Z80 interactif. Saisir des mnemoniques d’assemblage directement en memoire a partir de l’adresse indiquee.
B Activer/desactiver le signal sonore du clavier.
BASIC Rechercher BASIC SA-5510 sur le lecteur SD actif ou en ROM, le charger et l’executer.
C [<valeur 8 bits>] Initialiser la memoire de 0x1200 au sommet de la RAM avec 0x00 ou la valeur d’octet fournie.
CP <src> <dst> <size> Copier un bloc de memoire. Les trois arguments sont des valeurs hexadecimales de 4 chiffres : adresse source, adresse destination, nombre d’octets.
CPM Rechercher CP/M 2.2 sur le lecteur SD actif ou en ROM, le charger et le demarrer.
D <addr> [<addr2>] Afficher la memoire de <addr> a <addr2> (ou 20 lignes) en hexadecimal et ASCII. L’affichage s’interrompt a chaque ecran plein ; appuyer sur une touche pour continuer, ‘U’ pour remonter, ‘X’ pour quitter. Repeter ‘D’ sans adresse continue depuis la derniere position affichee.
DASM <addr> [<addr2>] Desassembler le code machine Z80 de <addr> a <addr2>.
DUC (R) [H|T] <name> ou <no de fichier> Afficher le contenu d’un fichier de la carte SD. Par defaut : dump hexadecimal. DUCH : dump hexadecimal avec informations d’en-tete MZF (adresse de chargement, adresse d’execution, taille). DUCT : affichage texte (caracteres ASCII imprimables uniquement).
EC (R) <name> ou <no de fichier> Effacer un fichier du lecteur SD actif par nom ou numero de fichier.
F / FL [<drive>] Demarrer depuis le lecteur de disquette specifie. Si omis, vous etes invite a entrer un numero de lecteur.
FD [<drive>] Afficher la liste du repertoire d’une disquette. Le numero de lecteur optionnel selectionne le lecteur 1–4 (par defaut : 1).
FC <start> <end> <exec> Sauvegarder une plage memoire dans un fichier sur disquette.
FD2T <name> ou <no de fichier> Copier un fichier de la disquette vers la cassette.
T2FD Charger depuis la cassette et sauvegarder sur disquette.
f Executer le code de demarrage AFI disquette original a 0xF000.
H Afficher l’ecran d’aide des commandes (pagine, appuyer sur Espace pour continuer).
IC (R) Liste paginee des fichiers sur le lecteur SD actif. Chaque entree affiche un numero de fichier hexadecimal et le nom du fichier.
IN <port>[,<port>…] Lire un ou plusieurs ports d’E/S. Chaque port est une adresse hexadecimale de 2 ou 4 chiffres. Les valeurs sont affichees en hexadecimal de 2 chiffres, separees par des espaces.
IR Liste paginee des programmes stockes dans les lecteurs Flash ROM.
J <address> Sauter a (executer depuis) l’adresse indiquee.
L | LT [<filename>] Charger un fichier depuis la cassette (CMT) et l’executer.
LTNX [<filename>] Charger un fichier depuis la cassette (CMT) sans l’executer.
LR <name> ou <no de fichier> Charger un programme depuis la ROM par nom ou numero de fichier et l’executer.
LRNX <name> ou <no de fichier> Charger un programme depuis la ROM par nom ou numero de fichier sans l’executer.
LC (R) <name> ou <no de fichier> Charger un programme depuis la carte SD et l’executer.
LCNX (R) <name> ou <no de fichier> Charger un programme depuis la carte SD sans l’executer.
M <address> Editeur de memoire interactif a partir de <address>.
OUT <port>:<value>[,<port>:<value>…] Ecrire sur un ou plusieurs ports d’E/S. Chaque port est une adresse hexadecimale de 2 ou 4 chiffres suivie d’un deux-points et d’une valeur hexadecimale de 2 chiffres.
P Executer un test sur l’imprimante connectee.
R Executer un test de memoire DRAM.
S | ST <start> <end> <exec> Sauvegarder une plage memoire sur cassette (CMT). Vous etes invite a saisir un nom de fichier. Exemple : S120020001203 sauvegarde de 0x1200 a 0x2000 avec execution a 0x1203.
SC (R) <start> <end> <exec> Sauvegarder une plage memoire sur le lecteur SD actif. Vous etes invite a saisir un nom de fichier.
SD2T (R) <name> ou <no de fichier> Copier un fichier de la carte SD vers la cassette dans le CMT.
T Tester la puce temporisateur 8253.
T2SD (R) Charger un programme depuis la cassette et l’ecrire sur le lecteur SD actif.
V Verifier une sauvegarde sur cassette par rapport aux donnees actuellement en memoire.
X (R) Basculer vers la variante ROM hi-load pour que la DRAM couvre 0x0000–0xCFFF.

Si la mise a niveau Kuma 40/80 colonnes ou le Video Module est installe, taper 4 passe en affichage 40 colonnes et 8 passe en affichage 80 colonnes. En mode 80 colonnes, les commandes de listing (IC / IR) affichent quatre colonnes.


Applications ameliorees

La serie Sharp MZ est connue sous le nom de "machines propres" — presque aucun logiciel ne reside en permanence dans la ROM ; tout est charge depuis la cassette ou la disquette. Les applications existantes n'avaient donc aucune connaissance du stockage etendu fourni par RFS, si ce n'est la possibilite d'etre chargees rapidement depuis le moniteur RFS.
Pour rendre les machines plus utilisables, des applications cles ont ete mises a jour pour utiliser RFS nativement et l'interpreteur Microsoft BASIC a ete porte sur la plateforme. CP/M 2.2 a egalement ete mis en oeuvre via un CBIOS personnalise qui utilise les fonctionnalites RFS. Le CBIOS detecte et lit desormais automatiquement les disques CP/M originaux (non convertis) du MZ-80K via la carte disquette MZ80AFI, en les montant directement comme lecteurs CP/M C: et D: — voir le guide CP/M pour RFS pour plus de details.

Sharp BASIC SA-5510

Le BASIC Sharp SA-5510 original a ete desassemble et etendu avec des commandes LOAD, SAVE et DIR compatibles RFS. La disposition des octets de l'interpreteur est preservee afin que les programmes qui dependent d'adresses fixes connues continuent de fonctionner. Les extensions sont appliquees en dehors de l'image principale de l'interpreteur.
La version etendue porte le nom SA-5510RFS sur le lecteur ROM et le lecteur SD. Au demarrage, elle utilise le lecteur SD actif (lecteurs 0–9) pour toutes les operations de fichiers. La syntaxe standard LOAD et SAVE est inchangee ; le prefixe de qualificateur de lecteur est le seul ajout.
Commande Parametre Description
LOAD "TEST" Rechercher un programme nomme TEST sur le lecteur actif, le charger et l’executer.
LOAD   Charger le fichier sequentiel suivant depuis le lecteur actif. Si le fichier 5 a ete charge en dernier, ceci charge le fichier 6.
LOAD "3:TEST" Charger TEST depuis le lecteur RFS 3, rendant le lecteur 3 actif.
LOAD "C:TEST" Charger TEST depuis la cassette interne (CMT), rendant le CMT actif.
SAVE "TEST" Ecraser un fichier existant nomme TEST sur le lecteur actif, ou le creer s’il est absent. Sur CMT, ecrit immediatement a la position actuelle de la bande.
SAVE   Sauvegarder le programme actuel sous un nom genere automatiquement DEFAULT<n>, ou <n> est le numero de sequence actuel.
SAVE "3:TEST" Sauvegarder/creer TEST sur le lecteur RFS 3 et rendre le lecteur 3 actif.
SAVE "C:TEST" Sauvegarder sur CMT avec le nom TEST et rendre le CMT actif.
DIR   Lister le repertoire de la carte SD pour le lecteur actif au format RFS (numero de fichier + nom de fichier).
DIR "3:" Lister le repertoire du lecteur 3 et rendre le lecteur 3 actif.

Voir Organisation de la carte SD ci-dessous pour la disposition par defaut des lecteurs.

Microsoft BASIC

Alors que la plupart des interpreteurs BASIC du MZ-80A ne sont disponibles qu'en tant que binaires, Microsoft BASIC (NASCOM 4.7b) dispose d'un code source librement disponible et d'une grande bibliotheque de programmes existants. RFS inclut une version portee et etendue qui prend en charge le stockage natif RFS dans trois configurations correspondant au materiel cible :
  • MS-BASIC(MZ-80A) — pour le materiel MZ-80A original, stockage sur cassette uniquement.
  • MS-BASIC(RFS40) — RFS avec affichage 40 colonnes ; ajoute les commandes carte SD, CLOAD, CSAVE, DIR.
  • MS-BASIC(RFS80) — RFS avec affichage 80 colonnes ; ajoute les commandes carte SD, CLOAD, CSAVE, DIR.

Chaque variante apparait sur le lecteur ROM et le lecteur SD de RFS. Consultez le NASCOM Basic Manual pour l’ensemble complet des commandes standard. Le tableau ci-dessous liste les extensions ajoutees pour RFS.

Commande Parametres Version Description
CLOAD "<filename>" MZ-80A Charger un programme BASIC tokenise depuis la cassette.
CSAVE "<filename>" MZ-80A Sauvegarder le programme BASIC actuel sur cassette en format tokenise.
CLOAD "[<drive>:]<filename>" RFS40, RFS80 Charger depuis la cassette ou la carte SD. <drive> est 0–9 ; <filename> est un nom MZ de 17 caracteres ou un numero hexadecimal RFS de 2 chiffres. Exemple : CLOAD "8:13" ou CLOAD "8:othello".
CSAVE "[<drive>:]<filename>" RFS40, RFS80 Sauvegarder sur cassette ou carte SD avec qualificateur de lecteur optionnel.
DIR "[<drive>:]" RFS40, RFS80 Afficher le contenu du lecteur RFS actif ou specifie.
ANSITERM 0 = Desactive, 1 = Active Toutes Activer ou desactiver (active par defaut) le processeur de terminal ANSI integre. Celui-ci traduit les sequences d’echappement ANSI en actions d’ecran, permettant aux programmes BASIC portables de fonctionner sans modification. (Le programme BASIC Star Trek V2 utilise des sequences d’echappement ANSI.)
Convertisseur d'image cassette NASCOM
Les programmes NASCOM BASIC sont couramment distribues sous forme de fichiers d'image cassette contenant des donnees de cadrage de bande enveloppant du BASIC tokenise. L'outil nasconv fourni retire le cadrage de bande et reconstruit le code BASIC dans un format chargeable sur le MZ-80A sous RFS. Il reaffecte egalement automatiquement les valeurs de tokens, car l'extension MS-BASIC de RFS ajoute de nouveaux tokens qui decalent la table.
nasconv v1.0

Required:
  -i | --image  <file>   Cassette image file to convert.
  -o | --output <file>   Output file for converted BASIC data.

Options:
  -l | --loadaddr <addr> MZ-80A BASIC start address.
  -n | --nasaddr  <addr> Original NASCOM BASIC start address.
  -h | --help            Show this help.
  -v | --verbose         Verbose output.

Example:
  nasconv --image 3dnc.cas --output 3dnc.bas \
          --nasaddr 0x10fa --loadaddr 0x4341

BASIC MZ-5Z008 (Quick Disk)

Le BASIC Sharp MZ-5Z008 Quick Disk original a ete ameliore pour prendre en charge le stockage sur carte SD RFS et l'acces aux fichiers reseau en plus de ses peripheriques natifs Disquette, Quick Disk et Cassette. La version RFS demarre avec le titre "BASIC 5Z-008BRFS". Ce BASIC fonctionne egalement sur le MZ-1500 via le persona picoZ80 MZ-1500, offrant le meme support de peripheriques, y compris l'acces reseau NETx:. Les programmes peuvent etre charges, sauvegardes et listes sur tous les peripheriques pris en charge en utilisant un prefixe de peripherique dans le nom de fichier.
Commande Parametre Description
LOAD "RFSx:filename" Charger un programme BASIC depuis le lecteur SD RFS x (1–7, mappe sur les lecteurs SD 4–10).
SAVE "RFSx:filename" Sauvegarder le programme BASIC actuel sur le lecteur SD RFS specifie.
DIR RFSx: Afficher la liste du repertoire du lecteur SD RFS specifie.
LOAD "FDx:filename" Charger un programme BASIC depuis le lecteur de disquette x.
SAVE "FDx:filename" Sauvegarder le programme BASIC actuel sur le lecteur de disquette x.
DIR FDx: Afficher la liste du repertoire de la disquette.
LOAD "QDx:filename" Charger un programme BASIC depuis le lecteur Quick Disk x.
SAVE "QDx:filename" Sauvegarder le programme BASIC actuel sur le lecteur Quick Disk x.
DIR QDx: Afficher la liste du repertoire du Quick Disk.
LOAD "NETx:filename" Charger un programme BASIC depuis le serveur de fichiers reseau unite x (1–7). Necessite une carte Celestite et netfs.py sur un PC.
SAVE "NETx:filename" Sauvegarder le programme BASIC actuel sur le serveur de fichiers reseau unite x.
DIR NETx: Afficher la liste du repertoire du serveur de fichiers reseau unite x.
LOAD "CMT:filename" Charger un programme BASIC depuis la cassette.
SAVE "CMT:filename" Sauvegarder le programme BASIC actuel sur cassette.

BASIC MZ-2Z009E (Floppy Disk)

Le BASIC Sharp MZ-2Z009E Floppy Disk original a ete ameliore pour prendre en charge le stockage sur carte SD RFS en plus de ses peripheriques natifs Disquette et Quick Disk. La version RFS demarre avec le titre "BASIC 2Z-009ERFS". Les programmes peuvent etre charges, sauvegardes et listes sur tous les peripheriques pris en charge en utilisant un prefixe de peripherique dans le nom de fichier.
Commande Parametre Description
LOAD "RFSx:filename" Charger un programme BASIC depuis le lecteur SD RFS x (1–7, mappe sur les lecteurs SD 4–10).
SAVE "RFSx:filename" Sauvegarder le programme BASIC actuel sur le lecteur SD RFS specifie.
DIR RFSx: Afficher la liste du repertoire du lecteur SD RFS specifie.
LOAD "FDx:filename" Charger un programme BASIC depuis le lecteur de disquette x.
SAVE "FDx:filename" Sauvegarder le programme BASIC actuel sur le lecteur de disquette x.
DIR FDx: Afficher la liste du repertoire de la disquette.
LOAD "QDx:filename" Charger un programme BASIC depuis le lecteur Quick Disk x.
SAVE "QDx:filename" Sauvegarder le programme BASIC actuel sur le lecteur Quick Disk x.
DIR QDx: Afficher la liste du repertoire du Quick Disk.

Architecture logicielle

L'espace User ROM a 0xE800 est divise en banques de 2 Ko, chacune contenant une copie du stub de commutation de banque afin que n'importe quelle banque puisse appeler du code dans n'importe quelle autre banque sans perturber le flux d'execution. RFS occupe 12 banques User ROM (0–11, 24 Ko) ; 4 banques supplementaires (12–15) contiennent le CBIOS CP/M. L'espace Monitor ROM a 0xC000 / 0xF000 est divise en 16 × 4 Ko pages ; trois d'entre elles (banques 6, 7 et 9) sont dediees a RFS, contenant les tables d'opcodes de l'assembleur/desassembleur Z80 et les chaines de messages. L'ensemble du ROM banque fournit 32 Ko de User ROM et 64 Ko de Monitor ROM d'espace programme sans consommer de RAM.
Le tableau suivant liste chaque module source, sa ROM cible, sa banque et sa fonction :
Module ROM cible Taille Banque Description
rfs.asm User 2 Ko 0 Point d’entree principal RFS, repartiteur de commandes et table de commandes. Contient l’infrastructure de commutation de banque partagee par toutes les banques.
rfs_bank1.asm User 2 Ko 1 Fonctions du controleur de disquette (FDC). Gere la selection de lecteur, le demarrage, la copie de disquette (FC), disquette vers bande (FD2T) et bande vers disquette (T2FD).
rfs_bank2.asm User 2 Ko 2 Controleur de carte SD. Pilote SPI, initialisation de carte SD, repertoire SDCFS et lecture/ecriture de fichiers.
rfs_bank3.asm User 2 Ko 3 Utilitaires memoire du moniteur : dump hexadecimal, editeur de memoire, copie de memoire, dump de fichier SD (DUC), lecture/ecriture de port E/S (IN / OUT), copie bande-SD (T2SD / SD2T), test d’imprimante.
rfs_bank4.asm User 2 Ko 4 Controleur CMT (cassette) : chargement, sauvegarde et verification de bande.
rfs_bank5.asm User 2 Ko 5 Fonctions utilitaires generales : impression formatee, routines de chaines et code d’aide partage.
rfs_bank6.asm User 2 Ko 6 Table d’opcodes 1 de l’assembleur/desassembleur Z80, fonction PRINTMSG et infrastructure de chaines de messages.
rfs_bank7.asm User 2 Ko 7 Table d’opcodes 2 de l’assembleur/desassembleur Z80, desassembleur Z80 (DASM), test de memoire DRAM et test du temporisateur 8253.
rfs_bank8.asm User 2 Ko 8 Assembleur Z80 interactif (ASM).
rfs_bank9.asm User 2 Ko 9 Repertoire ROM, recherche de fichier, fonctions de chargement et d’affichage (deplacees de la banque 0 pour liberer de l’espace).
rfs_bank10.asm User 2 Ko 10 Reserve / libre.
rfs_bank11.asm User 2 Ko 11 Ecran d’aide.
cbios_bank1.asm User 2 Ko 12 CP/M CBIOS : fonctions audio, RTC, clavier et utilitaires bas niveau.
cbios_bank2.asm User 2 Ko 13 CP/M CBIOS : pilote d’ecran et emulation de terminal ANSI.
cbios_bank3.asm User 2 Ko 14 CP/M CBIOS : pilote de carte SD (fournit les lecteurs CP/M A:–G:).
cbios_bank4.asm User 2 Ko 15 CP/M CBIOS : controleur de disquette.
monitor_sa1510.asm Monitor 4 Ko 0 ROM moniteur SA-1510 originale (40 colonnes).
monitor_80c_sa1510.asm Monitor 4 Ko 1 Moniteur SA-1510 adapte pour l’affichage 80 colonnes.
cbios.asm Monitor 4 Ko 2 Noyau CBIOS CP/M 2.2 (charge a 0xC000–0xCFFF).
rfs_mrom.asm Monitor 4 Ko 3 Utilitaires Monitor ROM RFS. Le code s’executant depuis la User ROM ne pouvant pas se commuter lui-meme pour scanner le reste du ROM, ces routines s’executent depuis la Monitor ROM banque 3 pour scanner et charger les fichiers MZF stockes dans la Flash RAM User ROM.
monitor_1z-013a.asm Monitor 4 Ko 4 ROM moniteur MZ-1Z-013A (variante MZ-700 / MZ-1200).
monitor_80c_1z-013a.asm Monitor 4 Ko 5 Moniteur 1Z-013A adapte pour l’affichage 80 colonnes.
rfs_mrom_bank6.asm Monitor 4 Ko 6 Table d’opcodes 1 de l’assembleur/desassembleur Z80 (copie MROM).
rfs_mrom_bank7.asm Monitor 4 Ko 7 Table d’opcodes 2 de l’assembleur/desassembleur Z80 (copie MROM).
ipl.asm Monitor 4 Ko 8 Initial Program Loader.
rfs_mrom_bank9.asm Monitor 4 Ko 9 Depot de chaines de messages RFS.

CP/M 2.2 est pris en charge avec 47 Ko de RAM programme utilisable. Seuls le CCP et le BDOS resident en RAM (et peuvent etre ecrases par des applications) ; le CBIOS lui-meme reside dans la Monitor ROM banque 2 et les banques User ROM 12–15, ne consommant aucune RAM programme.

La Monitor ROM produit egalement plusieurs variantes supplementaires de moniteur compilees en meme temps : un SA-1510 standard, un SA-1510 80 colonnes, une version Kuma-80 (selectionnee via l'indicateur KUMA80_ENA dans rfs_definitions.asm), et des variantes hi-load du SA-1510 et du SA-1510 80 colonnes utilisees lorsque la DRAM doit couvrir l'integralite de la plage 0x0000–0xCFFF.

Systeme de build

RFS se compile sous **Linux** (Debian / Ubuntu), **macOS** et **Windows** (via WSL2). La construction de RFS implique l'assemblage du code source Z80, l'empaquetage des images ROM et la creation d'images de carte SD. La chaine d'outils est presque entierement contenue dans le depot.

La methode recommandee pour compiler RFS est le script de configuration automatise propre a votre plateforme (voir Configuration et build automatises ci-dessous) — il installe les quelques outils externes necessaires, recupere le contenu, prepare l'environnement et peut lancer le premier build pour vous, sans aucune connaissance approfondie des outils ou de la configuration. Les etapes manuelles plus bas s'adressent aux utilisateurs avances et aux rebuilds partiels.

Prerequis

Outil Notes
Java (JRE 8+) Requis pour executer l’assembleur GLASS Z80. java doit etre dans le PATH.
bash Tous les scripts de build sont en bash.
perl Requis par mzftool.pl.
gcc / make Requis pour compiler cpmtools depuis les sources (fait automatiquement au premier build).
dd, cat, stat Utilitaires Linux standard utilises par les scripts d’empaquetage.

L’assembleur GLASS Z80 (glass.jar) est inclus dans le repertoire tools/ — aucune installation separee n’est necessaire.

Configuration et build automatises (recommande)

La methode recommandee pour compiler RFS est le script de configuration automatise propre a votre plateforme. Il verifie et installe les prerequis, clone le depot (si vous n'etes pas deja dans une copie de travail), telecharge les images de contenu, ecrit le fichier d'environnement et propose de lancer le premier build — le tout de maniere interactive, avec des valeurs par defaut sensees que vous pouvez accepter en appuyant sur Entree. Chaque script est autonome : copiez uniquement le fichier correspondant a votre plateforme et executez-le.

macOS / Linux / WSL — setup_RFS.sh

chmod +x setup_RFS.sh
./setup_RFS.sh

Windows 10 / 11 — setup_RFS_windows_native.ps1 (recommande — natif, sans WSL). Depuis une invite PowerShell :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1

Le script natif utilise winget pour installer Git for Windows (qui fournit bash, coreutils, perl et curl) et une Temurin JRE (Java, pour l’assembleur GLASS), clone le depot, recupere le bundle de contenu et execute ./build.sh via Git Bash — sans WSL, Docker ni redemarrage. Le build RFS ne necessite aucun compilateur C sous Windows car deux outils hote precompiles (tools/cpmcp.exe et tools/sdtool.exe) sont fournis.

Windows 10 / 11 — setup_RFS_windows.ps1 (alternative — compile dans WSL2 / Ubuntu). Depuis un PowerShell Administrateur :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows.ps1

Cette variante WSL installe WSL2 + Ubuntu s’ils ne sont pas deja presents (ceci necessite un redemarrage unique — redemarrez, lancez Ubuntu une fois depuis le menu Demarrer pour creer votre nom d’utilisateur/mot de passe Linux, puis relancez le script), puis execute setup_RFS.sh dans Ubuntu. Preferez le script natif ci-dessus sauf si vous voulez specifiquement un environnement WSL.

Questions posees par la configuration, et que faire

Chaque invite comporte une valeur par defaut sure entre crochets — la lettre en majuscule est la valeur par defaut, donc appuyer sur Entree l’accepte. Les invites apparaissent dans cet ordre :

Windows uniquement (dans PowerShell, avant le lancement de la configuration Linux) :

Invite Defaut Que faire
Continue anyway? [y/N] (uniquement si non lance en tant qu’Administrateur) Non Repondez N, rouvrez PowerShell avec Executer en tant qu’administrateur, et recommencez — l’installation de WSL necessite des droits administrateur.
Install WSL2 + Ubuntu now? [y/N] (uniquement si WSL / Ubuntu est absent) Non Repondez y. Windows installe WSL2 + Ubuntu, puis vous demande de redemarrer. Apres le redemarrage, lancez Ubuntu une fois pour creer votre utilisateur Linux, puis relancez le script.
Repo URL [https://git.eaw.app/eaw/RFS.git] depot public Appuyez sur Entree pour le depot RFS public, ou collez une autre URL (par exemple le depot de developpement prive).

macOS / Linux / WSL (dans le shell Linux / Ubuntu) :

Invite Defaut Que faire
Install now? [Y/n] (uniquement si des outils sont absents) Oui Appuyez sur Entree. Le script installe les outils manquants avec votre gestionnaire de paquets (apt / dnf / pacman, ou Homebrew sous macOS) ; il se peut qu’on vous demande votre mot de passe sudo. Sous macOS, il declenche d’abord l’installateur des Xcode Command Line Tools et necessite Homebrew.
Repo URL [https://git.eaw.app/eaw/RFS.git]: (uniquement si vous n’etes pas deja dans une copie de travail) depot public Appuyez sur Entree pour le depot public, ou collez l’URL du depot prive. (Ignore sous Windows — l’etape PowerShell a deja transmis votre choix.)
Install directory [~/RFS]: (uniquement lors du clonage) ~/RFS Appuyez sur Entree pour cloner dans ~/RFS, ou saisissez un autre chemin.
Remove <dir> and re-clone …? [y/N] (uniquement si ce repertoire contient deja un depot different) Non Repondez y uniquement si vous etes sur de vouloir supprimer ce repertoire et recloner ; sinon N et choisissez un autre repertoire d’installation.
Download and install them now? [Y/n] (images de contenu, ~110 Mo) Oui Appuyez sur Entree pour telecharger le contenu MZF / disque / CP/M / BASIC depuis RFS_Files.zip — necessaire pour un build complet. Repondez n uniquement si vous les avez deja via une copie de travail SharpSoft voisine.
Run the first build now (./build.sh -m …)? [Y/n] Oui Appuyez sur Entree pour compiler immediatement — ceci verifie l’ensemble de l’environnement. Le premier build utilise -m pour traiter les sources MZF dans MZB/ et est plus lent que les builds ulterieurs.

Il se peut aussi qu’on vous demande votre mot de passe sudo (installation de paquets) et vos identifiants git si vous avez choisi un depot prive.

Apres la configuration — recompiler

Lorsque la configuration se termine, elle affiche le chemin de la copie de travail. Pour recompiler ulterieurement :

cd ~/RFS                 # ou le repertoire que vous avez choisi
source ./rfs_env.sh      # macOS uniquement (ajoute GNU coreutils + le JRE au PATH) ; sans effet ailleurs
./build.sh -m            # PREMIER build : traiter MZF -> MZB, puis tout compiler
./build.sh               # builds ulterieurs (ne relancez -m que si les sources MZF changent)
./build.sh -h            # lister les variantes et options

Sous Windows, ouvrez le terminal Ubuntu (menu Demarrer → “Ubuntu”, ou tapez wsl dans PowerShell) et executez les memes commandes dans ~/RFS. Les images ROM apparaissent dans ~/RFS/roms.

build.sh compile toutes les variantes materielles par defaut ; passez un ou plusieurs noms de variantes (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k, ou all) pour ne compiler que celles-ci. Selectionner une variante configure tout automatiquement — aucune edition de source necessaire. Options : -m (traiter les MZF), -s (ignorer l’assemblage partage), -c (nettoyer), -v (verbeux), -h (aide).

Avance : indicateurs de cible de build

Pour la plupart des builds, vous n’avez pas besoin de cette section — selectionner une variante avec build.sh (ci-dessus) configure tout automatiquement. Le mecanisme sous-jacent est un ensemble d’indicateurs dans asm/include/rfs_definitions.asm ; exactement un des suivants est mis a 1 (tous les autres a 0) pour une cible donnee, ce que build.sh fait pour vous par variante. Ne les editez a la main que pour une configuration personnalisee :

Indicateur Cible Description
BUILD_ROMDISK Carte RomDisk MZ-80A avec 4x512 Ko Flash RAM + extension carte SDXC.
BUILD_SFD700 SFD-700 Carte d’interface disquette Sharp. Pas de carte SD.
BUILD_PICOZ80 picoZ80 Carte de remplacement Z80 basee sur Raspberry Pi Pico.

Indicateurs optionnels supplementaires dans le meme fichier :

Indicateur Defaut Description
KUMA80_ENA 0 Mettre a 1 si la mise a niveau Kuma 40/80 colonnes est installee.
VIDEOMODULE_ENA 0 Mettre a 1 si le Video Module couleur 40/80 colonnes est installe.
FUSIONX_ENA 0 Mettre a 1 lors de l’execution de RFS sur la carte tranZPUter FusionX.
HW_SPI_ENA 1 SPI materiel (PCB RomDisk v2+). Laisser a 1 pour toutes les cartes actuelles.
ENADEBUG 0 Activer la sortie de debogage lors de l’assemblage.

Build manuel et ce que fait build.sh

Si vous preferez ne pas utiliser le script de configuration (ou si vous scriptez un build CI), vous pouvez cloner et compiler directement — vous devez toujours avoir les prerequis installes et, sur un clone autonome neuf, recuperer vous-meme les images de contenu (ou executer setup_RFS.sh, qui le fait pour vous) :

git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS

# Build complet (assemble tous les ROMs, empaquette les images ROM, cree l'image de carte SD) :
./build.sh

# Build complet incluant le retraitement de tous les fichiers d'application MZF
# (necessaire uniquement lorsque les fichiers source MZF dans MZF/ ont change) :
./build.sh -m

build.sh execute les etapes suivantes dans l’ordre :

  1. Compile cpmtools depuis les sources (premier lancement uniquement) et ajoute le resultat au PATH.
  2. tools/assemble_rfs.sh — assemble rfs.asm et rfs_mrom.asm en roms/rfs.rom et roms/rfs_mrom.rom.
  3. tools/assemble_cpm.sh — assemble le CBIOS CP/M 2.2 (cbios.asm, cbios_bank1–4.asm, cpm22.asm) en roms/*.rom.
  4. tools/assemble_roms.sh — assemble toutes les variantes du moniteur (SA-1510, 80c SA-1510, 1Z-013A, variantes hi-load, version Kuma, IPL) et les fichiers d’application MZF (SA-5510, variantes MS-BASIC, etc.) dans roms/ et MZB/.
  5. tools/make_roms.sh — empaquette les ROMs assemblees et les applications MZF en images Flash ROM (voir Fichiers de sortie ci-dessous).
  6. tools/make_cpmdisks.sh — cree les images de disques CP/M en format RAW et CPC Extended Disk Format pour chacun des ensembles de lecteurs CP/M pre-remplis.
  7. tools/make_sdcard.sh — assemble l’image finale de carte SD combinant 10 images de lecteurs RFS et 7 images de disques CP/M.

Les scripts individuels peuvent egalement etre executes directement depuis le repertoire tools/ pour des builds partiels.

Fichiers de sortie

Apres un build reussi, le repertoire roms/ contient :

Fichier Puce Flash Description
MROM_ROMDISK_256.bin SST39SF040 (Monitor ROM) Image Monitor ROM pour le build RomDisk. Contient SA-1510, 80c SA-1510, CP/M CBIOS, utilitaires RFS MROM, moniteurs 1Z-013A, tables d’opcodes assembleur/desassembleur, IPL et chaines de messages sur 16x4 Ko pages.
MROM_PICOZ80_256.bin SST39SF040 (Monitor ROM) Image Monitor ROM pour le build picoZ80 (ordre des banques different de ROMDISK).
USER_ROM_256.bin SST39SF040 (User ROM 1) User ROM 1 : banques RFS 0–11, banques CP/M CBIOS 12–15, image CP/M 2.2 et ensemble d’applications MZF empaquetees.
USER_ROM_II_256.bin SST39SF040 (User ROM 2) User ROM 2 : applications MZF supplementaires.
USER_ROM_III_256.bin SST39SF040 (User ROM 3) User ROM 3 : applications MZF supplementaires.
SFD700_256.bin SST39SF040 ROM SFD-700 : ROM disquette AFI MZ-80A (0x00000–0x00FFF), ROM disquette MZ-700 (0x01000–0x01FFF), firmware RFS (0x02000–0x0BFFF), puis systeme de fichiers ROM.
SHARP_MZ80A_RFS_IMAGE_0–9.img Carte SD Dix images de lecteurs RFS (une par lecteur 0–9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img Carte SD Image de carte SD combinee : 10 lecteurs RFS suivis de 7 images de disques CP/M. A copier directement sur une carte SD.

Programmation des Flash ROMs

Les images ROM sont ecrites sur des puces Flash RAM SST39SF040 (512 Ko) a l’aide d’un programmeur TL866 ou compatible :

# Monitor ROM (build RomDisk) :
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/MROM_ROMDISK_256.bin

# User ROM 1 :
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/USER_ROM_256.bin

# SFD-700 :
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/SFD700_256.bin

Ecriture de l'image de carte SD

Ecrivez l’image de carte SD combinee directement sur la carte SD avec dd :

# Remplacez /dev/sdX par votre peripherique de carte SD :
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync

Aucun partitionnement requis. L’image SDCFS commence au secteur 0. Inserez la carte SD dans le lecteur sur la carte RomDisk.

Ajout d'applications aux lecteurs ROM

Les applications stockees dans les lecteurs Flash ROM doivent d’abord etre converties du format MZF en images binaires alignees par secteur. Placez les fichiers MZF dans le sous-repertoire approprie sous MZF/ et executez :

tools/processMZFfiles.sh

Cela convertit tous les fichiers MZF en images alignees par secteur de 128 octets et 256 octets dans MZB/. Ils sont ensuite automatiquement pris en charge par make_roms.sh.

Pour choisir quelles applications apparaissent dans chaque lecteur ROM, editez tools/make_roms.sh et ajustez les appels addMZFToROMImageList. Chaque appel prend quatre indicateurs (inclure dans le build ROMDISK, inclure dans le build SFD700, inclure dans le build picoZ80, reserve) et le chemin vers le binaire sectorise :

# Format :
#   addMZFToROMImageList  <ROMDISK>  <SFD700>  <picoZ80>  <reserved>  "<MZB path>"
#
# Exemple — inclure dans tous les builds :
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"

# Exemple — RomDisk et picoZ80 uniquement :
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"

Les applications sont empaquetees dans l’ordre indique, remplissant d’abord User ROM 1, puis User ROM 2 et 3. Placez les applications que vous souhaitez toujours disponibles en haut de la liste.

Reference des outils de build

Script / Outil Description
build.sh Script de build de premier niveau. Execute toutes les etapes ci-dessous dans l’ordre. Passez -m pour aussi retraiter les fichiers d’application MZF.
tools/assemble_rfs.sh Assemble rfs.asm et rfs_mrom.asmroms/rfs.rom, roms/rfs_mrom.rom.
tools/assemble_cpm.sh Assemble le CBIOS et le noyau CP/M 2.2 → roms/*.rom.
tools/assemble_roms.sh Assemble toutes les variantes ROM du moniteur et les binaires d’application MZF. Gere les quatre variantes de build MS-BASIC via un BUILD_VERSION EQU ecrit dans include/msbasic_buildversion.asm avant chaque passe.
tools/make_roms.sh Empaquette les binaires ROM et MZF en images Flash ROM pour les cibles ROMDISK, SFD700 et picoZ80.
tools/make_cpmdisks.sh Cree les images de disques CP/M en format RAW (pour carte SD) et CPC Extended Disk Format (pour emulateurs de disquette ou copie physique).
tools/make_sdcard.sh Combine les images de lecteurs RFS et les images de disques CP/M en une seule image de carte SD.
tools/processMZFfiles.sh Convertit les fichiers d’application MZF en images alignees par secteur de 128 octets et 256 octets dans MZB/.
tools/mzftool.pl Script Perl pour creer, extraire et inspecter les images au format MZF.
tools/sdtool Outil binaire qui construit la structure de repertoire de la carte SD RFS et la remplit avec des applications MZF / binaires.
tools/nasconv Convertit les fichiers d’image cassette NASCOM au format chargeable sur MZ-80A, en reassignant les valeurs de tokens MS-BASIC si necessaire.
tools/glass.jar Assembleur GLASS Z80 fourni (Java). Utilise par les trois scripts d’assemblage.
tools/MZFD/MZFDTool Cree et gere les images de disquette brutes pour le FDC MZ-700. Commandes : format (creer une image vierge), dir (lister le repertoire), add (ajouter un fichier MZF), extract (extraire un fichier en MZF), boot (definir le programme de demarrage). Image par defaut : MZ700.img.
tools/MZQD/MZQDTool Cree et gere les images Quick Disk (QD) pour le MZ-700. Commandes : format (creer une image vierge), dir (lister le repertoire), add (ajouter un fichier MZF). Image par defaut : MZ700.qd.
cpmtools/ Source cpmtools (cpmcp, cpmls, cpmrm, etc.). Compile automatiquement au premier build et installe dans tools/.

SD Card Filing System

Plutot que d'implementer un systeme de fichiers FAT (qui serait trop volumineux pour les banques ROM de 2 Ko et 4 Ko), RFS utilise un systeme de fichiers simple specialement concu appele SD Card Filing System (SDCFS). Les premieres cartes v1 utilisaient une interface SPI logicielle bit-bang ; la carte v2.0 a ajoute le SPI materiel, offrant des vitesses d'acces au niveau du ROM.

Structure SDCFS

Chaque image SDCFS contient un repertoire de 32 octets par entree pour jusqu'a 256 fichiers, suivi de 256 blocs de fichiers de taille fixe. Dix images SDCFS (lecteurs 0–9) sont stockees au debut de la carte SD. Le reste de la carte SD contient les images de disques CP/M.
Chaque entree de repertoire est basee sur l'en-tete MZF standard :
FLAG1 FLAG2 FILE NAME START SECTOR SIZE LOAD ADDR EXEC ADDR RESERVED
1 Byte 1 Byte 17 Bytes 4 Bytes 2 Bytes 2 Bytes 2 Bytes 3 Bytes
Champ Description
FLAG1 Bit 7 = 1 : entree valide. Bit 7 = 0 : inactive / supprimee.
FLAG2 Type d’execution MZF (0x01 = binaire).
FILE NAME Nom de fichier MZF standard de 17 caracteres.
START SECTOR Premier secteur dans cette image de lecteur ou les donnees du fichier commencent.
SIZE Nombre reel d’octets des donnees du fichier.
LOAD ADDR Adresse RAM ou charger les donnees du fichier.
EXEC ADDR Adresse d’execution automatique pour les fichiers binaires.
RESERVED Non utilise actuellement.

Chaque bloc de fichier a une taille fixe de 64 Ko, correspondant a la taille maximale du bloc CMT (cassette). Cela simplifie la disposition et permet de lire ou d’ecrire les fichiers exactement comme s’ils etaient sur bande, permettant des operations de copie SD-CMT transparentes.

Disposition de la carte SD

ADDRESS    SECTOR   CONTENT
00000000   00000  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS DRIVE 0                                                │
00000000   00000  │  Directory entry 000 (32 bytes)                             │
                  │  ...                                                        │
00001FE0   0000F  │  Directory entry 255 (32 bytes)                             │
00002000   00010  │  File block 0     (64 KB)                                   │
                  │  ...                                                        │
00FF2000   7FF90  │  File block 255   (64 KB)                                   │
01001FFF   8000F  └─────────────────────────────────────────────────────────────┘
                  ...  (les lecteurs RFS 1–8 suivent le meme schema)
09012000   48090  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS DRIVE 9                                                │
0A013FFF   5009F  └─────────────────────────────────────────────────────────────┘
                  ... remplissage jusqu'a la limite de 256 Mo ...
10000000   80000  ┌─────────────────────────────────────────────────────────────┐
                  │  CP/M DISK IMAGE 0   (16 MB, 32 sectors × 1024 tracks)     │
11000000   88000  ├─────────────────────────────────────────────────────────────┤
                  │  CP/M DISK IMAGE 1                                          │
                  │  ...                                                        │
XX000000          │  CP/M DISK IMAGE n                                          │
                  └─────────────────────────────────────────────────────────────┘

Organisation de la carte SD

L’image de carte SD construite par les outils du depot est pre-remplie comme suit :

Lecteur RFS Contenu
0 Programmes en code machine communs et MZ-80A.
1 Programmes en code machine MZ-80K.
2 Programmes en code machine MZ-700.
3 Programmes en code machine MZ-800 / MZ-1500.
4 Programmes en code machine MZ-80B / MZ-2000.
5 Programmes BASIC, type 2 (MZ-80A).
6 Programmes BASIC, type 2 (MZ-80K).
7 Programmes BASIC, type 5 (MZ-700 / MZ-800).
8 Autres programmes / divers.
9 Autres programmes / divers.
Lecteur CP/M User# Image disque Contenu
0 0 CPM00_SYSTEM Programmes systeme CP/M
  1 CPM01_TURBOP Turbo Pascal
  2 CPM02_HI_C Hi-Soft C
  3 CPM03_FORTRAN80 Fortran 80
  4 CPM04_MBASIC Microsoft BASIC 80/85
  5–7 CPM05–07_COBOL80 Cobol v1.3, v2.0, Cobol 80
  8 CPM08_Z80FORTH Z80 Forth
  9 CPM09_CPMTEX CP/M TeX
  10 CPM10_DISKUTILFUNC5 Utilitaires de disque
  11 CPM11_MAC80 Macro Assembler 80
  12 CPM29_ZSID_v14 ZSID Debugger
  13–14 CPM32–33_ZCPR3 Amelioration CCP ZCPR3
1 0 CPM12_PASCALMTP_v561 Pascal v5.61
  1 CPM26_TPASCAL_v300a Turbo Pascal v3.00a
  2–11 CPM13–22_MTPUG_01–10 Pascal User Group Disks 01–10
2 0–2 CPM23–25_PLI / PLI80 PLI Compiler, PLI 80 v1.3, v1.4
  3 CPM28_PLM80 PLM 80
  4–6 CPM27,30,31_WORDSTAR WordStar v3.0, v3.3, v4.0
3–6 0–9 CPM_MC_C0–F9 Collection Grant Searle CP/M disques C0–F9

Manuels

La documentation detaillee du Rom Filing System est disponible dans trois manuels separes :
Manuel Description
Manuel utilisateur Obtenir RFS, reference des commandes du moniteur, utilisation des lecteurs SD, BASIC, CP/M et depannage
Guide technique Plateformes materielles, architecture memoire, commutation de banque, conception SDCFS, CBIOS CP/M et reference complete du systeme de build
Guide du developpeur Introduction a l’assembleur Z80, parcours complets des modules sources (y compris les mecanismes internes de commutation de banque), et guides pour l’ajout de nouvelles commandes et cibles materielles

Remerciements

Lorsqu'un composant est base sur ou derive d'une conception tierce, l'avis de copyright de l'auteur original est inclus dans l'en-tete du fichier source concerne. Tous les logiciels tiers sont, a notre meilleure connaissance, open source et librement utilisables. Si un composant s'avere etre soumis a des restrictions de licence, il sera supprime et un lien approprie sera fourni a la place.

Licences

Cette conception, materiel et logiciel, est sous licence GNU Public Licence v3.

Aucune utilisation commerciale de cette conception ou de tout composant materiel/firmware ne peut etre faite sans l'autorisation expresse de l'auteur. Cette condition prevaut sur tous les droits accordes par la licence GNU GPL 3.

La licence publique generale GNU v3

Les fichiers sources et binaires de ce projet marques comme GPL v3 sont des logiciels libres : vous pouvez les redistribuer et/ou les modifier selon les termes de la licence publique generale GNU telle que publiee par la Free Software Foundation, soit la version 3 de la licence, soit (a votre choix) toute version ulterieure.

Les fichiers sources sont distribues dans l'espoir qu'ils seront utiles, mais SANS AUCUNE GARANTIE ; sans meme la garantie implicite de QUALITE MARCHANDE ou d'ADEQUATION A UN USAGE PARTICULIER. Voir la licence publique generale GNU pour plus de details.

Vous devriez avoir recu une copie de la licence publique generale GNU avec ce programme. Sinon, voir http://www.gnu.org/licenses/.