C'est le projet le plus complexe, le plus fou et le plus difficile que j'ai eu a mener sur cette machine.
C'est lors d'un deplacement sur site durant l'annee 1994 que j'ai travaille sur MMPS, meme si l'idee d'un OS avait germee durant l'annee 1992.
A l'epoque, je nourissais le "Beau Reve" de m'affranchir de la ROM BASIC et de la remplacer par un OS autonome avec tous ses outils.
Bon, une fois le kernel developpe, j'ai vite du revoir mes ambitions a la baisse, car en dehors d'un manque de temps et d'une baisse de motivation, j'avais atteint les limites de la machine pour un developpement natif ! Mon ensemble PC-1500 + CE-161 etait devenu trop petit ... Imaginez:
Code : Tout sélectionner
&00C5-&17FF : Le kernel MMPS
&1800-&1FFF : Le systeme de fichiers minimal et les utilitaires
&2000-&2FFF : Zone de developpement: tests, sauvegardes, essais...
&3000-&3FFF : XMON moniteur/assembleur/debugger
&4000-&41FF : Les donnees volatiles de MMPS
&4200-&47FF : Le file systeme et les blocs memoires.Cela fait deja plusieurs mois que je travaille a la redaction de la documentation de ce systeme. Voila c'est fait. La documentation en PDF fait 94 pages... Elle decrit les mecanismes du kernel, presente l'environnement, fourni un manuel des 62 appels systemes et des exemples de programmation.
Le projet, sans etre formellement arrete aujourd'hui, est en sommeil. A ce jour sont disponibles:
- Le kernel MMPS (revision du 9 avril 1998)
- Un file system minimal avec les utilitaires:
STARTER (un shell hyper-hyper-hyper leger)
FILES (liste toutes les entrees du file system)
PROCESS (liste tous les processus crees)
DISPLAY (liste le contenu d'un fichier)
DEBUG (debug un processus fils)
RUNPRO (un exemple mis en oeuvre)
- D'autres utilitaires dont un vrai SHELL...
- Et bien sur une chaine de developpement native sous MMPS, car meme si tous est pret maintenant (il y a un debugger), le developpement de programmes (executables) doit etre realise en externe (via XMON, par exemple), et le file system modifie "a la main".
MMPS est un systeme d'exploitation multi-processus (on peut lancer plusieurs executables en meme temps, et bien sur, plusieurs instances d'un meme executable) avec un file system propre (permettant un stockage permanent d'executables et donnees), une gestion memoire pour allouer des blocs aux processus, et un mecanisme de consoles virtuelles, permettant d'avoir l'ecran et le clavier en relation avec un process a un instant donne.
MMPS supporte 62 appels systemes (curieusement nommes "kernel-jump") portant sur les fonctionnalites suivantes:
- Gestion memoire: allocation, re-allocation, liberation.
- File systeme: creation, destruction, ouverture, lecture, ecriture,... et supporte les types d'entrees suivantes: fichiers, consoles, queue, duplex, memoire partagee, memoire mappee et verrous.
- Gestion des processus: creation, destruction, envoi de messages synchrones, gestions d'evenements asynchrones, delais et debug.
- Un ordonnanceur (scheduler) permettant de "reveiller" les differents processus, en fonction des etats de ceux-ci.
Les executables/utilitaires peuvent evoluer dans leur coin, sans perturber le kernel et vice-versa. Seuls les codes et les interfaces des kernel-jumps doivent etre figes.
Les executables doivent cependant etre relogeables et re-entrants (ou se proteger contre).
Le mecanisme de kernel-jump est realise par l'instruction SBR (&E3), l'accumulateur A devant contenir le code du kernel-jump a executer. Les registres BC, DE et HL etant utilises pour le passage d'arguments et/ou pour recevoir les valeurs retournees. Au retour, la CARRY est levee si le kernel-jump est realise sans erreur; sinon la CARRY est baissee et A contient alors le code d'erreur produite.
Par exemple, pour ouvrir un fichier, le kernel-jump OPN:
Code : Tout sélectionner
LD BC,adresse-du-nom
LD E,mode-d'ouverture (lecture, ecriture, ajout, exclusif...)
LDA &14
SBR (&E3)
;; Si la carry est baissee, une erreur s'est produite et A contient
;; alors le code d'erreur. Dans ce cas, aucun registre autre que A
;; n'est modifie
JR NC,saut-erreur
;; D contient le descripteur ouvert sur ce fichier. Il sera utilise
;; pour toutes operations sur le fichier jusqu'a la fermeture.
Pour la version de developpement, seul un CE-161 (ou equivalent) est requis.
MMPS a ete teste et fonctionne avec les ROM1 et ROM2. Il n'a pas ete teste avec la ROM0.
Le kernel N'est PAS relogeable.
L'utilisation de MMPS avec un emulateur peut-etre problematique, car le kernel utilise certaines instructions mettant en oeuvre le registre MN (ou V); si le moteur d'emulation ne les supporte pas, MMPS ne sera pas operationnel. Les instructions LDA N (code &34) et POP MN (code &3A) doivent etre emulees.
J'espere pouvoir ecrire un article de presentation plus complet sur MMPS pour une prochaine gazette de Silicium.
Attention cependant: MMPS etant autonome, il y a un effet de bord important. Il ne faut jamais laisser l'auto-power-OFF eteindre la machine en etant sous MMPS, car le BASIC redonnera la main a la tache CONSOLE, qui ne sera plus schedulee a cause du mecanisme de power-off. C'est le verrou mortel: tout le monde s'attend. Dans ce cas, un appui "rapide" sur RESET permet de redemarrer sous BASIC.
J'ai commence a regarder plusieurs solutions pour palier a ce probleme, mais ce n'est pas tres facile... donc en attendant !
Bon amusement...













