Systeme de fichiers ROM (RFS) — Guide technique
Guide technique RFS
Ce guide documente l'integration materielle, l'architecture memoire, la disposition des modules logiciels, la conception du SD Card Filing System, l'implementation CP/M et le systeme de build complet du Rom Filing System. Il est destine aux utilisateurs qui souhaitent comprendre le fonctionnement de RFS au niveau systeme, porter RFS sur un nouveau materiel ou effectuer une compilation complete depuis les sources.
Pour l'utilisation quotidienne et la reference des commandes du moniteur, voir le
Manuel utilisateur. Pour les parcours du code source en assembleur Z80, voir le
Guide du developpeur.
RFS cible quatre plateformes materielles. Chacune est selectionnee a la compilation via un indicateur dans asm/include/rfs_definitions.asm. Les images binaires resultantes different en disposition des banques, ensemble de fonctionnalites et adresses ROM utilisees.
Carte RomDisk
La cible RFS originale et la plus capable. Le PCB RomDisk se branche dans le slot d'extension du Sharp MZ-80A et fournit :
- Jusqu'a 4 x 512 Ko SST39SF040 Flash RAM — remplace la ROM moniteur et fournit trois puces User ROM, offrant jusqu'a 2 Mo de stockage ROM en Flash.
- 512 Ko de RAM statique — disponible comme espace de travail pagine supplementaire (usage futur).
- Lecteur de carte SDXC avec interface SPI materielle (cartes v2+) ou SPI bit-bang logiciel (cartes v1, via le port parallele imprimante).
- Un verrou code (cartes v2.0+) qui protege les registres de controle de banque — le verrou ne s'ouvre qu'apres une sequence fixe de lectures des 8 octets superieurs de la plage d'adresses User ROM (0xEFF8–0xEFFF), empechant les commutations de banque accidentelles en fonctionnement normal.
La puce ROM moniteur (a 0x0000–0x0FFF sur le MZ-80A) est remplacee par un socket Flash RAM pagine adapte pour apparaitre comme une fenetre de 4 Ko dans la puce complete de 512 Ko. De meme, la User ROM (a 0xE800–0xEFFF) est remplacee par une fenetre paginee de 2 Ko.
Interface disquette SFD-700
La carte d'interface disquette SFD-700 mkII inclut une Flash ROM de 512 Ko. RFS occupe des pages de cette Flash ROM a cote du code de demarrage AFI disquette :
- 0x00000–0x00FFF — ROM de demarrage disquette AFI MZ-80A (originale, necessaire pour l'astuce DRQ 2 MHz).
- 0x01000–0x01FFF — ROM de demarrage disquette AFI MZ-700.
- 0x02000–0x0BFFF — firmware RFS (10 banques User ROM de 2 Ko, equivalent aux banques User ROM 0–4).
- 0x0C000 et au-dela — systeme de fichiers ROM (programmes stockes comme images MZF).
Sur la version SFD-700, le code User ROM est assemble pour demarrer a 0xE000 et s'aligne sur 0xE300 (respectant la plage d'I/O mappee en memoire du MZ-700). Il n'y a pas de carte SD ; les commandes carte SD sont exclues de cette version.
picoZ80
La carte picoZ80 (remplacement Z80 base sur RP2350) emule la carte memoire complete du MZ-80A en PSRAM et Flash. RFS s'execute dans l'espace ROM emule, utilisant les memes adresses de banque que la version RomDisk. La picoZ80 fournit son propre stockage carte SD connecte en SPI, de sorte que l'ensemble complet des fonctionnalites RomDisk (lecteurs carte SD, copie bande↔SD, etc.) est disponible.
RFS s'execute sous la persona machine que la picoZ80 presente a l'hote. En plus du MZ-80A, cela inclut desormais la persona Sharp MZ-80K, qui peut associer 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). Avec une carte MZ80AFI, le CBIOS CP/M de RFS detecte automatiquement les disques CP/M originaux du MZ-80K (secteurs de 128 octets, non inverses) et les monte comme lecteurs CP/M C:/D:.
Architecture memoire
Le CPU Z80 du Sharp MZ-80A adresse 64 Ko de memoire. RFS loge l'integralite de son firmware dans les deux fenetres ROM sans consommer de RAM, laissant toute la plage 0x1200–0xCFFF disponible pour les programmes utilisateur.
Disposition de l'espace d'adressage Z80
Address Size Contents
─────────────────────────────────────────────────────────────────────
0x0000 4 KB Monitor ROM (MROM) — 4 KB window into 512 KB Flash
Paged across 16 banks:
banks 0–5 = monitor variants + CP/M CBIOS + RFS mrom utils,
banks 6–7 = ASM/DASM opcode tables,
bank 8 = IPL, bank 9 = RFS message strings,
banks 10–15 = reserved
0x1000 256 B MZ-80A system variables / stack
0x1200 ~46 KB User RAM (main program area)
0xCFFF
0xD000 12 KB Video RAM + memory-mapped I/O (MZ-80A hardware)
0xE800 2 KB User ROM (UROM) — 2 KB window into 512 KB Flash
Paged: banks 0–11 = RFS modules,
banks 12–15 = CP/M CBIOS banks
Note: on the SFD-700 build the UROM window starts at
0xE300 (0xE000–0xE2FF is MZ-700 memory-mapped I/O).
The command table (CMDTABLE2) is placed at 0xE300 and
the main bank code remains at 0xE800 as on other builds.
0xEFFF
0xF000 4 KB Floppy AFI ROM / FDC ROM (SFD-700 MROM location)
─────────────────────────────────────────────────────────────────────
Banques Monitor ROM (4 Ko chacune)
La fenetre Monitor ROM a 0x0000–0x0FFF est commutee par banque sur 16 pages stockees dans la puce Flash de la ROM moniteur. Parmi celles-ci, trois pages (banques 6, 7 et 9) sont dediees a RFS — contenant respectivement les tables d'opcodes de l'assembleur/desassembleur Z80 et les chaines de messages :
| Banque |
Module |
Description |
| 0 |
monitor_sa1510.asm |
ROM moniteur SA-1510 originale — 40 colonnes. Banque par defaut a la mise sous tension. |
| 1 |
monitor_80c_sa1510.asm |
SA-1510 adapte pour l’affichage 80 colonnes (necessite la mise a niveau Kuma). |
| 2 |
cbios.asm |
Noyau CBIOS CP/M 2.2 — relocalise ici lors du demarrage CP/M. |
| 3 |
rfs_mrom.asm |
Utilitaires Monitor ROM RFS. S’execute depuis l’espace MROM pour scanner et charger les fichiers MZF stockes dans la Flash User ROM, le code User ROM ne pouvant se paginer hors de lui-meme. |
| 4 |
monitor_1z-013a.asm |
ROM moniteur MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| 5 |
monitor_80c_1z-013a.asm |
Moniteur 1Z-013A adapte pour l’affichage 80 colonnes. |
| 6 |
rfs_mrom_bank6.asm |
Table d’opcodes 1 assembleur/desassembleur Z80. |
| 7 |
rfs_mrom_bank7.asm |
Table d’opcodes 2 assembleur/desassembleur Z80. |
| 8 |
ipl.asm |
Initial Program Loader. |
| 9 |
rfs_mrom_bank9.asm |
Depot de chaines de messages RFS. |
| 10–15 |
— |
Reserve / libre. |
Banques User ROM (2 Ko chacune)
La fenetre User ROM a 0xE800–0xEFFF est commutee par banque sur 16 banques dans les puces Flash User ROM — 12 banques pour RFS (banques 0–11) et 4 banques pour le CBIOS CP/M (banques 12–15) :
| Banque |
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 disquette (FDC) — demarrage disquette (FL), repertoire disquette (FD), copie disquette (FC), disquette-vers-bande (FD2T), bande-vers-disquette (T2FD) et selection de lecteur. L’ensemble complet des commandes FDC est assemble sur toutes les versions. |
| 2 |
rfs_bank2.asm |
Controleur carte SD — pilote SPI, initialisation carte SD, repertoire SDCFS et lecture/ecriture de fichiers. Non assemble pour la version SFD-700 (pas de materiel carte SD). |
| 3 |
rfs_bank3.asm |
Utilitaires memoire du moniteur — vidage hexadecimal (D), edition memoire (M), copie memoire (CP), vidage de fichier carte SD (DUC), lecture/ecriture port I/O (IN / OUT). La copie bande↔SD (T2SD/SD2T) n’est incluse que dans les versions RomDisk / picoZ80. |
| 4 |
rfs_bank4.asm |
Controleur CMT (cassette) — chargement, sauvegarde et verification de bande. |
| 5 |
rfs_bank5.asm |
Fonctions utilitaires generales — impression formatee, routines de chaines, code helper partage. |
| 6 |
rfs_bank6.asm |
Table d’opcodes 1 assembleur/desassembleur Z80, fonction PRINTMSG et infrastructure de chaines de messages. |
| 7 |
rfs_bank7.asm |
Table d’opcodes 2 assembleur/desassembleur Z80, desassembleur Z80 (DASM), test memoire DRAM, test timer 8253. |
| 8 |
rfs_bank8.asm |
Assembleur Z80 interactif (ASM). |
| 9 |
rfs_bank9.asm |
Repertoire ROM, recherche de fichier, fonctions de chargement et d’affichage (deplacees de la banque 0 vers de l’espace libre). |
| 10 |
rfs_bank10.asm |
Reserve / libre. |
| 11 |
rfs_bank11.asm |
Ecran d’aide. |
| 12 |
cbios_bank1.asm |
CP/M CBIOS — fonctions audio, RTC, clavier et utilitaires bas niveau. |
| 13 |
cbios_bank2.asm |
CP/M CBIOS — pilote d’ecran et emulation de terminal ANSI. |
| 14 |
cbios_bank3.asm |
CP/M CBIOS — pilote carte SD (fournit les lecteurs CP/M A:–G:). |
| 15 |
cbios_bank4.asm |
CP/M CBIOS — controleur disquette. Detecte automatiquement la taille de secteur via la carte MZ80AFI (256 octets MZ-80A contre 128 octets MZ-80K) et peut lire directement les disques CP/M originaux du MZ-80K, en les mappant sur les lecteurs CP/M C:/D:. |
Mecanisme de commutation de banque
Comme le Z80 ne peut voir qu'une tranche de 2 Ko de la User ROM a la fois, chaque banque contient une copie du
stub de commutation de banque — un petit bloc de code fixe a une adresse connue dans la fenetre de 2 Ko. Lorsque la banque 0 doit appeler une routine dans la banque 3, elle :
- Ecrit le numero de banque de destination dans le registre de verrou de banque materiel.
- Saute au point d'entree bien connu de la banque nouvellement mappee.
- Execute la routine requise.
- Reecrit la banque 0 dans le verrou et retourne.
Ce mecanisme signifie que les 12 banques RFS (12 x 2 Ko = 24 Ko) plus les 4 banques CBIOS (4 x 2 Ko = 8 Ko) — 32 Ko au total — sont accessibles depuis n'importe quel contexte d'execution, meme si seuls 2 Ko sont visibles a la fois. Le stub de commutation de banque occupe les 32 premiers octets de chaque banque (0xE800–0xE81F), et la table de commutation de banque commence a 0xE800 + 0xB0. Point critique : aucune instruction de boucle ne doit jamais s'etendre sur la plage 0xEFF8–0xEFFF sur les cartes RomDisk v2+, car ces adresses declenchent la sequence de deverrouillage du verrou code.
Architecture logicielle
La table complete des modules — chaque fichier source, sa ROM cible, sa banque et sa fonction :
| Module |
ROM |
Banque |
Taille |
Description |
| rfs.asm |
User |
0 |
2 KB |
Repartiteur de commandes, table de commandes, infrastructure de commutation de banque. |
| rfs_bank1.asm |
User |
1 |
2 KB |
Controleur disquette — selection de lecteur, demarrage FDC, copie disquette (FC), disquette-vers-bande (FD2T), bande-vers-disquette (T2FD) (RomDisk/picoZ80) ; saut AFI FDCK uniquement (SFD-700). |
| rfs_bank2.asm |
User |
2 |
2 KB |
Controleur carte SD — SPI, repertoire SDCFS, lecture/ecriture de fichiers. Non assemble pour la version SFD-700. |
| rfs_bank3.asm |
User |
3 |
2 KB |
Utilitaires memoire — D, M, CP, DUC, IN, OUT (toutes versions) ; T2SD, SD2T (RomDisk / picoZ80 uniquement). |
| rfs_bank4.asm |
User |
4 |
2 KB |
Controleur CMT — chargement, sauvegarde, verification de bande. |
| rfs_bank5.asm |
User |
5 |
2 KB |
Utilitaires generaux — routines d’impression, helpers de chaines. |
| rfs_bank6.asm |
User |
6 |
2 KB |
Table d’opcodes 1 assembleur/desassembleur Z80, fonction PRINTMSG, infrastructure de chaines de messages. |
| rfs_bank7.asm |
User |
7 |
2 KB |
Table d’opcodes 2 assembleur/desassembleur Z80, DASM, test DRAM, test timer. |
| rfs_bank8.asm |
User |
8 |
2 KB |
Assembleur Z80 interactif (ASM). |
| rfs_bank9.asm |
User |
9 |
2 KB |
Repertoire ROM, recherche de fichier, fonctions de chargement et d’affichage (deplacees de la banque 0). |
| rfs_bank10.asm |
User |
10 |
2 KB |
Reserve / libre. |
| rfs_bank11.asm |
User |
11 |
2 KB |
Ecran d’aide. |
| cbios_bank1.asm |
User |
12 |
2 KB |
CP/M CBIOS — audio, RTC, clavier, utilitaires bas niveau. |
| cbios_bank2.asm |
User |
13 |
2 KB |
CP/M CBIOS — pilote d’ecran, emulateur de terminal ANSI. |
| cbios_bank3.asm |
User |
14 |
2 KB |
CP/M CBIOS — pilote carte SD (lecteurs CP/M A:–G:). |
| cbios_bank4.asm |
User |
15 |
2 KB |
CP/M CBIOS — controleur disquette. |
| monitor_sa1510.asm |
Monitor |
0 |
4 KB |
ROM moniteur SA-1510 originale (40 colonnes). |
| monitor_80c_sa1510.asm |
Monitor |
1 |
4 KB |
SA-1510 adapte pour l’affichage 80 colonnes. |
| cbios.asm |
Monitor |
2 |
4 KB |
Noyau CBIOS CP/M 2.2 (relocalise a 0xC000 lors du demarrage CP/M). |
| rfs_mrom.asm |
Monitor |
3 |
4 KB |
Utilitaires Monitor ROM RFS — scan ROM, chargement MZF. |
| monitor_1z-013a.asm |
Monitor |
4 |
4 KB |
ROM moniteur MZ-1Z-013A (variante MZ-700 / MZ-1200). |
| monitor_80c_1z-013a.asm |
Monitor |
5 |
4 KB |
1Z-013A adapte pour l’affichage 80 colonnes. |
| rfs_mrom_bank6.asm |
Monitor |
6 |
4 KB |
Table d’opcodes 1 assembleur/desassembleur Z80. |
| rfs_mrom_bank7.asm |
Monitor |
7 |
4 KB |
Table d’opcodes 2 assembleur/desassembleur Z80. |
| ipl.asm |
Monitor |
8 |
4 KB |
Initial Program Loader. |
| rfs_mrom_bank9.asm |
Monitor |
9 |
4 KB |
Depot de chaines de messages RFS. |
CP/M 2.2 offre 47 Ko de RAM programme utilisable. Le CCP et le BDOS resident en RAM et peuvent etre ecrases par de grandes applications (ils sont rechargees au demarrage a chaud). Le CBIOS reside entierement dans la banque 2 de la Monitor ROM et les banques 12–15 de la User ROM, ne consommant aucune RAM programme.
La Monitor ROM produit egalement plusieurs images variantes supplementaires a la compilation : des variantes hi-load de SA-1510 et de 80c SA-1510 (utilisees lorsque la DRAM doit s'etendre sur 0x0000–0xCFFF), et des variantes Kuma-80 (selectionnees via l'indicateur
KUMA80_ENA).
SD Card Filing System (SDCFS)
Plutot que d'implementer FAT (qui serait trop volumineux pour les banques ROM de 2 Ko disponibles), RFS utilise un systeme de fichiers concu sur mesure appele SD Card Filing System (SDCFS). La conception privilegie la simplicite et une empreinte ROM reduite plutot que la flexibilite.
Structure du repertoire
Chaque image de lecteur SDCFS contient un repertoire plat de 256 entrees maximum. Chaque entree fait exactement 32 octets, basee sur le format d'en-tete de bande MZF standard :
| Champ |
Octets |
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 cette image de lecteur ou commence le bloc de donnees du fichier. |
| 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’execution automatique pour les fichiers binaires (saut apres chargement). |
| RESERVED |
3 |
Non utilise actuellement. |
Le repertoire occupe les premiers 8 Ko de chaque image de lecteur (256 entrees x 32 octets). Les donnees de fichier suivent immediatement, a partir de la 256e limite de 32 octets. Chaque fichier se voit allouer un bloc fixe de 64 Ko — correspondant a la taille maximale de bloc de bande CMT — ce qui maintient une disposition d'une simplicite triviale et fait de la copie SD↔bande un transfert direct octet par octet.
Disposition de la carte SD
ADDRESS CONTENT
────────────────────────────────────────────────────────────
0x00000000 RFS DRIVE 0
0x00000000–0x00001FE0 Directory (256 × 32 B)
0x00002000–0xFF2000 File blocks (256 × 64 KB)
0x01002000 RFS DRIVE 1 (same structure)
...
0x09012000 RFS DRIVE 9 (same structure)
0x0A014000 (padding to 256 MB boundary)
────────────────────────────────────────────────────────────
0x10000000 CP/M DISK IMAGE 0 (16 MB — 32 sectors × 1024 tracks)
0x11000000 CP/M DISK IMAGE 1
...
0xXX000000 CP/M DISK IMAGE 6
────────────────────────────────────────────────────────────
Aucune table de partition n'est ecrite. L'image SDCFS commence a l'octet 0 de la carte SD. Les images de disque CP/M commencent a la limite de 256 Mo pour laisser de la place aux 10 lecteurs RFS quel que soit leur taux de remplissage.
Implementation CP/M 2.2
Processus de demarrage
Le demarrage CP/M sous RFS se deroule en deux phases :
- Phase 1 — demarrage AFI : le code ROM AFI (Auto Floppy Interface) original du MZ-80A a 0xF000 lit le premier secteur de la disquette ou le bloc de demarrage de la carte SD. Il verifie la presence des octets marqueurs
0x02 + "IPLPRO" a l'octet 0 (la signature de disque amorcable CP/M du MZ-80A). S'il les trouve, il passe le controle au chargeur de second etage encapsule dans ce secteur.
- Phase 2 — chargement CCP+BDOS+CBIOS : le chargeur de second etage lit le CCP, le BDOS et le CBIOS depuis le disque vers la RAM a partir de 0x9C00. Une fois charges, le point d'entree de demarrage a froid du CBIOS est appele. Le CBIOS configure le materiel (clavier, ecran, lecteurs de disque) et passe le controle au CCP a 0x9C00.
Architecture du CBIOS
Le BIOS personnalise (CBIOS) est reparti sur cinq modules ROM afin de tenir dans l'espace de banque disponible :
| Module |
Emplacement ROM |
Contenu |
cbios.asm |
MROM banque 2 (0xC000–0xCFFF) |
Points d’entree CBIOS (les 17 vecteurs API), demarrage a froid/a chaud, gestionnaire d’interruptions, controleur de disque ROM, tables de parametres de disque. |
cbios_bank1.asm |
UROM banque 12 |
Audio (cloche, melodie), routines d’horloge temps reel, gestionnaire de clavier avec auto-repetition. |
cbios_bank2.asm |
UROM banque 13 |
Pilote d’ecran (sortie de caracteres, defilement, curseur), emulateur de terminal ANSI (sous-ensemble VT52/VT100). |
cbios_bank3.asm |
UROM banque 14 |
Pilote de disque carte SD — lit et ecrit des secteurs CP/M de 128 octets depuis les images de lecteur SDCFS a partir de la limite de 256 Mo. |
cbios_bank4.asm |
UROM banque 15 |
Controleur disquette — prise en charge des lecteurs 8 pouces/5,25 pouces standard pour les disques CP/M physiques. |
API CBIOS
Le CBIOS CP/M implemente les 17 points d'entree API standard de CP/M 2.2 :
| Point d’entree |
Description |
| BOOT |
Demarrage a froid — initialise tout le materiel, configure les tables de parametres de disque, appelle le CCP. |
| WBOOT |
Demarrage a chaud — restaure l’etat du materiel, recharge CCP+BDOS depuis le disque, appelle le CCP. |
| CONST |
Etat de la console — renvoie 0xFF si une touche est en attente, 0x00 sinon. |
| CONIN |
Entree console — attend un appui de touche et renvoie le code ASCII. |
| CONOUT |
Sortie console — ecrit un caractere a l’ecran. |
| LIST |
Sortie imprimante — envoie un caractere a l’imprimante connectee. |
| PUNCH |
Sortie perforatrice/bande — envoie au peripherique de perforation de bande. |
| READER |
Entree lecteur — lit depuis le peripherique de lecture de bande. |
| HOME |
Positionnement sur la piste 0 du disque actuellement selectionne. |
| SELDSK |
Selectionne un lecteur de disque (A:–G:) et renvoie l’adresse du Disk Parameter Header. |
| SETTRK |
Definit la piste de disque pour la prochaine operation de lecture ou d’ecriture. |
| SETSEC |
Definit le secteur de disque pour la prochaine operation de lecture ou d’ecriture. |
| SETDMA |
Definit le Disk Memory Address — ou les donnees seront lues ou ecrites. |
| READ |
Lit un secteur de 128 octets du disque selectionne dans le tampon DMA. |
| WRITE |
Ecrit un secteur de 128 octets du tampon DMA vers le disque selectionne. |
| LISTST |
Etat de l’imprimante — renvoie l’etat de disponibilite du peripherique de liste. |
| SECTRN |
Translation de secteur — mappe les numeros de secteur logiques vers les positions physiques a l’aide de la table de decalage (skew) du disque. |
Configuration des lecteurs CP/M
Les lecteurs CP/M sont crees dynamiquement lors du demarrage a froid par le CBIOS, en fonction des controleurs de disque disponibles. Le mappage de lecteurs standard sur un systeme RomDisk / picoZ80 entierement equipe est :
| Lecteur CP/M |
Controleur |
Image |
| A: |
Carte SD |
CPM_SYSTEM — programmes OS, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80 |
| B: |
Carte SD |
Pascal MTP v5.61, Turbo Pascal v3.00a, Pascal User Group disks |
| C: |
Carte SD |
PLI, PLM 80, WordStar v3.0/v3.3/v4.0 |
| D:–G: |
Carte SD |
Collection Grant Searle CP/M disques C0–F9 |
Systeme de build
RFS se compile sous **Linux** (Debian/Ubuntu), **macOS** et **Windows** (via WSL2). Le systeme de build est presque entierement contenu dans le depot. La methode recommandee pour compiler est le
script de configuration automatise propre a votre plateforme (voir
Configuration et build automatises ci-dessous) ; les indicateurs et etapes manuels qui suivent s'adressent aux utilisateurs avances et aux rebuilds partiels.
Prerequis
| Outil |
Role |
| Java JRE 8+ |
Execute l’assembleur GLASS Z80 (tools/glass.jar). java doit etre dans le PATH. |
| bash |
Tous les scripts de build sont des scripts shell bash. |
| perl |
Requis par tools/mzftool.pl pour la manipulation de fichiers MZF. |
| gcc / make |
Compile cpmtools depuis les sources lors du premier build (automatique). |
| dd, cat, stat |
Utilitaires Linux standard utilises par les scripts d’empaquetage. |
L'assembleur GLASS Z80 est fourni dans tools/glass.jar — aucune installation separee n'est requise.
Configuration et build automatises (recommande)
Le script de configuration automatise propre a votre plateforme 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 PowerShell :
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1
Le script natif utilise winget pour installer Git for Windows (bash, coreutils, perl, curl) et une Temurin JRE (pour l’assembleur GLASS), clone le depot, recupere le bundle de contenu et execute ./build.sh via Git Bash — sans WSL, Docker ni redemarrage. Deux outils hote precompiles (tools/cpmcp.exe, tools/sdtool.exe) sont fournis, donc aucun compilateur C n’est necessaire sous Windows.
Windows 10 / 11 — setup_RFS_windows.ps1 (alternative — 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 (un redemarrage unique est requis — redemarrez, lancez Ubuntu une fois pour creer votre utilisateur Linux, puis relancez), puis execute setup_RFS.sh dans Ubuntu. Preferez le script natif 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.
Windows uniquement (PowerShell, avant le lancement de la configuration Linux) :
| Invite |
Defaut |
Que faire |
Continue anyway? [y/N] (si non lance en tant qu’Administrateur) |
Non |
N, puis rouvrez PowerShell en tant qu’Administrateur — l’installation de WSL necessite des droits administrateur. |
Install WSL2 + Ubuntu now? [y/N] (si WSL/Ubuntu est absent) |
Non |
y — Windows installe WSL2 + Ubuntu, puis vous demande de redemarrer ; ensuite lancez Ubuntu une fois pour creer votre utilisateur et relancez. |
Repo URL [https://git.eaw.app/eaw/RFS.git] |
depot public |
Entree pour le depot public, ou collez une autre URL (par exemple le depot de developpement prive). |
macOS / Linux / WSL (shell Linux/Ubuntu) :
| Invite |
Defaut |
Que faire |
Install now? [Y/n] (si des outils sont absents) |
Oui |
Entree — installe les outils manquants via apt/dnf/pacman ou Homebrew (macOS) ; peut demander votre mot de passe sudo. macOS declenche aussi les Xcode CLT et necessite Homebrew. |
Repo URL [https://git.eaw.app/eaw/RFS.git]: (si vous n’etes pas deja dans une copie de travail) |
depot public |
Entree pour le depot public, ou collez l’URL du depot prive. (Ignore sous Windows — deja choisi.) |
Install directory [~/RFS]: (lors du clonage) |
~/RFS |
Entree pour ~/RFS, ou saisissez un chemin. |
Remove <dir> and re-clone …? [y/N] (si ce repertoire contient un depot different) |
Non |
y uniquement si vous etes sur ; sinon N et choisissez un autre repertoire. |
Download and install them now? [Y/n] (contenu ~110 Mo) |
Oui |
Entree pour recuperer le contenu MZF/disque/CP/M/BASIC (necessaire pour un build complet) ; n uniquement si une copie de travail SharpSoft voisine le fournit deja. |
Run the first build now (./build.sh -m …)? [Y/n] |
Oui |
Entree pour compiler immediatement (verifie l’environnement). Le premier build utilise -m pour traiter les MZF → MZB/. |
Il se peut aussi qu’on vous demande votre mot de passe sudo et vos identifiants git (depot prive).
Apres la configuration, recompilez avec ./build.sh -m (premier build) puis ./build.sh ; sous macOS, faites d'abord source ./rfs_env.sh. build.sh compile toutes les variantes par defaut ; passez un nom de variante (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k) pour n'en compiler qu'une — selectionner une variante configure automatiquement les indicateurs de build. Options : -m (traiter les MZF), -s (ignorer l'assemblage partage), -c (nettoyer), -v (verbeux), -h (aide).
Avance : indicateurs de build (manuel)
Pour la plupart des builds, vous n'en avez pas besoin — build.sh <variante> les positionne automatiquement. Pour configurer une cible a la main, editez asm/include/rfs_definitions.asm et mettez exactement un indicateur de cible a 1 (tous les autres doivent etre a 0) :
| Indicateur |
Cible |
BUILD_ROMDISK EQU 1 |
Carte RomDisk |
BUILD_SFD700 EQU 1 |
Interface disquette SFD-700 |
BUILD_PICOZ80 EQU 1 |
Carte picoZ80 |
Indicateurs de fonctionnalites optionnels supplementaires :
| 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 est installe. |
FUSIONX_ENA |
0 |
Mettre a 1 lors de l’execution sur la carte tranZPUter FusionX. |
HW_SPI_ENA |
1 |
SPI materiel (PCB RomDisk v2+). Laisser a 1 pour toutes les cartes actuelles. |
SW_SPI_ENA |
0 |
SPI bit-bang logiciel (RomDisk v1 via port parallele). |
ENADEBUG |
0 |
Active la sortie de debogage a l’assemblage. |
Etapes de 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), clonez et compilez directement. Vous devez deja 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 toutes les ROM, empaquette les images, construit l'image carte SD :
./build.sh
# Build complet incluant le retraitement de tous les fichiers d'application MZF
# (necessaire uniquement lorsque les fichiers de MZF/ ont change) :
./build.sh -m
build.sh execute les etapes suivantes dans l'ordre :
- Compile
cpmtools depuis les sources (premiere execution uniquement) et l'ajoute au PATH.
tools/assemble_rfs.sh — assemble rfs.asm et rfs_mrom.asm en roms/rfs.rom et roms/rfs_mrom.rom.
tools/assemble_cpm.sh — assemble le CBIOS CP/M 2.2 et le CCP+BDOS en roms/*.rom.
tools/assemble_roms.sh — assemble toutes les variantes du moniteur et les applications MZF. Gere les quatre variantes de build MS-BASIC en ecrivant un BUILD_VERSION EQU dans include/msbasic_buildversion.asm avant chaque passe.
tools/make_roms.sh — empaquette les binaires ROM et MZF en images Flash ROM pour chaque cible.
tools/make_cpmdisks.sh — construit les images de disque CP/M au format RAW (pour carte SD) et au format CPC Extended Disk Format (pour les emulateurs de disquette).
tools/make_sdcard.sh — combine 10 images de lecteur RFS et 7 images de disque CP/M en l'image finale de la carte SD.
Fichiers de sortie
Apres un build reussi, le repertoire roms/ contient :
| Fichier |
Puce Flash |
Description |
MROM_ROMDISK_256.bin |
Flash Monitor ROM |
Monitor ROM pour RomDisk : SA-1510, 80c SA-1510, CBIOS CP/M, utilitaires mrom RFS, moniteurs 1Z-013A, tables d’opcodes ASM/DASM, IPL et chaines de messages sur 16 pages de 4 Ko. |
MROM_PICOZ80_256.bin |
Flash Monitor ROM |
Monitor ROM pour picoZ80 (l’ordre des banques differe de RomDisk). |
USER_ROM_256.bin |
Flash User ROM 1 |
Banques RFS 0–11, banques CBIOS CP/M 12–15, image CP/M 2.2, applications MZF empaquetees. |
USER_ROM_II_256.bin |
Flash User ROM 2 |
Applications MZF supplementaires. |
USER_ROM_III_256.bin |
Flash User ROM 3 |
Applications MZF supplementaires. |
SFD700_256.bin |
Flash SFD-700 |
ROM AFI + firmware RFS + systeme de fichiers ROM. |
SHARP_MZ80A_RFS_IMAGE_0–9.img |
Carte SD |
Images de lecteur RFS individuelles (une par lecteur 0–9). |
SHARP_MZ80A_RFS_CPM_IMAGE_1.img |
Carte SD |
Image combinee : 10 lecteurs RFS + 7 images de disque CP/M. Ecrivez ceci sur la carte SD. |
Ajouter des applications aux lecteurs ROM
Les fichiers d'application au format MZF doivent etre convertis en images binaires completees a la taille de secteur avant d'etre inclus dans les lecteurs ROM. Placez les fichiers MZF dans le sous-repertoire approprie sous MZF/ puis executez :
tools/processMZFfiles.sh
Ceci produit des images completees a 128 octets et 256 octets par secteur dans MZB/. Pour choisir quelles applications apparaissent dans chaque lecteur ROM, editez tools/make_roms.sh et ajustez les appels addMZFToROMImageList :
# Format: addMZFToROMImageList <ROMDISK> <SFD700> <picoZ80> <reserved> "<path>"
#
# Include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"
#
# RomDisk and picoZ80 only (no SFD700 — needs SD card):
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"
Les applications sont empaquetees dans l'ordre indique, remplissant d'abord la User ROM 1, puis les User ROM 2 et 3. Placez les applications les plus frequemment utilisees en haut de la liste.
Reference des outils de build
| Outil |
Description |
build.sh |
Script de build de plus haut niveau. Passer -m pour aussi retraiter les fichiers MZF. |
tools/assemble_rfs.sh |
Assemble les modules de base RFS. |
tools/assemble_cpm.sh |
Assemble le CBIOS et le noyau CP/M 2.2. |
tools/assemble_roms.sh |
Assemble les variantes du moniteur et les binaires d’application MZF. |
tools/make_roms.sh |
Empaquette les binaires en images Flash ROM. |
tools/make_cpmdisks.sh |
Cree les images de disque CP/M. |
tools/make_sdcard.sh |
Combine les images en l’image finale de la carte SD. |
tools/processMZFfiles.sh |
Convertit les fichiers MZF en binaires completes a la taille de secteur dans MZB/. |
tools/mzftool.pl |
Cree, extrait et inspecte les images au format MZF. |
tools/sdtool |
Construit le repertoire de carte SD RFS et le peuple de fichiers. |
tools/nasconv |
Convertit les images cassette NASCOM au format chargeable MZ-80A, en remappant les tokens MS-BASIC. |
tools/glass.jar |
Assembleur GLASS Z80 fourni (Java). Utilise par tous les scripts d’assemblage. |
tools/MZFD/MZFDTool |
Cree et gere les images de disquette brutes pour le FDC MZ-700. Commandes : format, dir, add, extract, boot. Image par defaut : MZ700.img. |
tools/MZQD/MZQDTool |
Cree et gere les images QD pour le systeme Quick Disk MZ-700. Commandes : format, dir, add. Image par defaut : MZ700.qd. |
cpmtools/ |
Sources de cpmcp, cpmls, cpmrm, etc. Compilees lors du premier build. |
Liens de reference