PROCEDE ET DISPOSITIF DE TRAITEMENT D'INFORMATIONS
La présente invention concerne un procédé et un dispositif de traitement d'informations. Elle s'applique, en particulier aux ordinateurs personnels, aux ordinateurs de réseau et aux serveurs informatiques.
De plus en plus d'outils utilisés quotidiennement fonctionnent grâce à un ou plusieurs microproces- seurs. C'est le cas d'un micro-ordinateur, mais aussi d'un téléphone portable, d'une automobile, d'un appareil électroménager, par exemple. Ces microprocesseurs remplissent un rôle essentiel ou accessoire au sein de ces outils. Ces microprocesseurs peuvent recevoir et/ou envoyer des informations aux périphériques auxquels ils sont connectés. Depuis la naissance des microprocesseurs dans les années 1970, une multitude de modèles aux caractéristiques très différentes sont apparus sur le marché. Chaque fabricant de matériel électronique a a é- lioré ses produits, et fait des choix technologiques différents. Ce phénomène a été particulièrement prononcé pour les périphériques (cartes graphiques, imprimantes, capteurs, etc.), qui se déclinent aujourd'hui sous des centaines de versions différentes. Cette hétérogénéité constitue aujourd'hui un frein. En effet, les programmes doivent être adaptés en autant de versions qu'il y a de microprocesseurs et de périphériques. De plus, les programmes doivent pouvoir communiquer entre eux de façon transparente, ce qui requiert une adaptation spéci- fique à chaque interlocuteur différent. Ces adaptations sont longues et coûteuses à réaliser.
Pour résoudre ces problèmes, l'émulation est une solution parfois retenue. Un émulateur est un programme, exécuté sur une machine A (machine support), qui simule l'architecture matérielle d'une machine B. On peut ainsi utiliser les programmes originellement conçus pour la machine B sur la machine A. On factorise donc le travail d'adaptation des programmes de la machine B vers la machine A. Mais un émulateur est un programme complexe et long à réaliser. Il ne permet de simuler qu'une architecture matérielle en particulier. Mais surtout, il dépend de l'architecture de la machine A. Le problème n'est donc que partiellement résolu, puisque cette architecture matérielle A peut devenir obsolète et être remplacée par un modèle différent A', a priori incapable d'exécuter directement les programmes écrits pour la machine A. Les technologies Java (marque déposée) de Sun Microsystems (marque déposée) ou VP (marque déposée) de Tao Group (marque dépo- sée) se basent sur une machine virtuelle. Les techniques d'émulation permettent de mettre en œuvre la machine virtuelle sur des architectures matérielles actuellement disponibles. Ces machines virtuelles ont été conçues comme de nouveaux standards de programmation. Elles sont destinées à uniformiser l'écriture et l'exécution des programmes en vue d'éliminer les incompatibilités. On observe que le même genre de problème se rencontre en linguistique. La Commission Européenne engage des dépenses considérables pour la traduction des documents de travail qu'elle génère et pour ses réunions. Les langues officielles doivent être traduites entre elles ce qui implique une démultiplication des traductions. Si toutes les langues étaient d'abord traduites dans une langue commune « C » (l'Anglais ou l'Espéranto par exemple), puis retraduites depuis cette langue C vers chaque langue officielle, le nombre de traducteurs nécessaires serait extrêmement réduit. Dans ce cas, l'étape supplémentaire dans le processus de traduction peut entraîner un délai, mais moins de moyens sont nécessaires. Cette solution peut être transposée au problème de l'hétérogénéité des architectures matérielles vu précédemment. Ainsi, la simulation de tous les programmes d'un ensemble de machines B, B', B", ..., vers un ensemble de machines A, A', A", ..., peut être simplifiée par l'utilisation d'une machine virtuelle C intermédiaire. En effet, il suffit d'écrire les émulateurs des machines B, B', B", ..., pour la machine virtuelle C. Il faut ensuite écrire sur un type de machine A, ou tout autre type de machine A', A", ..., l'émulateur de ma-
chine virtuelle C. On peut ainsi exécuter tout programme écrit pour les machines B, B', B", ..., sur toute machine A, A', A", ...
Il y a factorisation du temps de travail puisque les programmes d'émulation de B, B', B", ... vers C sont écrits une fois pour toutes. Cependant, l'émulateur C reste toujours complexe et long à écrire. Par ailleurs, les capacités des périphériques virtuels de la machine C dépendent directement des capacités des périphériques disponibles sur la machine support. Si certains périphériques sont absents, les programmes de la machine C peuvent ne pas fonctionner. La machine C ne peut donc pas facilement s'adapter à l'environnement matériel disponible sur la machine support. Enfin, le programmeur doit écrire des sous-programmes souvent compliqués permettant de faire le lien entre la machine virtuelle C et les périphériques de la machine A (« drivers » ou pilotes de périphériques). Ces pilotes sont spécifiques d'une machine A donnée, et doivent donc être réécrits systématiquement pour toute nouvelle machine A', A", ...
Chaque aspect de la présente invention vise à répondre à tout ou partie de ces inconvénients. Selon un premier aspect, la présente invention vise un dispositif de traitement d'information, caractérisé par : - des machines virtuelles imbriquées, c'est-à-dire qu'une machine est émulée par une autre, hiérarchiquement de la plus simple à la plus complexe, c'est-à-dire qu'une machine donnée émule totalement une autre machine plus compliquée et élaborée, chaque machine virtuelle ayant une architecture originale, c'est-à-dire se différenciant de l'architecture des autres machines de la hiérarchie de machines virtuelles, chaque machine virtuelle étant adaptée à exécuter un programme d'émulation ou de compilation dynamique simulant l'architecture virtuelle plus complexe de niveau immédiatement supérieur, une machine virtuelle d'un niveau donné dans la hiérarchie possédant donc une architecture plus simple que celles de toutes les machines virtuelles de niveau supérieur ;
- les langages machine des deux niveaux de machines virtuelles les plus bas de la hiérarchie sont spécifiquement conçus pour permettre l'exécution de toutes les opérations du niveau supérieur ; - un niveau de la hiérarchie, constituant le sommet de la hiérarchie, n'émule aucun autre niveau de la hiérarchie ; et
- tout niveau de la hiérarchie peut être lié à une machine réelle généraliste (la machine support) au moyen d'un programme exécutable d'émulation ou de compilation dynamique spécifique à cette machine réelle. On rappelle que le processus de compilation dynamique traduit une fois pour toutes un ensemble d'instructions d'un langage machine donné dans le langage machine de la machine support au lieu de le traduire au fur et à mesure (l'interpréter). L'avantage est que la compilation dynamique donne un résultat beaucoup plus efficace que l'émulation (le ralentissement induit par l'émulation du niveau un par une machine support réelle ou un niveau inférieur est réduit). On note que le processus de compilation dynamique est connu depuis plusieurs années. L'innovation de la machine de niveau un est de proposer une architecture logicielle (ou matérielle) relativement simple mais spécialement conçue pour la compilation dynamique, tout en respectant les caractéristiques de la hiérarchie d'émulateurs. Ainsi, selon son premier aspect, la présente invention vise un ensemble de machines virtuelles imbriquées hiérarchiquement dont la machine de base est une machine virtuelle C simplifiée à l'extrême, afin que le travail pour l'homme soit réduit au strict minimum lorsqu'il faut l'émuler sur des machines quelconques A, A', A", ... En contrepartie, plus une machine virtuelle est d'un
niveau hiérarchique bas, plus il est difficil; de concevoir des programmes pojr elle. C'est pourquoi elle exécute un émulateur qui va simuler une architecture plus complexe, d'un niveau supérieur, mais plus pratique à programmer pour l'humain. Il en est ainsi pour chaque machine virtuelle, jusqu'à ce que l'on atteigne le niveau de complexité adapté pour une utilisation donnée. La simplification offerte par la présente invention a pour contrepartie un nombre plus élevé d'opérations à exécuter pour la machine support (plus faible efficacité). Cependant la plus grande partie du travail pour disposer d'une machine virtuelle de complexité satisfaisante est effectuée par la machine support, puisque le programmeur n'a qu'à réaliser le programme d'émulation de la machine à la base de la hiérarchie. La présente invention reporte donc au niveau logiciel un maximum de la complexité d'une machine matérielle généraliste ordinaire, une machine généraliste étant une machine capable d'effectuer tout type d'opération mathématique. Ainsi, conformément au premier aspect de la présente invention, une machine virtuelle C simplifiée à l'extrême est mise en oeuvre, afin que le travail pour l'homme soit réduit lorsqu'il faut l'émuler sur des machines quelconques A, A', A", ...
Selon des caractéristiques particulières, au moins une machine virtuelle dite "bimode" est adaptée à être implémentée par un compilateur dynamique écrit pour une machine virtuelle d'un niveau inférieur ou une machine support réelle, et est adaptée à être implémentée par un émulateur écrit pour une machine virtuelle d'un niveau inférieur ou une machine support réelle.
Selon des caractéristiques particulières, le langage machine de la machine virtuelle à la base de toute la hiérarchie ne comporte que deux opérations élémentaires. Il est donc très facile à émuler sur n'importe quelle machine support A, A', ... Selon des caractéristiques particulières, les deux instructions de la machine virtuelle de plus bas niveau sont une soustraction et une sauvegarde en mémoire.
Selon des caractéristiques particulières, le langage machine de la machine virtuelle de niveau immédiatement supérieur à la machine virtuelle à la base de toute la hiérarchie comporte quatre opérations élémentaires. Ce second niveau présente à la fois une bonne efficacité ainsi qu'une facilité d'utilisation par un pro- grammeur, relativement au niveau inférieur.
Selon des caractéristiques particulières, le langage machine de la machine virtuelle à la base de toute la hiérarchie ne comporte que quatre opérations élémentaires. Il est donc facile à émuler sur n'importe quelle machine support A, A' ...
Selon des caractéristiques particulières, lesdites quatre instructions sont une soustraction, une sauve- garde en mémoire, une fonction logique booléenne et un chargement depuis la mémoire.
La fonction logique booléenne est, par exemple l'une des fonctions "et" ou "ou".
Selon un deuxième aspect, la présente invention vise un dispositif de traitement d'information, caractérisé par au moins une machine virtuelle dite "bimode" adaptée à être implémentée par un compilateur dynamique écrit pour une machine support réelle, et adaptée à être implémentée par un émulateur écrit pour une machine support réelle.
Selon des caractéristiques particulières, une machine virtuelle à trente deux instructions est une machine bimode. Ainsi, cette machine satisfait trois objectifs : d'une part elle peut être simulée de façon suffisamment efficace par le niveau immédiatement inférieur (par exemple à quatre instructions) de la hiérarchie d'émulateurs; d'autre part, elle possède un jeu d'instructions suffisamment riche pour permettre une program- mation aisée de la plupart des problèmes algorithmiques courants ; enfin, elle dispose d'un langage machine
facile à compiler dynamiquement sur n'importe quel type de machine support. Cette machine virtuelle bimode dispose de la plupart des opérations d'un processeur courant. L'exécution de tous les programmes de niveau supérieur peut reposer sur elle. La machine virtuelle bimode est simulée par un émulateur ou un compilateur dynamique, programme chargé de réaliser la traduction des opérations de la machine virtuelle de niveau un en opérations exécutables par la machine support.
Selon des caractéristiques particulières, la machine virtuelle bimode utilise les mêmes protocoles de gestion des périphériques que ceux utilisés par les machines virtuelle de niveau hiérarchique inférieur (par exemple à deux ou quatre instructions).
Selon des caractéristiques particulières, une machine virtuelle bimode possède deux espaces de mé- moire distincts, l'un pour les données, dit "mémoire données", l'autre pour les programmes, dit "mémoire programmes", pour être exécuté, un programme étant d'abord chargé en mémoire données, puis copié vers la mémoire programmes grâce à une instruction spécifique dite "de copie" de la machine bimode, la compilation dynamique intervenant exclusivement lors de l'exécution de cette instruction de copie.
Selon des caractéristiques particulières, une machine bimode met en oeuvre des opérations de rupture de séquence (instructions Jcc, JP et JAR, ainsi que le mécanisme d'interruption) permettant au compilateur dynamique de prévoir systématiquement la destination du saut induit par la rupture de séquence. Grâce à ces dispositions, le processus de compilation dynamique est significativement simplifié.
Selon des caractéristiques particulières, une machine bimode met en oeuvre une instruction répartis- sant la mémoire totale disponible entre les espaces de mémoire données et de mémoire programme. Ainsi, la quantité de mémoire disponible pour chaque espace mémoire peut être gérée.
Selon des caractéristiques particulières, une machine bimode met en oeuvre une mise à jour optionnelle d'indicateurs d'état. Ceci permet d'accélérer l'exécution des programmes de la machine virtuelle bimode lorsqu'ils sont compilés dynamiquement vers un niveau hiérarchique inférieur.
Selon des caractéristiques particulières, pour une machine virtuelle bimode, toutes les opérations rela- tives à la gestion et à l'accès à la mémoire respectent les contraintes d'un niveau hiérarchique inférieur.
Selon des caractéristiques particulières, le dispositif de traitement d'information visé par le premier aspect de la présente invention met en oeuvre une description organisée et normalisée des périphériques.
Grâce à ces dispositions, la mise en oeuvre de la description organisée et normalisée des périphériques fournit toutes les informations nécessaires pour que les machines virtuelles puissent s'adapter à leur cnvi- ronnement matériel, quel qu'il soit, avec une intervention humaine limitée. Ainsi, la simplification de la machine virtuelle C intervient aussi au niveau de la gestion des périphériques.
Selon des caractéristiques particulières, un espace mémoire infini est géré en utilisant des adresses comportant une information de longueur de l'adresse et une information de valeur de ladite adresse.
Selon des caractéristiques particulières, le dispositif de traitement d'information tel que succinctement exposé ci-dessus met en oeuvre au moins trois machines virtuelles imbriquées hiérarchiquement de la plus simple à la plus complexe.
Selon un troisième aspect, la présente invention vise un procédé de traitement d'information, caractérisé par :
- au moins deux machines virtuelles imbriquées, c'est-à-dire qu'une machine virtuelle est émulée par une autre, hiérarchiquement plus simple et qu'une machine donnée émule totalement une autre machine plus
compliquée et élaborée, chaque machine virtuelle ayant une architecture originale, c'est-à-dire se différenciant de l'architecture des autres machines de la hiérarchie de machines virtuelles,
- chaque machine virtuelle étant adaptée à exécuter un programme d'émulation ou de compilation dynamique simulant l'architecture virtuelle plus complexe de niveau immédiatement supérieur, une machine vir- tuelle d'un niveau donné dans la hiérarchie possédant donc une architecture plus simple que toutes les machines virtuelles de niveau supérieur et
- au moins une machine virtuelle étant adaptée à être implémentée par un compilateur dynamique écrit pour une machine virtuelle d'un niveau inférieur ou une machine support réelle, et adaptée à être implémentée par un émulateur écrit pour une machine virtuelle d'un niveau inférieur ou une machine support réelle. Les avantages, buts et caractéristiques particulières du troisième aspect de la présente invention étant identiques à ceux du premier aspect, ils ne sont pas rappelés ici.
Selon un quatrième aspect, la présente invention vise un procédé de traitement d'information, caractérisé par au moins trois machines virtuelles imbriquées, c'est-à-dire qu'une machine est émulée par une autre, hiérarchiquement de la plus simple à la plus complexe, c'est-à-dire qu'une machine donnée émule totalement une autre machine plus compliquée et élaborée, chaque machine virtuelle ayant une architecture originale, c'est-à-dire se différenciant de l'architecture des autres machines de la hiérarchie de machines virtuelles, chaque machine virtuelle étant adaptée à exécuter un programme d'émulation ou de compilation dynamique simulant l'architecture virtuelle plus complexe de niveau immédiatement supérieur, une machine virtuelle d'un niveau donné dans la hiérarchie possédant donc une architecture plus simple que toutes les machines de niveau supérieur.
Les caractéristiques particulières et les avantages du procédé visé par le quatrième aspect de la présente invention étant les mêmes que ceux du procédé visé par le premier aspect de la présente invention, ils ne sont pas rappelés ici.
La très grande diversité de périphériques complique fortement le travail du programmeur. Des péri- phériques aux fonctions pourtant similaires (exemple : les cartes graphiques) se déclinent en une multitude de versions, chacune avec ses spécificités, forçant le programmeur à passer du temps sur la gestion de ces particularités alors qu'il pourrait le consacrer à d'autres fonctions plus essentielles de son logiciel. Le programmeur doit recevoir et/ou envoyer les données au périphérique selon un format qui lui est spécifique. C'est donc le programmeur qui se plie doublement aux exigences du matériel. Nous avons cherché à uniformiser la gestion des périphériques pour qu'un même périphérique (ou des périphériques aux fonctions semblables) soit géré de la même façon par le programmeur quel que soit l'environnement matériel dans lequel est simulée la Machine Universelle. Pour que cela fonctionne, conformément aux aspects de la présente invention succinctement exposés ci-dessous, on décrit les périphériques réellement disponibles sous une forme standardisée qui complique le moins possible l'écriture de l'émulateur de la machine de niveau zéro. Chacun des aspects suivants de la présente invention entend remédier à tout ou partie des inconvénients exposés ci-dessus.
Selon un cinquième aspect, la présente invention vise un procédé de gestion de périphériques, caractérisé en ce qu'il met en oeuvre une arborescence de représentations de périphériques, arborescence dans laquelle un périphérique est appréhendé en suivant un cheminement partant de la racine de l'arborescence et passant par
au moins une feuille, l'information nécessaire pour commander ledit périphérique étant collectée au cours du-iit cheminement, au moins a chaque feuille de l'arborescence rencontrée
Selon des caractéristiques particulières, l'information nécessaire pour commander ledit périphérique est successivement collectée a chaque noeud ou feuille de l'arborescence rencontré Selon des caractéristiques particulières, la présente invention vise un procède de gestion de périphériques caractérise en ce qu'il met en oeuvre une arborescence permettant de décrire tout périphérique, arborescence dans laquelle
- la description de chaque périphérique est réalisée selon les caractéristiques élémentaires du périphérique, informations synthétiques résultant des phénomènes élémentaires et d'un processus d'analyse du périphérique, ces caractéristiques élémentaires permettant au programme contrôlant le périphérique, exécute par un processeur, d'appréhender les unîtes non algorithmiques qui assurent l'interface directe avec le monde réel, unîtes dont l'agencement permet de remplir la fonction du périphérique ,
- la description des périphériques s'organise selon une arborescence résultant des phénomènes élémentaires et d'un processus d'analyse du périphérique, cette arborescence comportant des nœuds et des feuilles, les liens entre les nœuds étant symbolises par des branches, un nœud regroupant d'autres nœuds ou des feuilles qui le décrivent plus précisément, une feuille étant une information unitaire indivisible qui ne rassemble pas d'autres informations plus élémentaires,
- pour prendre connaissance d'un périphérique, et/ou y accéder, le programme contrôlant les périphériques parcourt l'arbre depuis la racine, nœud qui n'est pas regroupe par un autre nœud et qui représente tous les pe- πpheπques, vers les feuilles
Grâce à ces dispositions, des périphériques aux fonctions semblables, sont gères de la même façon, quel que soit l'environnement matériel dans lequel est simulée une machine virtuelle En outre, en ne considérant que les unîtes non algorithmiques, on simplifie la modélisation des périphériques et on facilite donc I uniformisation de leur représentation et donc leur gestion Un périphérique est ainsi décrit selon ses caracteπsti- ques élémentaires, c'est-a-dire l'ensemble des paramètres qui permettent de contrôler le périphérique et dont l'agencement permet de remplir la fonction du périphérique
Selon des caractéristiques particulières, chaque caractéristique élémentaire, physique ou symbolique, régissant le rapport du périphérique avec son environnement réel est représentée par une "coordonnée", les "coordonnées" étant regroupées dans des "dimensions", représentant des dimensions, au sens mathématique du terme, la combinaison de l'ensemble des "dimensions" forme un espace, au sens mathématique du terme, a n dimensions, dans lequel la fonction du périphérique est complètement modélisée, n étant le nombre de "dimensions" du périphérique
On observe qu'une caractéristique élémentaire est représentée, sur une "dimension", par une "coordonnée" L'ensemble des "coordonnées" de certaines "dimensions" peuvent exprimer un phénomène elemen- taire de leur caractéristique élémentaire (la "caractéristique modulée") avec une certaine intensité parmi un ensemble d'intensités possibles On parle de l' "intensité" d'une "coordonnée" Le choix d'une "intensité" parmi l'ensemble des "intensités" disponibles pour une "coordonnée" d'un point de l' "espace" d'un périphérique, exclut systématiquement toutes les autres "intensités" de cette même "coordonnée "
Selon des caractéristiques particulières, I' "univers" des périphériques, la racine de l'arborescence, re groupe deux noeuds appelés "groupes" situés au niveau suivant, ces "groupes" symbolisant le devenir des informations échangées entre le processeur et un périphérique :
- le "groupe" des périphériques d'échange, pour lesquels les informations échangées sont transmises dans un environnement ouvert, accessible par d'autres récepteurs que le processeur, permettant ainsi leur communication avec l'extérieur de la machine, ou bien les informations échangées sont transmises à partir d'émetteurs, situés dans un environnement ouvert, vers le processeur, et
- le "groupe" des périphériques de conservation, pour lesquels les informations échangées sont transmises dans un environnement accessible exclusivement au processeur. Selon des caractéristiques particulières, chacun des "groupes" englobe deux "hyperespaces", les "hy- perespaces" du "groupe" des périphériques d'échange indiquant le sens de transmission des informations, les "hyperespaces" du "groupe" des périphériques de conservation indiquant le niveau de disponibilité de l'information pour le processeur et comportant un "hyperespace" des périphériques de conservation adressables pour lesquels le processeur a un accès direct, instantané et permanent aux périphériques pour échanger des informa- tions et un "hyperespace" des périphériques de conservation non adressables pour lesquels l'accès aux informations est indirect car il requiert des opérations supplémentaires pour le processeur.
Selon des caractéristiques particulières, chacun des "hyperespaces" englobe un ou plusieurs "espaces" de périphériques, chacun regroupant la description du modèle arborescent d'un périphérique. Selon des caractéristiques particulières, l'exploitation de l'arborescence est assurée : - par la machine support, à travers une portion du programme d'émulation de la machine de niveau zéro appelée le cartographe/énumerateur (Mapper/Enumerator) qui prend en charge les protocoles d'accès aux périphériques à partir du niveau zéro,
- par un processeur qui reçoit des blocs qui donnent les principales informations permettant d'évaluer la fonction de chaque périphérique et toutes les informations pour calculer et interpréter les données de configuration et d'exploitation, les calculs et interprétations des données d'exploitation et de configuration étant effectués au moyen de programmes spécifiques insérés dans ce codage, le second bloc comportant la description d'au moins un "espace" de périphérique et de tous les nœuds qu'il englobe dans une arborescence de représentation des périphériques, et
- par un processeur virtuel spécialisé, nommé coprocesseur de périphériques, prenant en charge les program- mes de calcul des données de configuration et d'exploitation, ainsi que des directives de dépendance insérées dans les nœuds de l'arbre.
Le processeur est alors en mesure d'exécuter un programme prenant en charge le parcours des différentes branches de l'arbre pour accéder aux périphériques, par l'intermédiaire des programmes du coprocesseur qui accèdent à un registre "MER". En niveau zéro, les blocs "TREE" sont transmis sur commande par le cartographe/énumerateur, par l'intermédiaire du registre "MER". L'ensemble de ces blocs contient toutes les indications nécessaires pour pouvoir reconstruire un arbre des périphériques complet. Des blocs "LIN " sont installés dans la mémoire de la machine support par le cartographe/énumerateur, qui les appelle selon les "espaces" de périphériques utilisés. Les blocs "FEXT" sont chargés explicitement par un programme écrit en niveau 0.4 et viennent enrichir les descriptions des blocs "TREE".
Selon un sixième aspect, la présente invention vise, pour accéder aux périphériques depuis un processeur:
- pour l'accès aux données de certains périphériques auxquels seul le processeur peut accéder, aussi bien en lecture qu'en écriture, n'étant pas pris en compte les accès par d'autre moyens que le processeur qui ne se tra- duisent par aucun changement dans l'environnement périphérique du processeur ou sur le processeur lui- même, et ne modifient pas le sens des informations échangées avec le périphérique, certaines portions de l'espace d'adressage sont spécialisées pour les périphériques, et à une portion correspond un périphérique particulier, de telle manière qu'il suffit de faire exécuter au processeur une instruction qui accède à cette portion de l'espace d'adressage pour établir la communication avec le périphérique voulu, un plan d'organisation de la mémoire étant mis en oeuvre, et
- la gestion des autres données repose sur un seul registre situé à une adresse mémoire fixe.
Selon un septième aspect, la présente invention vise un procédé pour exploiter des périphériques caractérisé en ce que l'ensemble des informations nécessaires pour exploiter un périphérique sont rassemblées en au moins deux blocs de données distincts : - le premier bloc qui permet de transporter et d'aiguiller les données de configuration et d'exploitation échangées entre un processeur et au moins un périphérique particulier de la machine support par l'intermédiaire d'un registre, le premier bloc établissant le lien avec les adresses d'accès à chaque dit périphérique sur la machine support, et contenant des programmes écrits dans le langage machine natif de la machine support afin de transporter les données échangées aux bonnes adresses, ces programmes permettant aussi de détecter la présence de chaque dit périphérique et d'initialiser chaque dit périphérique dans un état stable permettant son bon fonctionnement ultérieur ; et
- le second bloc qui donne les principales informations permettant d'évaluer la fonction de chaque dit périphérique et toutes les informations pour calculer et interpréter les données de configuration et d'exploitation, l'évaluation étant permise par le codage binaire du modèle théorique arborescent, tandis que les calculs et in- teφrétations des données d'exploitation et de configuration sont effectués au moyen de programmes spécifiques insérés dans ce codage, le second bloc étant la description, pour chaque dit périphérique, de I' "espace" de périphérique et de tous les nœuds que l' "espace" englobe ("espace", "dimensions", "coordonnées" et "intensités"), donc une portion de l'arbre, et indiquant l' "hyperespace" auquel appartient ledit "espace".
Selon des caractéristiques particulières, l'ensemble des informations relatives à l'exploitation d'un pé- riphérique comporte un troisième bloc, qui contient un type de modélisation de caractéristiques physiques, symboliques, ou encore logiques permettant de préciser le comportement dans la réalité des "espaces", "dimensions", "coordonnées" et "intensités" inclus dans le second bloc, et notamment des caractéristiques élémentaires qui leurs sont associées. Il peut aussi contenir d'autres informations venant enrichir le second bloc. Le troisième bloc, "FEXT", peut être présent lorsque le second bloc, "TREE", ne peut pas fournir certaines in- formations. Il peut contenir des équations Physiques, des représentations symboliques (par exemple graphiques).
Selon un huitième aspect, la présente invention vise un procédé de modélisation de périphériques, caractérisé en ce qu'il comporte, pour chaque périphérique :
- une étape d'analyse microscopique dudit périphérique pour déterminer les caractéristiques phénoménales ain- si que les ensembles exclusifs relatifs audit périphérique ;
- une étaps initiale au cours de laquelle on ccnsidère qu'aucune "dimension", "coordonnée" ou "intensité" n'est définie, chacun des ensembles exclusifs étant associé à un ensemble d' "intensités" rattachées à une nouvelle "coordonnée", la caractéristique phénoménale liée à l'ensemble exclusif étant associée à cette nouvelle "coordonnée", pour un ensemble exclusif, chaque "intensité" représentant une donnée d'exploitation distincte, l'ensemble des "coordonnées" étant regroupé au sein d'une seule "dimension" ;
- des étapes itératives au cours desquelles, pour chaque "dimension" existante, appelée "dimension mère", on cherche à rassembler toutes ses "coordonnées" en au moins un groupe en respectant les règles suivantes : a) dans le cas d'un rassemblement en deux groupes au moins, respectant les règles suivantes : chaque groupe possède le même nombre de "coordonnées", aucun groupe ne comporte qu'une seule "coordonnée", il n'existe pas de phénomène élémentaire qui n'appartienne ni à une caractéristique intra-groupe, ni à une caractéristique inter-groupes et au moins deux "coordonnées" de la "dimension mère" doivent comporter au moins un phénomène élémentaire
pour chaque groupe, l'ensemble des phénomènes élémentaires présents à l'identique dans chaque "coordonnée" du groupe étant nommé "caractéristique intra-groupe", parmi les éventuels phénomènes élémentaires n'appartenant pas aux caractéristiques intra-groupes, l'ensemble des phénomènes élémentaires qui sont présents à l'identique dans une "coordonnée" de chacun des groupes est nommé "caractéristique inter-groupes", un phénomène élémentaire ne pouvant participer qu'à une seule carac- téristique inter-groupes ; b) dans le cas d'un rassemblement en un seul groupe respectant les règles suivantes : la "dimension mère" contient au moins deux "coordonnées", toutes les "coordonnées" contiennent des "intensités", et la caractéristique modulée de chaque "coordonnée" fait partie de la caractéristique intra-groupe ; au moins un phénomène élémentaire présent à l'identique dans chaque "coordonnée" du groupe étant nommés "caractéristique intra-groupe", pour chaque "coordonnée", une caractéristique inter-groupes rassemble les éventuels phénomènes élémentaires qui n'appartiennent pas à la caractéristique intra-groupe ; c) dans les deux cas, le non respect d'au moins une règle interdisant le rassemblement des "coordonnées" en groupe(s) et rendant définitive la "dimension" ;
- une étape de constitution de "dimensions" au cours de laquelle, s'il est possible de constituer des groupes selon les règles a) et b), alors deux nouvelles "dimensions" sont créées : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", les caractéristiques phénoménales des "coordonnées" de cette nouvelle "dimension" étant celles d'un groupe quelconque de la "dimension mère", desquelles on a retiré la caractéristique intra-groupe, une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère", chacun de ces groupes engendrant une "coordonnée" de la nouvelle "dimension", la caractéristique intra- groupe de chacun de ces groupes constituant la caractéristique phénoménale de la "coordonnée" engendrée, une "intensité" restant toujours liée à la "coordonnée" qui contient la caractéristique modulée, et donc à la "di- mension" qui contient cette "coordonnée" ;
- une fois toutes les "dimensions" traitées, une étape de finalisation au cours de laquelle, s'il n'a pas été possible de créer des groupes sur au moins une des "dimensions", alors la construction du modèle est terminée, les "dimensions" produites étant regroupées au sein de l'"espace" du périphérique.
D'autres avantages, buts et caractéristiques de la présente invention ressortiront de la description qui va suivre, faite en regard des dessins annexés dans lesquels :
- la figure 1 représente, schématiquement, une représentation d'un périphérique dans un espace, à l'aide de dynamiques,
- la figure 2 représente, schématiquement, des étapes de modélisation d'un périphérique,
- la figure 3 représente, schématiquement, deux configurations d'un périphérique, - les figures 4 et 5 représentent, schématiquement, une structure microscopique, définie en figure 2, d'un périphérique,
- les figures 6 à 14 représentent, schématiquement, une dimension produite au cours d'une étape de modélisation illustrée en figure 2,
- la figure 15 représente, schématiquement, une arborescence de périphériques conforme à un aspect de la pré- sente invention,
- la figure 16 représente, schématiquement, un parcours de noeuds d'une arborescence représentant des périphériques conformément à un aspect de la présente invention, et
- la figure 17 représente un schéma d'organisation de machines virtuelles dans un mode de réalisation exemplaire du premier aspect de la présente invention. Dans toute la description, dans le préambule et les revendications, on utilise les définitions suivantes.
L'ensemble des éléments d'un (micro)processeur accessibles par un quelconque moyen logiciel (les instructions, les registres, la gestion de la mémoire, ...), se traduit par un codage binaire précis appelé "langage machine" du processeur. L'ensemble des éléments des périphériques accessibles par un quelconque moyen logiciel ainsi que le langage machine constituent ce que nous appelons "l'architecture matérielle". Le terme "ma- chine" désigne dans la suite une " machine à registres " (ou machine de Von Neumann).
On appelle "machine universelle" une machine mettant en oeuvre au moins un aspect de la présente invention.
Nous désignons par "processeur virtuel" un ensemble de mécanismes logiciels qui réalisent un langage machine donné, tout comme un "processeur réel" est un ensemble de mécanismes physiques (par exem- pie électriques) qui réalisent le langage machine pour lequel il a été conçu. Un processeur virtuel simule donc un processeur réel. Si l'on y ajoute un programme de simulation des périphériques reliés au processeur, on obtient une "machine virtuelle".
On définit "l'efficacité" d'un langage machine par sa capacité à permettre la réalisation de toutes les opérations d'un langage de haut niveau en un minimum d'instructions. On observe qu'au sens de la présente invention, un arbre, ou une arborescence, est un graphe que l'on parcourt en partant toujours d'un même noeud prédéterminé, appelé "racine". Préférentiel lement, l'arbre ou l'arborescence est, cependant, un arbre au sens mathématique du terme, c'est-à-dire comportant d'autres extrémités que la racine.
On remarque que, préférentiellement. les machines basées sur les troir processeurs virtuels décrits dans le présent document, à savoir le processeur de niveau 0.2, le processeur de niveau 0.4, ainsi que le processeur de niveau un, utilisent toutes les trois le même protocole de gestion des périphériques.
On décrit ci-dessous un aspect de l'invention, en regard de la figure 17. 1 - Introduction à la machine de niveau zéro
La machine de niveau zéro, base de la hiérarchie d'émulateurs imbriqués constituant la Machine Universelle, se décline en deux versions distinctes appelées "machine de niveau 0.2" 20 et "machine de niveau 0.4" 21 . La plupart des caractéristiques de ces machines sont similaires.
1.1 - Introduction à la machine 20 de niveau 0.2 Le niveau 0.2 représente les fondations de la Machine Universelle. C'est le niveau le plus simple de toute la hiérarchie d'émulateurs imbriqués. L'exécution de tous les programmes de niveau supérieur peut reposer sur lui. On distingue la machine virtuelle 20 de niveau 0.2 de l'émulateur 22 de niveau 0.2. La machine virtuelle 20 de niveau 0.2 se présente pour le programmeur comme un ordinateur minimal, avec un langage machine élémentaire et un accès aux périphériques 32. L'émulateur 22 de niveau 0.2 est le programme chargé de réaliser la traduction des opérations de la machine virtuelle de niveau 0.2 en opérations exécutables par la machine support 23. Comme la machine 20 de niveau 0.2 est extrêmement simple, la programmation de cette traduction se fait très facilement (de l'ordre de quelques jours pour un programmeur).
Lorsqu'on souhaite exploiter une machine de la hiérarchie, il suffit d'adapter l'algorithme d'émulation du niveau 0.2 dans le langage natif de la machine support 23. Tous les émulateurs des niveaux supérieurs s'exécuteront directement sur cet émulateur 22. 1.2 - Introduction à la machine 21 de niveau 0.4
La structure à 2 instructions du niveau 0.2 implique une forte augmentation du nombre d'opérations nécessaires pour exécuter des programmes écrits dans un langage de haut niveau (faible efficacité), comparé à une machine virtuelle (ou physique) classique. Il en résulte un très fort ralentissement de la Machine Universelle qui peut être nuisible pour certaines applications. Les inventeurs ont analysé les caractéristiques les moins efficaces du niveau 0.2 et l'ont enrichi en conséquence.
Le niveau 0.4 représente un très bon compromis entre simplicité et efficacité. Tout en restant très simple, il entraîne une augmentation raisonnable du nombre d'opérations nécessaires pour exécuter des pro- grammes écrits dans un langage de haut niveau.
On distingue ici aussi la machine 21 de niveau 0.4 de l'émulateur 24 de niveau 0.4, à une différence près : l'émulateur 24 de niveau 0.4 peut être écrit directement pour la machine support 23 ou bien pour la machine 20 de niveau 0.2. Le second cas respecte la hiérarchie (la machine virtuelle 21 de niveau 0.4 est simulée par la machine virtuelle 20 de niveau 0.2 qui est simulée par la machine support 23). Le premier cas court- circuite la hiérarchie. L'exécution de tous les programmes de niveau supérieur de la hiérarchie peut donc reposer sur le niveau 0.4 au lieu du niveau 0.2.
Lorsqu'on souhaite créer une Machine Universelle sur une machine support 23, il suffit donc d'adapter l'algorithme d'émulation du niveau 0.2 ou 0.4 (ou supérieur), selon les besoins, dans le langage natif de cette machine support 23. 2 - Format des données
L'unité élémentaire manipuhble par la machine de niveau zéro ou un est le mot de 16 bits. Les données ont une taille fixe de 16 bits. On note le bit de poids le plus faible (Least-Significant Bit, LSB) à droite du mot, et le bit de poids le plus fort (Most-Significant Bit, MSB) à gauche. Par convention, on numérote les bits du mot de 0 à 15, de droite à gauche. Les données sont enregistrées dans des fichiers au format binaire « big endian » (octet de plus fort poids stocké à l'adresse de plus faible numéro). Les données sauvées dans la mémoire de la machine support peuvent être au format « little endian » ou « big endian ». En effet, les programmes exécutés sur la machine de niveau zéro ou un n'ont pas la possibilité de le vérifier, et n'en sont pas affectés. Par contre, en environnement multiprocesseur, il faut s'assurer que tous les processeurs utilisent le même format de données pour le stockage en mémoire. On rappelle que, par convention, un caractère « $ » précédant un nombre indique qu'il est exprimé en base hexadécimale. 3- Organisation de l'espace d'adressage
L'espace d'adressage des machines de niveau zéro (i.e. 0.2 et 0.4) est indéfini en taille. Il débute à l'adresse 0, se poursuit séquentiellement aux adresses 1 , 2, 3, ..., et son adresse de fin n'a pas de limite logique. Chaque adresse pointe sur un mot de 16 bits. La structure des registres de contrôle de la machine de niveau 0.4 entraîne une vision segmentée et paginée de l'espace d'adressage de la machine 21 de niveau 0.4. Cette même vision s'applique aussi à la machine 20 de niveau 0.2. L'espace d'adressage est vu comme étant découpé en segments de 64 Kilo-mots (ou Kmots, un Kmot correspondant à 1024 mots de 16 bits) pour la lecture des instructions composant un programme (c'est à dire l'étape de " fetch "). Cet espace est aussi vu comme étant découpé en pages de 8 Kmots pour la lecture ou l'écriture des données. Ces segments (et ces pages d'autre part) sont donc des plages d'adresses de taille fixe, situées les unes à la suite des autres, et couvrant l'ensemble de l'espace d'adressage. On définit par "adresse valide", une adresse permettant d'accéder directement à une information 16 bits de façon bijective (exemples de supports de l'information : RAM, ROM, EEPROM, ...). Une telle information n'est accessible que par le processeur virtuel. Toute autre adresse est dite adresse invalide, et provoque systématiquement l'exception (voir paragraphe 7) si un programme tente d'y accéder. Dans cet espace d'adressage, on distingue un "espace exploitable", ainsi qu'un "espace inexploitable" infini, disjoint du premier, et situé immédiatement après. Ces deux espaces recouvrent la totalité de l'espace d'adressage.
L'espace exploitable correspond à l'ensemble des segments contenant au moins une adresse valide. L'espace inexploitable correspond à tous les autres segments, uniquement composés d'adresses invalides. On définit par "espace adressable" l'ensemble des adresses valides de l'espace exploitable. On définit par "espace adressable exécutable" l'ensemble des adresses de l'espace adressable où l'émulateur peut aller chercher les instructions à exécuter. Le reste de l'espace adressable est désigné par "espace adressable non exécutable".
L'espace exploitable est subdivisé en deux ou trois zones disjointes qui correspondent à des mémoires ayant des propriétés éventuellement différentes, comme les RAM, ROM et EEPROM. Ces zones recouvrent la totalité de l'espace exploitable. Chacune de ces zones est continue et commence au début d'un segment de 64 Kmots. Une zone donnée occupe un ou plusieurs segments dans leur totalité, à l'exclusion de toute autre zone. Une zone n'utilisera pas nécessairement les 65536 adresses de son dernier segment. Dans ce cas, les adresses invalides sont regroupées en fin de segment.
Les différentes zones sont définies comme suit : la première zone est constituée du premier segment de l'espace d'adressage (adresses 0 à 65535). La première page de cette zone comporte des adresses valides de
mémoire réinscriptible qui sont groupées depuis le début de la page (adresse 0). La deuxième page est réservée à l'usage du niveau 0.2. Elle peut comporter des adresses valides de mémoire réinscriptible et de mémoire en lecture seulement, indépendamment de la structure de la première page. Les six pages restantes peuvent comporter des adresses valides de mémoire réinscriptible qui sont groupées depuis le début de la troisième page (adresse 16384) en un seul bloc, sous réserve que la première page ne contienne aucune adresse invalide. La deuxième zone commence au début du deuxième segment de l'espace d'adressage (adresse 65536). Elle se poursuit éventuellement sur les segments suivants. Toutes les adresses de tous les segments qu'elle occupe doivent être valides, et doivent contenir le même type de mémoire. Au démarrage de la machine de niveau zéro, cette zone doit contenir le programme de démarrage 0.4. La troisième zone est optionnelle, commence im- médiatement après le dernier segment de la deuxième zone, et ne peut exister que si la dernière adresse du premier segment (adresse 65535) est valide. Dans ce cas, elle est constituée d'un ou plusieurs segments conti- gus. Le dernier segment contient au moins une adresse valide. Ces adresses valides sont placées les unes à la suite des autres à partir de la première adresse de ce dernier segment. Tous les segments précédents éventuels ne contiennent que des adresses valides. Toutes les adresses valides de la troisième zone doivent contenir le même type de mémoire réinscriptible.
3.1 - Spécificités de l'espace d'adressage de la machine 21 de niveau 0.4
L'espace adressable exécutable correspond à la totalité de l'espace adressable. La deuxième page est réservée à l'usage du niveau 0.2. Un programme ne doit jamais tenter d'accéder à cette page sous peine de graves dysfonctionnements si la machine 21 de niveau 0.4 est émulée par la machine 20 de niveau 0.2. 3.2 - Spécificités de l'espace d'adressage de la machine 20 de niveau 0.2
Par souci de rapidité, l'espace d'adressage de la machine 20 de niveau 0.2 est strictement identique à celui de la machine 21 de niveau 0.4. Cependant, la structure du pointeur d'instruction (1P) modifie la définition de l'espace adressable exécutable : il est limité à l'espace adressable de la première zone, c'est-à-dire aux 64 premiers Kmots au maximum. La présence de mémoire est obligatoire à partir de l'adresse $2000 pour y stoc- ker le programme de démarrage 0.2. 4 - Les registres des processeurs
La structure des registres du niveau 0.2 est simplifiée par rapport à celle du niveau 0.4. 4.1 - Les registres de niveau 0.2
La difficulté de programmation du niveau 0.2 rend improbable une utilisation généraliste directe. C'est pourquoi il a été essentiellement conçu en vue d'émuler le niveau 0.4. 4.2 - Les registres de niveau 0.4 (on observe que "L/E" signifie " Lecture/Ecriture ")
4.3 - Caractéristiques communes
Les registres sont adressés comme n'importe quel autre emplacement de l'espace d'adressage, sous certaines conditions. Ils recouvrent les premières adresses de la première page de l'espace d'adressage, appelée " page 0 ". Le registre R constitue toujours l'opérande source ou l'opérande destination des instructions. Selon la quantité de mémoire allouée à la machine de niveau zéro par la machine support 23, les pointeurs d'instructions (IP) et de données (MP) peuvent prendre chacun une adresse maximale précise. Chaque adresse maximale est représentée par un certain nombre de bits significatifs appelé "capacité d'adressage". Cette capacité, variable en fonction de l'environnement matériel disponible, est exprimée en nombre de bits et découpée par portions de 16 bits, appelées fenêtres. Si la capacité d'adressage n'est pas multiple de 16, la portion accessible est agrandie au multiple de 16 supérieur. Le nombre de fenêtres accessibles est appelé largeur d'adressage.
Ainsi, une machine 21 de niveau C.4 ayant un espace exploitable s'étendant des adresses 0 à 15 000 000 a une capacité d'adressage de 24 bits, qui seront adressés à l'aide de 2 fenêtres de 16 bits. IPS et MPS pourront donc prendre les valeurs 0 ou I . Dans le cas du niveau 0.2, la largeur d'adressage du pointeur d'instructions (IP) est limitée à une fenêtre. On ne peut donc exécuter que les instructions situées dans les 64 premiers Kmots de l'espace d'adressage. En conséquence, IPS n'est pas accessible et considéré comme étant toujours nul. Dans l'exemple précédent, seul MPS pourra prendre les valeurs 0 ou 1. On remarque que l'on limite les tailles de IPS et MPS à 16 bits. Le bit de poids fort de ces registres est réservé. On peut donc adresser au maximum 32768 fenêtres de 16 bits. Ce nombre permettrait l'accès à un nombre de cases mémoires bien supérieur au nombre estimé d'atomes de l'univers... Cependant, grâce au bit réservé, il serait malgré tout possible de défi- nir une convention pour augmenter la taille de ces registres. 5 - Codage des instructions des processeurs
Chaque instruction élémentaire des processeurs de niveau zéro a une taille d'encodage fixe de 16 bits. La signification de ces différents bits varie entre le niveau 0.2 et le niveau 0.4. 5.1 - Codage des instructions de niveau 0.2
5.2 - Codage des instructions de niveau 0.4
En niveau 0.4, un bit supplémentaire est utilisé pour encoder deux nouvelles instructions (LoaD et AND). En conséquence, il y a un bit de moins pour encoder le champ " mo ".
par Paramètre de l'opé*"ation
[par = 0 : Sauvegarde de R vers ae (" ST Mem "). Si op = 0 {
[par = 1 : Chargement de R avec contenu d'ae (" LD Mem "). Avec les instructions LD et ST, en cas d'accès à la page 0, tous les registres (adresses 0 à 5) sont accessibles.
[par = 0 : ET logique du contenu d'ae avec R (" AND Mem "). Si op = H
[par = I : Soustraction avec emprunt d'ae à R (" SBB Mem "). Avec les instructions SBB et AND, en cas d'accès à la page 0, seul le registre R (adresse 0) est accessible. nb : l 'indicateur d 'emprunt B ne peut être accédé qu 'avec les instructions SBB et AND. mo Adresse absolue dans la page 0 si le bit home est baissé, ou bien masque logique combiné avec les 13 bits de poids faible de MP pour le calcul de l'adresse effective si le bit home est levé.
6 - Description des jeux d'instructions des processeurs
On observe que, par convention, le symbole <— désigne la copie du terme situé à droite dans le terme situé à gauche. On parle "d'affectation de variable". De par la nature virtuelle des processeurs de la Machine Universelle, le temps d'exécution d'une instruction est indéfini, variable et imprévisible. 6.1 - Jeu d'instructions de niveau 0.2
Le niveau 0.2 se programme à l'aide de deux instructions : la soustraction et la sauvegarde du registre R vers l'espace d'adressage. 6.1.1 - L'opération arithmétique
SB - Substract with Borrow - Soustraction avec emprunt
Syntaxe : SB adresse
Opération : R — (R - mot pointé par l'adresse effective) - B ; B <— emprunt Description : Soustrait au registre R le mot situé à l'adresse indiquée ainsi que l'emprunt. Etat de l'emprunt : B est mis à un si un emprunt est généré, il est mis à zéro sinon.
6.1.2 - L'opération de déplacement mémoire
ST - STore - Sauvegarde du registre R
Syntaxe : ST adresse
Opération : mot pointé par l'adresse effective — R
Description : Copie à l'adresse indiquée le contenu du registre R (R n'est pas modifié).
Etat de l'emprunt : B n'est pas modifié. 6.2 - Jeu d'instructions de niveau 0.4
Le niveau 0.4 se programme à l'aide de quatre instructions : deux permettant d'effectuer des opérations de type arithmétique et logique ; deux permettant d'effectuer des déplacements entre l'espace d'adressage et le registre R. 6.2.1 - Les opérations de déplacement mémoire
ST - STore - Sauvegarde du registre R
Syntaxe : ST adresse
Opération : mot pointé par l'adresse effective <- R
Description : Copie à l'adresse indiquée le contenu du registre R (R n'est pas modifié).
Etat de l'emprunt : B n'est pas modifié.
LD - LoaD - Chargement du registre R
Syntaxe : LD adresse
Opération : R <— mot pointé par l'adresse effective
Description : Copie dans le registre R le mot situé à l'adresse indiquée (le mot n'est pas modifié).
Etat de l'emprunt : B n'est pas modifié.
6.2.2 - Les opérations arithmétique et logique
AND - Logical AND - ET logique
Syntaxe : AND adresse
Opération : R - R ET mot pointé par l'adresse effective ; B <— 0
Description : Effectue le ET logique entre le registre R et le mot situé à l'adresse indiquée. Le résultat est rangé dans R.
Etat de l'emprunt : B est toujours mis à zéro.
SBB - SuBstract with Borrow - Soustraction avec emprunt
Syntaxe : SBB adresse
Opération : R — (R - mot pointé par l'adresse effective) - B ; B — emprunt Description : Soustrait au registre R le mot situé à l'adresse indiquée ainsi que l'emprunt. Etat de l'emprunt : B est mis à un si un emprunt est généré, il est mis à zéro sinon.
6.3 - Les modes d'adressage
La valeur du bit home (voir paragraphe 5), définit deux modes d'adressage. Par " mode d'adressage " nous entendons une manière de calculer l'adresse sur laquelle porte une opération (adresse effective). Ces modes d'adressage sont le mode absolu page 0 et le mode absolu indexé par MP. Ils existent dans le niveau 0.2 et le niveau 0.4, mais leur fonctionnement diffère dans certains cas particuliers. 6.3.1 - Le mode absolu page 0
Dans ce mode, l'adresse effective est calculée à partir des bits de poids faible de l'instruction (champ mo), permettant l'accès aux registres adressables de la machine, ainsi qu'aux premiers mots de l'espace d'adressage de la machine (après les registres). En niveau 0.2, le champ mo faisant 14 bits, il est possible d'accéder aux 16384 premières adresses de la machine. En niveau 0.4, comme le champ mo ne fait que 13 bits, on ne peut accéder qu'aux 8192 premières adresses de la machine. On remarque que, en langage d'assemblage, le champ " adresse " de l'instruction s'exprime sous la forme d'un numéro compris entre 0 et 8191 pour le niveau 0.4 (entre 0 et 16383 pour le niveau 0.2). 6.3.2 - Le mode absolu indexé par MP
Ce mode d'adressage permet d'accéder à l'ensemble de l'espace adressable (y compris les premiers mots de l'espace d'adressage, inaccessibles en mode absolu page 0, puisque masqués par les registres adressables). Son fonctionnement diffère entre le niveau 0.2 et le niveau 0.4. En niveau 0.4, l'adresse effective est le résultat du ET logique entre le registre MP et les 13 bits de poids faible de l'instruction (sur les 13 bits de poids faible de MP).
En langage d'assemblage, le champ " adresse " de l'instruction s'exprime alors sous la foπ.ie d'un numéro compris entre 0 et 8191 , précédé du caractère '&' (exemple : &$ 10 pour l'adresse résultant de l'opération " MP ET logique 16 "). En niveau 0.2, l'adresse effective est celle contenue dans le registre MP. En langage d'assemblage, le champ " adresse " de l'instruction contient alors le caractère '&' seul. Le champ "mo" de l'instruction est ignoré, et son contenu est indéterminé. 7 - L'exception et l'interruption
L'exception (et l'interruption en niveau 0.4) sont des mécanismes qui déroutent l'exécution séquentielle des programmes sous certaines conditions. 7.1 - L'exception 7.1.1 - L'exception en niveau 0.2 L'exception se déroule comme suit :
Appel au sous-programme de réinitialisation du cartographe/énumerateur 25.
MPS <- 0
MP <- 0 IP - $2000
Lors du premier démarrage de la machine, l'exception est immédiatement déclenchée (tous les registres 0.2 contiennent des valeurs quelconques avant son exécution). Outre le démarrage, la cause de déclenchement d'une exception est le chargement de IP ou de MP avec une adresse invalide, le chargement de MPS avec un numéro de fenêtre supérieur à la largeur d'adressage, ou bien une opération illégale sur le registre "MER" 27. 7.1.2 - L'exception en niveau 0.4 L'exception se déroule comme suit :
Appel au sous-programme de réinitialisation du cartographe/énumerateur 25. adresse 0 — 16 bits de poids faible d'IP au moment de l'exception
MPS <- 0 MP - 0
IPS <- 0
IPT <- $ 10000
IP <- IPT Lors du premier démarrage de la machine, l'exception est immédiatement déclenchée (tous les registres 0.4 contiennent des valeurs quelconques avant son exécution). Outre le démarrage, la cause de déclenchement d'une exception est le chargement de IP ou MP avec une adresse invalide, le chargement de MPS ou IPS avec un numéro de fenêtre supérieur à la largeur d'adressage de MP et IP, ou encore une opération illégale sur le registre "MER" 27. 7.2 - L'interruption 7.2.1 - L'interruption en niveau 0.2
Le mécanisme d' " interruption " en niveau 0.2 n'interrompt pas l'exécution séquentielle des instructions. C'est donc au programme écrit en niveau 0.2 d'aller vérifier régulièrement par le cartographe/énumerateur 25 la présence d'une interruption (technique usuelle dite de balayage ou " polling "). 7.2.2 - L'interruption en niveau 0.4
L'interruption en niveau 0.4 se déclenche sur commande d'un programme 0.4 à condition que le cartographe/énumerateur 25 ait été sollicité par une requête d'un périphérique 32. Si une interruption est en attente lors de la commande, le mécanisme est le suivant : adresse 0 <— 16 bits de poids faible de l'adresse de l'instruction suivant l'instruction ayant déclenché l'interruption (" LD MER "). IPT - 1 IP <- IPT Sinon, l'exécution séquentielle des instructions n'est pas rompue. 7.3 - Les programmes de démarrage 7.3.1 - Le programme de démarrage de niveau 0.2
Ce programme est appelé immédiatement après le déclenchement d'une exception et prend en charge la machine 20 de niveau 0.2. Il débute obligatoirement à l'adresse $2000. C'est une succession de codes d'instructions 0.2 et de mots de données qui peuvent contenir n'importe quel programme de taille quelconque (dans la limite de la deuxième page). Le programme de démarrage de niveau 0.2 contient l'émulateur 24 com- plet du niveau 0.4 (d'une taille d'environ 2 Kmots). Ce programme pourrait être implanté dans une ROM (ou une EEPROM) avec une machine réelle de niveau 0.2. 7.3.2 - Le programme de démarrage de niveau 0.4
Ce programme est appelé immédiatement après le déclenchement d'une exception et prend en charge la machine 21 de niveau 0.4. Il débute obligatoirement à l'adresse $ 10000 (début du deuxième segment). C'est une succession de codes d'instructions 0.4 et de mots de données qui peuvent contenir n'importe quel programme de taille quelconque. Le programme de démarrage de niveau 0.4 contiendra l'émulateur complet du niveau supérieur (machine 30 de niveau 1 ), ou tout autre programme. 8 - Algorithmes de fonctionnement des émulateurs de niveau zéro. On rappelle que les opérations sont effectuées sur 16 bits exclusivement. Les valeurs sont inteφrétées en com- plé-ment à deux. Exemple: $0000 - $0001 = $FFFF, et l'emprunt est mis à 1. Par convention, le terme "saut" désigne une rupture de séquence sans retour automatique. Le terme "appel" désigne une rupture de séquence avec retour systématique à l'instruction suivant l'instruction d'appel, après l'exécution des instructions du sous-programme. 8.1 - Algorithme de l'émulateur 22 du processeur de niveau 0.2. 8.1.1 - Initialisation :
Réservation de la mémoire nécessaire. Au minimum quelques mots pour les registres de la machine et le(s) programme(s) à exécuter.
Recopie des x mots composant le programme de démarrage à partir de l'adresse $2000. Ce programme contient l'émulateur 24 du niveau 0.4 entier dans l'implémentation effectuée par les inventeurs. Appel au sous-programme d'initialisation du cartographe/énumerateur 25 Saut à l'exception (voir paragraphe 7.1.1) 8.1.2 - Noyau : Si IP pointe sur une adresse invalide
Saut à l'exception (voir paragraphe 7.1.1) Lecture dans IP de l'adresse de l'instruction à exécuter
Lecture de l'instruction 16 bits
IP <- IP+1 (addition effectuée sur les 16 bits du registre) Si bit home = 1 alors ae = MP saut au traitement générique des instructions
Sinon mo = bits 0 à 13 de l'instruction (14 bits de poids faible) Si bit op = 0
Si mo = 0 Appel au sous-programme de lecture du cartographe/énumerateur 25
R <r- (R - MER) - B
B <— 1 si un emprunt est généré, sinon B <— 0 Saut au Noyau Sinon ae = mo
Saut au traitement générique. Sinon
Si mo = 0
MER <- R Appel au sous-programme d'écriture du cartographe/énumerateur 25
Saut au Noyau Sinon si mo = 1 ae = adresse des 16 bits de MP sélectionnés par MPS (dans l'espace d'adressage de la machine support 23) mot pointé par ae — R
Si MP pointe sur une adresse invalide
Saut à l'exception (voir paragraphe 7.1.1 ) Sinon
Saut au Noyau Sinon si mo = 2
IP - R Saut au Noyau Sinon si mo = 3
Si R est supérieur à la largeur d'adressage Saut à l'exception (voir paragraphe 7.1.1 )
Sinon
MPS - R Saut au Noyau Sinon ae = mo
Saut au traitement générique. 8.1.3 - Traitement générique des instructions :
Dans la suite, "[ae]" désigne le mot pointé par ae. Si bit op = 0 R <- (R - [ae]) - B
B <- 1 si un emprunt est généré, sinon B <- 0 Sinon
[ae] - R Saut au Noyau 8.2 - Algorithme de l'émulateur 24 du processeur de niveau 0.4
8.2.1 - Initialisation :
Réservation de la mémoire nécessaire. Au minimum quelques mots pour les registres de la machine et le(s) programme(s) à exécuter. Recopie des x mots composant le programme de démarrage à partir de l'adresse $ 10000. Ce programme contiendra l'émulateur du niveau supérieur (machine 30 de niveau 1 ) dans l'implémen- tation effectuée par les inventeurs.
Appel au sous-programme d'initialisation du cartographe/énumerateur 25 Saut à l'exception (voir paragraphe 7.1.2)
8.2.2 - Noyau :
Si IP pointe sur une adresse invalide Saut à l'exception (voir paragraphe 7.1.2)
Lecture dans IP de l'adresse de l'instruction à exécuter Lecture de l'instruction 16 bits
IP — IP+1 (addition effectuée sur ses 16 bits de poids faible uniquement) mo = bits 0 à 12 de l'instruction (13 bits de poids faible) Si bit home = 1 emo = extension par des bits à 1 de mo à la capacité d'adressage de MP ae = (MP ET logique emo) Saut au traitement générique des instructions Sinon Si bit op = 0
Si mo = 0
R <- R ( l) Saut au Noyau Sinon si mo = 1 Si bit par = 0 ae = adresse des 16 bits de IPT sélectionnés par IPS (dans l'espace d'adressage de la machine support 23) mot pointé par ae <— R Si IPS = 0 Si IPT pointe sur une adresse invalide
Saut à l'exception (voir paragraphe 7.1.2) Sinon
1P <- IPT Saut au Noyau Sinon
R <- 16 bits de IP sélectionnés par IPS Saut au Noyau Sinon si mo = 2
Si bit par = 0 Si R est supérieur à la largeur d'adressage de IP
Saut à l'exception (voir paragraphe 7.1.2) Sinon
IPS <- R Saut au Noyau Sinon
R - IPS Saut au Noyau Sinon si mo = 3
Si bit par = 0 ae = adresse des 16 bits de MP sélectionnés par MPS (dans l'espace d'adressage de la machine support 23) mot pointé par ae — R
Si MP pointe sur une adresse invalide
Saut à l'exception (voir paragraphe 7.1.2) Sinon
Saut au Noyau Sinon
R <— 16 bits de MP sélectionnés par MPS Saut au Noyau Sinon si mo = 4
Si bit par = 0
Si R est supérieur à la largeur d'adressage de MP
Saut à l'exception (voir paragraphe 7.1.2) Sinon MPS - R
Saut au Noyau Sinon
R <- MPS Saut au Noyau Sinon si mo = 5
Si bit par = 0
MER<-R
Appel au sous-programme d'écriture du cartographe/énumerateur 25 Saut au Noyau Sinon
Appel au sous-programme de lecture du cartographe/énumerateur 25 R<-MER Saut au Noyau Sinon ae = mo
Saut au traitement générique. Sinon
Si mo = 0
Si bit par = 0 R - (R ET logique R) ("
B<-0
Saut au Noyau Sinon
R -(R-R)-B B — 1 si un emprunt est généré, sinon B <— 0 <2)
Saut au Noyau Sinon ae = mo
Saut au traitement générique. 8.2.3 - Traitement générique des instructions : Si bit op = 0
Si bit par = 0
[ae] <- R Sinon R <r- [ae]
Sinon
Si bit par = 0
R <- (R ET logique [ae]) B -0 Sinon
R<-(R-[ae])-B
B <- 1 si un emprunt est généré, sinon B <- 0 Saut au Noyau Les renvois (l) et (2) concernent :
(i) Cette opération n'a aucun effet, et peut donc être supprimé; si besoin.
(2) Cette opération et la précédente peuvent se résumer par l'opération : R <- 0 - B
Dans un but de concision, la présente description ne porte que sur une machine virtuelle à trente deux instructions, appelée "machine virtuelle de niveau 1.32", "niveau 1.32", "niveau 1 ", "niveau un" ou "machine virtuelle bimode". Cependant, la présente invention ne se limite pas à ce type de machine virtuelle.
Conformément à la présente invention, le niveau 1.32 s'insère dans des machines virtuelles imbriquées, c'est-à-dire qu'une machine est émulée par une autre, hiérarchiquement de la plus simple à la plus complexe, c'est-à-dire qu'une machine donnée émule totalement une autre machine plus compliquée et élaborée, chaque machine virtuelle ayant une architecture originale, c'est-à-dire se différenciant de l'architecture des autres machines de la hiérarchie de machines virtuelles, chaque machine virtuelle étant adaptée à exécuter un programme d'émulation ou de compilation dynamique simulant l'architecture virtuelle plus complexe de niveau immédiatement supérieur, une machine virtuelle d'un niveau donné dans la hiérarchie possédant donc une architecture plus simple que celles de toutes les machines virtuelles de niveau supérieur.
Les langages machine des deux niveaux de machines virtuelles les plus bas de la hiérarchie sont spé- cifiquement conçus pour permettre l'exécution de toutes les opérations du niveau supérieur ; un niveau de la hiérarchie, constituant le sommet de la hiérarchie, n'émule aucun autre niveau de la hiérarchie. Tout niveau de la hiérarchie peut être lié à une machine réelle généraliste (la machine support) au moyen d'un programme exécutable d'émulation ou de compilation dynamique spécifique à cette machine réelle. Conformément à la présente invention, le niveau 1.32 est prévu pour être compilé dynamiquement par un niveau infé- rieur ou une machine support réelle, en plus de pouvoir être émulé. On rappelle que le processus de compilation dynamique traduit un programme une fois pour toutes dans le langage machine de la machine support au lieu de le traduire au fur et à mesure (l'inteφréter). La compilation dynamique donne un résultat beaucoup plus efficace que l'émulation (le ralentissement induit par l'émulation du niveau un par une machine support réelle ou un niveau inférieur est réduit). La machine de niveau un propose une architecture logicielle (ou matérielle) relativement simple mais spécialement conçue pour la compilation dynamique, tout en respectant les caractéristiques de la hiérarchie d'émulateurs exposée ci-dessus. Préférentiellement, la machine de niveau 1.32 possède deux espaces de mémoire distincts, l'un pour les données, l'autre pour les programmes. Pour pouvoir être exécuté, un programme doit d'abord être chargé en mémoire données, puis copié vers la mémoire programmes grâce à une instruction spécifique. La compilation dynamique intervient exclusivement lors de l'exécution de cette instruction de copie.
D'autre part, la compilation dynamique est un processus d'ordinaire complexe qui pose un certain nombre de problèmes algorithmiques pour les processeurs actuellement disponibles. Le niveau 1.32 ayant été conçu dans l'optique d'être compilé dynamiquement, les inventeurs ont découvert des moyens permettant d'éviter la grande majorité de ces problèmes : les opérations de rupture de séquence (instructions Jcc, JP et JAR, ainsi que le mécanisme d'interruption) sont aussi performantes que les opération équivalentes d'un processeur classique, mais permettent au compilateur dynamique de prévoir systématiquement la destination du saut induit par la rupture de séquence, ce qui simplifie significativement le processus de compilation dynamique ; - la mise en oeuvre de deux espaces de mémoire dédiés (mémoire données et mémoire programme) ;
l'instruction PPC de transfert entre ces deux espr.ces ; l'instruction SMP répartissant la mémoire totale disponible entre ces deux espaces ; la mise à jour des indicateurs d'état est optionnelle, mais permet d'accélérer l'exécution des programmes de niveau 1.32 lorsqu'ils sont compilés dynamiquement vers le niveau 0.4. ; - toutes les opérations relatives à la gestion et à l'accès à la mémoire sont conçues pour respecter les contraintes du niveau hiérarchique inférieur (niveau 0.4), tout en permettant une programmation plus aisée.
Les niveaux 0.2 et 0.4 représentent les fondations de la Machine Universelle. Ce sont les niveaux les plus simples de toute la hiérarchie d'émulateurs imbriqués. Le niveau un représente un niveau intermédiaire de la hiérarchie de machines virtuelle, appelée "machine universelle". C'est le premier niveau de la hiérarchie disposant de la plupart des opérations d'un processeur courant. L'exécution de tous les programmes de niveau supérieur peut reposer sur lui. La machine virtuelle de niveau un est simulée par un émulateur ou un compilateur dynamique programme chargé de réaliser la traduction des opérations de la machine virtuelle de niveau un en opérations exécutables par la machine support. La machine de niveau un est conçue pour satisfaire trois ob- jectifs. D'une part pouvoir être simulée de façon suffisamment efficace par le niveau immédiatement inférieur (niveau 0.4) de la hiérarchie d'émulateurs composant la machine universelle ; d'autre part, proposer un jeu d'instructions suffisamment riche pour permettre une programmation aisée de la plupart des problèmes algorithmiques courants ; enfin, avoir un langage machine facile à compiler dynamiquement sur n'importe quel type de machine support. La machine de niveau un utilise les mêmes protocoles de gestion des périphériques que ceux utilisés par les machines de niveau inférieur (niveau zéro). FORMAT DES DONNEES
L'unité élémentaire manipulable par la machine de niveau un est le mot de 16 bits, comme pour les machines de niveau zéro. Les données ont une taille fixe de 16 bits. ORGANISATION DE L'ESPACE D'ADRESSAGE
L'espace d'adressage de la machine de niveau un se partage en deux espaces disjoints aux fonctions différentes. Le premier est l'espace de mémoire programmes, dont la fonction est de stocker les programmes destinés à être exécutés. Ses adresses s'étendent de 0 à 2'2765- l . Le second est l'espace de mémoire données, dont la fonction est de stocker les données utilisées par les programmes pour leur fonctionnement. Ses adresses s'étendent de 0 à 232768- l .
De plus, tout programme destiné à être exécuté doit être stocké en mémoire données avant d'être transféré vers la mémoire programmes. La structure des registres de contrôle de la machine de niveau un entraîne une vision paginée des deux espaces de mémoire. Ainsi, ces espaces sont vus comme étant découpés en pages de 8 Kmots pour l'exécution des programmes, ainsi que pour la lecture ou l'écriture des données. Ces pages sont des plages d'adresses de taille fixe, situées les unes à la suite des autres, et couvrant l'ensemble de chaque espace de mémoire. De la même façon que pour les machines de niveau zéro, on définit par "adresse valide", définie par adresse valide, une adresse permettant d'accéder directement à une information 16 bits de façon bijective (exemples de supports de l'information : RAM, ROM, EEPROM, ...). Une telle information n'est accessible que par le processeur virtuel. Toute autre adresse est dite adresse invalide, et provoque systé- matiquement l'exception (voir paragraphe 7) si un programme tente d'y accéder. Dans chaque espace de mé-
moire, on distingue un espace exploitable, ainsi qu'un espace inexploitable, disjoint du premier, et situé immédiatement après. Ces deux espaces recouvrent la totalité de chaque espace de mémoire. L'espace exploitable correspond à l'ensemble des pages ne contenant que des adresses valides. Ces pages sont dites pages valides. L'espace inexploitable correspond à toutes les autres pages, uniquement composées d'adresses invalides. Ces pages sont dites pages invalides.
Chaque espace exploitable débute à l'adresse 0, se poursuit séquentiellement aux adresses 1 , 2, 3, ..., et son adresse de fin dépend de la quantité de mémoire disponible ainsi que de sa répartition entre les deux espaces de mémoire. Chaque adresse pointe sur un mot de 16 bits. On définit par "espace adressable données" l'espace exploitable de l'espace de mémoire données. On définit par "espace adressable exécutable" l'espace exploitable de l'espace de mémoire programmes. Sa première page n'est pas accessible en écriture et n'est pas interruptible, car réservée au programme de gestion de l'exception, notamment appelé au démarrage de la machine. De plus, chaque page de l'espace adressable exécutable contient un ensemble de champs de sauvegarde nécessaires au fonctionnement de l'interruption. Ces champs sont nommés IPI, RI I, R2I, ZI, NI, 01 et Cl.
Un ensemble de pages de mémoire données peut être transformé en une page de mémoire program- mes. Inversement, une page de mémoire programmes peut être transformée en un ensemble de pages de mémoire données. La première page de chaque espace de mémoire est toujours valide et n'est pas transformable.
REGISTRES DU PROCESSEUR
PRESENTATION DU JF.l ) D'INSTRUCTIONS DU PROCESSEUR
Le processeur de niveau un propose 32 instructions permettant de contrôler son fonctionnement, d'effectuer toutes les opérations arithmétiques et logiques courantes, ainsi que d'accéder aux périphériques et à la mémoire. Certaines instructions permettent la mise à jour optionnelle des indicateurs. En langage d'assemblage, la lettre représentant l'indicateur apparaît ou non dans la syntaxe de ces instructions, selon que la mise à jour doit être faite ou non. La lettre T (pour « Trash » ou poubelle) ne représente pas un indicateur, mais un sélecteur permettant de sauvegarder ou non le résultat de certaines opérations dans le registre destination, selon qu'elle apparaît ou non. Chaque instruction élémentaire du processeur de niveau un a une taille d'encodage fixe de 32 bits, à l'exception de l'instruction JAR dont la taille est variable. Les instructions sont lues en mémoire programmes par l'intermédiaire du registre IP, dont le bit de poids faible est systématique- ment nul. Chaque instruction doit donc être alignée sur une adresse paire. Après l'exécution de chaque instruction (à l'exception des instructions de saut), IP est incrémenté de 2. Si IP dépasse l'adresse 8190, l'exception est déclenchée.=Chaque instruction élémentaire de la machine de niveau un a une taille fixe de 32 bits, à l'exception de l'instruction JAR dont la taille est variable. Dans la description des instructions, les bits ont par défaut la signification suivante : 0 = bit devant être mis à zéro 1 = bit devant être mis à un x = bit réservé dont la valeur doit être nulle f = si bit mis à 1, alors mise à jour des indicateurs Z et N o = si bit mis à 1 , alors mise à jour de l'indicateur O c = si bit mis à 1 , alors mise à jour de l'indicateur C ddddddddddd = numéro du registre destination Rj entre 0 et 2047 sssssssssss = numéro du registre source Rs entre 0 et 2047 rrrrrrrrrrr = numéro du registre Rr entre 0 et 2047 mmmmmmmmmmmmm = masque d'adresse sur 13 bits e = si bit mis à 1, alors ne met pas à jour le registre destination vvvv = nombre de décalages ou de rotations (selon l'instruction) imm- 1 entre 0 et 15 DESCRIPTION DU JEU D'INSTRUCTIONS DU PROCESSEUR
Par convention, le symbole <- désigne la copie du terme situé à droite dans le terme situé à gauche. On parle d'affectation de variable. Par convention, le caractère « : » désigne la concaténation des bits de l'opérande de gauche avec les bits de l'opérande de droite. La concaténation se fait au niveau du bit de poids faible de l'opérande de gauche et du bit de poids fort de l'opérande de droite. Les opérations arithmétiques
ADD - ADD without carry - Addition sans retenue
Syntaxe : ADD Rd,Rs,ZNOCT
Description : Ajoute le contenu du registre Rd avec le contenu du registre Rs. Le résultat est placé dans le registre destination R<j si T n'est pas mentionné.
Opération : Rmp <- Rd + Rs ; Si T n'est pas mentionné, alors Rj <- R,mp ; les indicateurs mentionnés (f pour
Z et N, o pour O, et c pour C) sont mis à jour selon le résultat de l'addition.
Codage : lOOOOddddddddddd focexsssssssssss
ADC - ADd with Carry - Addition avec retenue
Syntaxe : ADC Rd,Rs,ZNOCT
Description : Ajoute le contenu du registre R<j, le contenu du registre Rs, ainsi que l'indicateur de retenue C.
Le résultat est placé dans le registre destination Rd si T n'est pas mentionné
Opération : R^p <- R^ + Rs + C ; Si T n'est pas mentionné, alors Rd - R^ ; les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis à jour selon le résultat de l'addition.
Codage : 10001 ddddddddddd focexsssssssssss
SUB - SUBstract without borrow - Soustraction sans emprunt
Syntaxe : SUB Rd,Rs,ZNOCT
Description : Soustrait le contenu du registre Rs au contenu du registre R^. Le résultat est placé dans le registre destination Rd si T n'est pas mentionné
Opération : R^p <- Rj - Rs ; Si T n'est pas mentionné, alors Rj <- Rlmp , les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis à jour selon le résultat de la soustraction. Codage : lOOlOddddddddddd focexsssssssssss
SBB - SuBstract with Borrow - Soustraction avec emprunt
Syntaxe : SBB Rd,Rs,ZNOCT
Description : Soustrait le contenu du registre Rs, ainsi que l'indicateur de retenue C (emprunt), du contenu du registre Rj. Le résultat est placé dans le registre destination Rd si T n'est pas mentionné.
Opération . R^p <— Rj - Rs - C ; Si T n'est pas mentionné, alors Rd <- Rtmp ; les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis àjour selon le résultat de la soustraction.
Codage : 10011 ddddddddddd focexsssssssssss
MUL - Unsigned MULtiply - Multiplication non signée
Syntaxe : MUL Rd,Rs,ZNT
Description : Multiplie le contenu du registre Rd par le contenu du registre Rs. Les 16 bits de poids fort du résultat sont placés dans le registre R^ qui précède immédiatement le registre destination Rd Si T n'est pas mentionné, alors les 16 bits de poids faible du résultat sont placés dans le registre destination R Opération : R^ (mod 2048) Rιmp <- R<ι * Rs ; Si T n'est pas mentionné, alors Rd <- R,mp , les indicateurs mentionnés (f pour Z et N) sont mis àjour selon les 16 bits de poids faible du résultat de la multiplication, éventuellement placés dans R<j Codage : lOlOOddddddddddd fxxexsssssssssss e : si bit mis à 1 , le registre Rd ne reçoit pas le poids faible du résultat
DIV - Unsigned DIVide - Division non signée
Syntaxe : DIV Rd,Rs,ZNT
Description : Divise le contenu du registre Rd par le contenu du registre Rs. Le reste est placé dans le registre Rd-i qui précède immédiatement le registre destination Rd. Si T n'est pas mentionné, alors le quotient est placé dans le registre destination Rj.
Opération : R^ <- Rd div Rs ; Rd.i (mod 2(M8) <- Rd mod Rs ; Si T n'est pas mentionné, alors Rd <- R,mp ; les indicateurs mentionnés (f pour Z et N) sont mis àjour selon la valeur du quotient de la division, éventuellement placé dans R^. En cas de division par 0 (Rs = 0), aucune opération n'est effectuée Codage • IOlOlddddddddddd fxxexsssssssssss
: si bit mis à 1 , le registre Rd ne reçoit pas le quotient
Les opérations logiques
AND - Logical AND - ET logique
Syntaxe : AND Rd,Rs,ZNT
Description : Effectue le ET logique bit à bit entre le contenu du registre Rd et le contenu du registre Rs. Le résultat est placé dans le registre destination Rd si T n'est pas mentionné.
Opération : Rmp <- Rd ET logique Rs ; Si T n'est pas mentionné, alors Rd — Rtmp ; les indicateurs mentionnés (f pour Z et N) sont mis à jour selon le résultat du ET logique. Codage : lOUOddddddddddd fxxexsssssssssss
OR - Logical OR - OU logique
Syntaxe : OR Rd,Rs,ZNT
Description : Effectue le OU logique inclusif bit à bit entre le contenu du registre R et le contenu du registre Rs. Le résultat est placé dans le registre destination R si T n'est pas mentionné. Opération : Rtmp <— Rd OU logique Rs ; Si T n'est pas mentionné, alors Rd — Rtmp ; les indicateurs mentionnés (f pour Z et N) sont mis àjour selon le résultat du OU logique. Codage : 1011 lddddddddddd fxxexsssssssssss
XOR - Logical exclusive OR - OU logique exclusif
Syntaxe : XOR Rd,Rs,ZN
Description : Effectue le OU logique exclusif bit à bit entre le contenu du registre Rd et le contenu du registre Rs. Le résultat est placé dans le registre destination Rd.
Opération : Rd <— Rd OU logique exclusif Rs ; les indicateurs mentionnés (f pour Z et ) sont mis à jour selon le résultat du OU logique exclusif. Codage : HOOOddddddddddd fxxxxsssssssssss
ASR - Arithmetic Shift Right - Décalage arithmétique vers la droite
Syntaxe : ASR Rd,#imm,ZNC
Description : Décale vers la droite le contenu du registre Rd du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. A chaque décalage, le signe de la valeur décalée reste inchangé. Le résultat est placé dans le registre destination Rd. En cas de mise àjour, l'indicateur C correspond au dernier bit sorti.
Opération : Rd <— R décalé à droite de imm bits, le bit de poids fort restant inchangé à chaque décalage ; les indicateurs mentionnés (f pour Z et N, c pour C) sont mis àjour selon le résultat du dernier décalage. Codage : HOOlddddddddddd fxcxxxxxxxxxvvvv
LSL - Logical Shift Left - Décalage logique vers la gauche
Syntaxe : LSL Rd,#imm,ZNOC
Description : Décale vers la gauche le contenu du registre Rd du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. Le résultat est placé dans le registre destination R^ En cas de mise à jour, l'indicateur C correspond au dernier bit sorti.
Opération : Rd - Rd décalé à gauche de imm bits ; les bits entrant sont mis à 0 ; les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis àjour selon le résultat du dernier décalage.
Codage : 1 lOlOddddddddddd foc. xxxxxxxxvvvv
LSR - Logical Shift Right - Décalage logique vers la droite
Syntaxe : LSR Rd,#imm,ZNOC
Description : Décale vers la droite le contenu du registre Rd du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. Le résultat est placé dans le registre destination R . En cas de mise à jour, l'indicateur C correspond au dernier bit sorti.
Opération : Rd <— Rd décalé à droite de imm bits ; les bits entrant sont mis à 0 ; les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis àjour selon le résultat du dernier décalage. Codage : 1 101 (ddddddddddd focxxxxxxxxxvvvv
ROL - ROtate Left - Rotation logique vers la gauche
Syntaxe : ROL Rd,#imm,ZNC
Description : Rotation vers la gauche du contenu du registre R du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. Le résultat est placé dans le registre destination Rd. En cas de mise àjour, l'indicateur C correspond au bit de poids faible du résultat.
Opération : Rd — Rotation de R de imm bits vers la gauche ; les indicateurs mentionnés (f pour Z et N, c pour C) sont mis àjour selon le résultat de la dernière rotation.
Codage : lllOOddddddddddd fxcxxxxxxxxxvvvv
ROR - ROtate Right - Rotation logique vers la droite
Syntaxe : ROR Rd,#imm,ZNC
Description : Rotation vers la droite du contenu du registre Rd du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. Le résultat est placé dans le registre destination Rά. En cas de mise àjour, l'indicateur C correspond au bit de poids fort du résultat.
Opération : Rd <— Rotation de Rd de imm bits vers la droite ; les indicateurs mentionnés (f pour Z et N, c pour C) sont mis àjour selon le résultat de la dernière rotation.
Codage : l l lOlddddddddddd fxcxxxxxxxxxvvvv
RCL - Rotate with Carry Left - Rotation logique avec la retenue vers la gauche
Syntaxe : RCL Rd,#imm,ZNC
Description : Rotation vers la gauche du contenu du registre Rd, ainsi que de la retenue, du nombre de bits indiqué par la valeur immédiate imm, comprise entre 1 et 16. En cas de mise àjour de la retenue, chaque bit sortant par la gauche du registre Rd est placé dans la retenue. Dans tous les cas, le précédent contenu de la retenue entre par la droite du registre R^. Le résultat est placé dans le registre destination R^. Opération : Rd:C — Rotation de Rd:C de imm bits vers la gauche (ou bien, si l'indicateur n'est pas mis à jour, Rd <— Rd décalé de imm bits vers la gauche, les bits entrant ayant même valeur que l'indicateur C) ; les indicateurs mentionnés (f pour Z et N, c pour C) sont mis àjour selon le résultat de la dernière rotation. Codage : 1 1 1 lOddddddddddd fxcxxxxxxxxxvvvv
RCR - Rotate with Carry Right - Rotation logique avec la retenue vers la droite
Syntaxe : RCR Rd,#imm,ZNC
Description : Rotation vers la droite du contenu du registre Rd, ainsi que de la retenue, du nombre de bits indiqué par la valeur immédiate imm, comprise entre I et 16. En cas de rafraîchissement de la retenue, cha-
que bit sortant par la droite du registre Rd est placé dans la retenue. Dans tous les cas, le précéder! contenu de la retenue entre par la gauche du registre Rd. Le résultat est placé dans le registre destination Rd. Opération : C:Rd <— Rotation de C:Rd de imm bits vers la droite (ou bien, si l'indicateur n'est pas mis à jour, Rd <- Rd décalé de imm bits vers la droite, les bits entrant ayant même valeur que l'indicateur C) ; les indicateurs mentionnés (f pour Z et N, c pour C) sont mis à jour selon le résultat de la dernière rotation. Codage : U l l lddddddddddd fxcxxxxxxxxxvvvv
Les opérations de transfert
MOVE - MOVE register - Copie d'un registre
Syntaxe : MOVE Rd,Rs,ZNOC
Description : Copie le contenu du registre Rs dans le registre R^.
Opération : R<ι — Rs ; les indicateurs mentionnés (f pour Z et N, o pour O, et c pour C) sont mis àjour selon la valeur de Rj en ce qui concerne Z et N, et sont mis à 0 en ce qui concerne O et C. Codage : OOOOOddddddddddd focxxsssssssssss
LDI - LoaD Immédiate into register - Chargement d'une valeur immédiate dans un registre
Syntaxe : LDI Rd,#imm
Description : Charge dans le registre Rd une valeur immédiate imm 16 bits.
Opération : Rd <— valeur immédiate imm sur 16 bits ; les indicateurs ne sont jamais affectés.
Codage : 00001 ddddddddddd vvvvvvvvvvvvvvvv vvvvvvwvvvvvvvv : valeur immédiate imm entre 0 et 65535 (ou entre -32768 et +32767)
PPC - Program Page Copy - Copie d'une page de programme
Syntaxe : PPC Rr,I
Description : Copie la page de mémoire données désignée par MBR, dont les 13 bits de poids faible sont considérés comme nuls, vers la page de mémoire programmes dont le numéro relatif à la page couramment exécutée est indiqué dans le registre Rr. Si la page de mémoire programmes désignée est invalide, ou bien si elle correspond à la page en cours d'exécution (Rr = 0), alors l'exception est déclenchée. Si l'indicateur 1 est mentionné, alors les programmes situés dans la page destination seront interruptibles, sinon aucune interruption ne pourra intervenir lors de l'exécution de ces programmes.
Opération : Tous les mots de la page de mémoire données désignée par les bits de poids fort de MBR (à partir du bit numéro 13) sont copiés vers la page de mémoire programmes indiquée. Si cette page est invalide ou en cours d'exécution, alors l'exception est déclenchée. Les données copiées dans la mémoire programmes sont prêtes à être exécutées. Le numéro de la page de mémoire programme cible de la copie est égal à PP + (R,. étendu par son signe). Les champs IPI, RI I, R2I, ZI, NI, OI et CI de la page cible sont mis à 0.
Codage : OOOlOrrrrrrrrrrr xxxxixxxxxxxxxxx i : si bit mis à 1 , les interruptions seront autorisée pendant l'exécution du programme contenu dans la page copiée
LDR - LoaD Register - Chargement d'un registre depuis la mémoire
Syntaxe : LDR Rd,&masque d'adresse,ZN
Description : Charge dans le registre Rd le mot situé en mémoire données à l'adresse résultant de la combi-
naison entre MBR et le masque d'adresse.
Opération : Rj <- contenu de la mémoire pointée par MBR, registre dont les 13 bits de poids faible sont combinés par un ET logique avec le masque d'adresse ; les indicateurs mentionnés (f pour Z et N) sont mis àjour selon la valeur du mot chargé.
Codage : OOlOOddddddddddd fxxmmmmmmmmmmmmm
STR - STore Register - Sauvegarde d'un registre vers la mémoire
Syntaxe : STR Rs,&masque d'adresse.ZN
Description : Sauvegarde le registre Rs vers l'adresse de mémoire données résultant de la combinaison entre MBR et le masque d'adresse.
Opération : emplacement de la mémoire pointé par MBR, registre dont les 13 bits de poids faible sont combinés par un ET logique avec le masque d'adresse — Rs ; les indicateurs mentionnés (f pour Z et N) sont mis àjour selon la valeur du mot sauvegardé. Codage : OOlOlsssssssssss fxxmmmmmmmmmmmmm
BLD - Burst LoaD - Chargement en rafale depuis la mémoire
Syntaxe : BLD Rd,&masque d'adresse
Description : Charge dans les 256 registres à partir de R les mots en mémoire données situés à partir de l'adresse pointée par MBR, dont les 8 bits de poids faible sont considérés comme nuls, et dont les bits 8 à
12 sont combinés par un ET logique avec les bits correspondant du masque d'adresse. Le registre de départ
Rd peut être au choix l'un des registres Ro, R256, R512, R768. R1024, R1280, R1536, ou R|792.
Opération : L'opération suivante est répétée pour i allant de 0 à 255 :
Rd+, <- contenu de la mémoire pointée par (MBR ET logique (0 sur les bits 0 à 7 d'une part, et masque d'adresse sur les bits 8 à 12 d'autre part)) + i.
Codage : OOl lOdddxxxxxxxx xxxmmmmmxxxxxxxx ddd : 000 = Ro, 001 = R256, 010 = R512, ..., 1 10 = R|536, 1 1 1 = R1792 nimmmm : masque d'adresse sur 5 bits, appliqué aux bits 8 à 12 de MBR
BST - Burst Store - Sauvegarde en rafale vers la mémoire
Syntaxe : BST Rs,&masque d'adresse
Description : Sauvegarde les 256 registres à partir de Rs vers les adresses de mémoire données situées à partir de l'adresse pointée par MBR, dont les 8 bits de poids faible sont considérés comme nuls, et dont les bits 8 à 12 sont combinés par un ET logique avec les bits correspondant du masque d'adresse. Le registre de départ R^ peut être au choix l'un des registres Ro, R256, R512, R768, Rιo2 > R1280, R1536, ou R17 2.
Opération : L'opération suivante est répétée pour i allant de 0 à 255 : emplacement de la mémoire pointé par (MBR ET logique (0 sur les bits 0 à 7 d'une part, et masque d'adresse sur les bits 8 à 12 d'autre part)) + i <— Rs+1.
Codage : OOl l lsssxxxxxxxx xxxmmmmmxxxxxxxx sss : 000 = Ro, 001 = R256, 010 = R5,2, ..., 1 10 = Rl536, 1 1 1 = R1792 nimmmm : masque d'adresse sur 5 bits, appliqué aux bits 8 à 12 de MBR
Les opérations de rupture de séquence
Jcc - Conditional Jump - Saut conditionnel
JP - Relative Ju p to other Page - Saut vers une autre page, relativement à la page courante
Syntaxe : JP Rr
Description : Saut long vers l'adresse 0 d'une autre page de mémoire programmes, relativement à la page courante, d'une amplitude de -32768 à +32767 pages indiquée par le contenu du registre Rr. Si la page destination est invalide, alors l'exception est générée.
Opération : PP,„,P - PP + (Rr étendu par son signe) ; Si PPmφ pointe sur une page invalide, alors l'exception est générée ; Sinon PP — PPtmp ; IP <— 0 ; les indicateurs ne sont jamais affectés. Codage : OlOOlrrrrrrrrrrr xxxxxxxxxxxxxxxx
JAR - Indirect Jump by pointer ARray - Saut indirect par table de pointeurs.
Syntaxe : JAR Rr,#imm,pointeurι,pointeur2,pointeur3,...,pointeur( imm)
Description : Saut absolu dans la page courante de mémoire programmes à une adresse paire par choix d'un pointeur dans une table. La taille de la table est une puissance de 2 dont l'exposant imm est compris entre 1 et 8. Une des entrées de la table peut être la cible d'un saut absolu, bien que cette possibilité soit déconseillée. Si l'adresse du pointeur désigné par Rr dépasse le dernier mot de la page de mémoire courante,
alors l' exception est déclenchée.
Opération : TBPT - (adresse de l'instruction + 2 + Rr modulo 2imm) ; Si TBPT > 8191, alors l'exception est générée ; Sinon IP — pointeur situé à l'adresse TBPT ; les indicateurs ne sont jamais affectés.
Codage :
OlOlOrrrrrrrrrrr xxxxxxxxxxxxxttt xxxaaaaaaaaaaaax ... xxxaaaaaaaaaaaax
2t+l mots (table de pointeurs) ttt : exposant imm-1 entre 0 et 7 aaaaaaaaaaaa : bits 1 à 12 d'une adresse absolue dans la table
Les opérations sur les registres spéciaux
LDB - LoaD Memory Base Register - Chargement du registre de base mémoire
Syntaxe : LDB Rb,#imm
Description : Charge les imm mots de poids faible du registre de base mémoire MBR à partir du pointeur de base mémoire contenu dans le registre Rb et éventuellement dans les registres précédents, Rb étant chargé dans le mot de plus faible poids de MBR. L'éventuelle portion de poids fort restante du registre MBR n'est pas affectée. Si l'adresse de mémoire données désignée est invalide, alors l'exception est déclenchée.
Opération : MBR,,,,,, — Rb-imm+i (mod 20 8) : • •• : Rb ; Si MBRtrnp pointe sur une adresse invalide, alors l'exception est déclenchée ; Sinon, les imm mots de poids faible de MBR — MBR^p ; les indicateurs ne sont jamais affectés.
Codage : OlOl l bbbbbbbbbbb : valeur immédiate imm- 1 entre 0 et 2047 bbbbbbbbbbb : numéro du registre Rb entre 0 et 2047
MOC - Mapper/Enumerator Output Command - Exécute une commande de sortie du Cartogra- phe/Enumérateur
Syntaxe : MOC Rs,#imm,ZN
Description : Charge la valeur imm dans le registre MER (sélection de commande), puis charge le contenu du registre Rs dans le registre MER. En cas de manipulation incorrecte du registre MER, l'exception est déclenchée.
Opération : MER — imm ; MER — Rs. Les indicateurs mentionnés (f pour Z et N) sont mis àjour selon la valeur du registre Rs chargé dans le registre MER. L'exception peut être déclenchée au cours de l'un des chargements. La mise àjour éventuelle des indicateurs intervient entre les deux chargements. Codage : Ol lOOsssssssssss fxxxxxxxxxxxxvvv vvv : numéro de la commande du Cartographe/Enumérateur
MIC - Mapper/Enumerator Input Command - Exécute une commande d'entrée du Cartographe/Enumérateur Syntaxe : MIC Rd,#imm,ZN
Description : Charge la valeur imm dans le registre MER (sélection de commande), puis sauvegarde le contenu du registre MER dans le registre Rd- En cas de manipulation incorrecte du registre MER, l'exception est déclenchée. Opération : MER — imm ; Rd <- MER. Les indicateurs mentionnés (f pour Z et N) sont mis àjour selon la
valeur sauvegardée depuis le registre MER. L'exception peut être déclenchée au cours du chargement on de la sauvegarde, avant la mise àjour éventuelle des indicateurs.
Codage : Ol lOlddddddddddd fxxxxxxxxxxxxvvv vvv : numéro de la commande du Cartographe/Enumérateur
L'opération de réglage de la partition de la mémoire
SMP - Set Memory Partition - Réglage de la partition de la mémoire
Syntaxe : SMP Rr
Description : Répartit la mémoire centrale disponible entre la mémoire programmes et la mémoire données, relativement à la répartition courante, et met à 0 le registre MBR. Le contenu du registre Rr indique le nombre de pages à ajouter ou à retirer à la mémoire programmes. Toute page ajoutée à la mémoire programmes retire un nombre déterminé de pages de la mémoire données. Inversement, toute page retirée de la mémoire programmes ajoute un nombre déterminé de pages à la mémoire données. Lorsque le nombre de pages de mémoire données, non comprise la première page, n'est pas suffisant pour ajouter le nombre de pages de mémoire programmes indiqué, alors l'exception est déclenchée. De même, elle est déclenchée lorsqu'il n'y a pas assez de mémoire programmes pour retirer le nombre de pages indiqué, la première page ne pouvant jamais être retirée. Enfin, si la page de mémoire programmes courante, dans laquelle se situe l'instruction SMP exécutée, doit être invalidée par cette instruction, alors l'exception est également déclenchée. En cas d'exception, la partition mémoire n'est pas modifiée, mais MBR est mis à 0.
Opération : MBR <— 0 ; Si la nouvelle partition est invalide, au regard des quantités de mémoires programmes et données disponibles, alors l'exception est déclenchée ; Sinon, ajoute ou retire le nombre de pages de mémoire programmes indiqué par le contenu du registre Rr (considéré comme signé). Si le contenu du registre Rr est nul, alors la partition mémoire reste inchangée. L'ajout d'une page de mémoire programmes se traduit toujours par l'invalidation de n pages de mémoire données à partir de la dernière page valide, et la validation de la page de mémoire programmes située après la dernière page valide. Une page nouvellement ajoutée à la mémoire programmes déclenche l'exception si l'on tente de l'exécuter avant de l'avoir initialisée par une instruction PPC. Les champs IPI, RI I, R2I, ZI, NI, OI et CI d'une page nouvellement ajoutée sont mis à 0. Inversement, la suppression d'une page de mémoire programmes se traduit toujours par la validation de n pages de mémoire données situées immédiatement à la suite de la dernière page valide, et l'invalidation de la dernière page valide de mémoire programmes. Tous les mots de ces nouvelles pages de mémoire données prennent la valeur 0.
Le nombre n de pages de mémoire données ajoutées ou retirées dépend de l'implémentation du processeur. Il est compris entre 1 et 8 (inclus). Codage : OOOl l rrrrrrrrrrr xxxxxxxxxxxxxxxx
Les opérations relatives à l'interruption
SIP - Set Interrupt Page - Définit la page du programme d'interruption
Syntaxe : SIP Rr
Description : Définit la valeur, indiquée dans le registre Rr, à affecter au mot de poids faible de PP en cas d'interruption. Un groupe de 65536 pages de mémoire programmes contenant des pages interruptibles doit donc réserver une page spéciale de gestion de l'interruption au moyen de cette instruction.
Opération : IV <- Rr
Codage : Ol l lOrrrrrrrrrrr xxxxxxxxxxxxxxxx
RTI - ReTurn from Interrupt - Retour d'interruption
Syntaxe : RTI
Description : Reprend l'exécution d'une page de mémoire programmes interrompue par l'interruption en restaurant certains registres du processeur. L'adresse de cette page est obtenue par insertion du registre R2047 dans les 16 bits de poids faible du registre PP. Si la page de retour est invalide, l'exception est déclenchée. Sinon, l'exécution reprend dans la page à l'adresse indiquée par son champ IPI. Opération : PP,™,, - PP ; bits 0 à 15 de PP^p - R20 7 ; Si Punp pointe sur une page invalide, alors l'exception est déclenchée ; Sinon PP <- PPmp ; Z - ZI de la page pointée par PP ; N <- NI de la page pointée par PP ; O — OI de la page pointée par PP ; C - CI de la page pointée par PP ; R2046 <— I I de la page pointée par PP ; R2047 <- R2I de la page pointée par PP ; IP <- IPI de la page pointée par PP. Codage : Ol lllxxxxxxxxxxx xxxxxxxxxxxxxxxx
L'EXCEPTION ET L'INTERRUPTION
L'exception et l'interruption sont des mécanismes qui déroutent l'exécution séquentielle des programmes sous certaines conditions.
L'exception Le mécanisme d'exception déroute l'exécution séquentielle des instructions lorsqu'une instruction tente d'effectuer une opération invalide. Elle sauvegarde alors le registre PP dans la première page de mémoire données. Ci-dessous, « [adr] » représente le mot pointé par l'adresse adr dans la première page de mémoire données.
L'exception se déroule comme suit : - Appel au sous-programme de réinitialisation du Cartographe/Enumérateur.
[0] <- nombre n de fenêtres de codage de PP
[1] à [n] <— registre PP, du mot de plus fort poids au mot de plus faible poids
- PP <- 0
- IP <- 0 Lors du premier démarrage de la machine, tous les registres de la machine présentés précédemment
(sauf le registre MER) sont mis à 0, puis l'exception est déclenchée. Outre le démarrage, la cause de déclenchement d'une exception est le chargement de MBR avec une adresse invalide, le chargement de PP avec un numéro de page invalide, la copie d'une page de mémoire données vers une page de mémoire programmes invalide ou en cours d'exécution, une répartition invalide entre les mémoires données et programmes, l'accès à un pointeur d'une instruction JAR au delà de l'adresse 8191 de la page de mémoire programmes courante, l'incrémentation de IP au delà de l'adresse 8190 de la page de mémoire courante, une opération illégale sur le registre MER, ou bien le déclenchement d'une interruption avec le registre IV faisant pointer le registre PP vers une page invalide. L'interruption Le mécanisme d'interruption en niveau un interrompt l'exécution séquentielle des instructions. L'interruption ne peut survenir que pendant l'exécution d'un programme situé dans une page interruptible. Elle ne peut en
aucun cas intervenir au couπ de l'exécution d'une instruction, nais seulement entre deux instructi ons. D'autre part, dans le cas d'une page interruptible, à partir du moment où l'interruption est demandée par le Cartogra- phe/Enumérateur, un maximum de 16 instructions peuvent être exécutées avant le déroutement vers la page du programme d'interruption. En cas d'interruption, le mécanisme est le suivant :
- PP^ <- PP
- Bits 0 à 15 de PPtmp <- IV
Si PPtmp désigne une page de mémoire programmes invalide o Déclenche l'exception - Sinon o IPI de la page pointée par PP — IP o RI I de la page pointée par PP <— R2046 o R2I de la page pointée par PP - R20 7 o ZI de la page pointée par PP <- Z o NI de la page pointée par PP <- N o OI de la page pointée par PP <- O o CI de la page pointée par PP - C o 2046 *- numéro du périphérique ayant déclenché l'interruption (fourni par le Cartogra- phe/Enumérateur) o R2047 - bits 0 à 15 de PP o PP <- PP^p o IP <- 0 Pour revenir au programme qui a été interrompu, le programme de gestion de l'interruption doit exécuter une instruction RTI. Le retour d'interruption est alors déclenché. Le mot de poids faible du registre PP est restauré à partir du registre R2047, puis IP, R2046, R2047, Z, N, O, et C sont restaurés respectivement à partir des champs IPI, RI I, R2I, ZI, NI, OI, et CI de la page pointée par le registre PP. Le programme de démarrage
Ce programme est appelé immédiatement après le déclenchement d'une exception et prend en charge la machine de niveau un. Il débute obligatoirement à l'adresse 0 de la première page de mémoire programmes. C'est une succession de codes d'instructions de niveau un qui peuvent contenir n'importe quel programme dans la limite de la première page de mémoire programmes. 9 - Aspects théoriques 9.1 - Notions importantes 9.1.1 - Notion de périphérique 9.1.1.1 - Définition d'un périphérique
Un processeur est une machine conçue pour traiter des données. Pour que son fonctionnement soit utile, il doit pouvoir recevoir des données et/ou envoyer les résultats de ses calculs là où ils auront un effet approprié. Les "périphériques" constituent tout ce qui se situe à l'extérieur du processeur. Ils mettent à la disposition de ce dernier des données et/ou recueillent le résultat de ses calculs, en opérant éventuellement une conversion de
l'information échangée. Avec l'intégration les composants électroniques, on constate fréquemment que plusieurs fonctions sont assurées par ce que l'on appelle communément " un périphérique " pour le processeur. Ainsi, une carte électronique gérant un clavier peut gérer également une manette de jeu et une souris. Le problème est que l'on confond le lieu où les fonctions sont assurées (la carte électronique) et leurs finalités (gérer un clavier, gérer une souris, etc.). Dans cet exemple, nous considérons que le clavier, la souris et la manette de jeu sont autant de périphériques différents. Nous parlerons donc de trois périphériques, malgré le fait qu'ils soient gérés par une même carte. 9.1.1.2 - Fonction, configurations, et homogénéité
Chaque périphérique dispose d'un ensemble de caractéristiques réalisant une seule fonction homogène, pour laquelle il a été conçu, appelée fonction. Tous les éléments qui participent à cette fonction sont considérés comme appartenant au même périphérique. La fonction définit donc l'unité du périphérique. Les caractéristiques de cette fonction peuvent être paramétrées selon un certain nombre de configurations. L'appréciation de la limite permettant de définir l'homogénéité d'une fonction est parfois difficile et subjective. Par exemple, le clavier d'un ordinateur peut être considéré comme un outil permettant de transcrire des données culturelles composées de lettres, mais dont le sens n'apparaît que lorsque ces dernières sont assemblées en mots. Dans cette optique, une lettre seule n'a pas de sens, c'est pourquoi l'ensemble du clavier doit être représenté comme un seul périphérique. Par contre, si le clavier est considéré comme un ensemble de boutons véhiculant chacun une information symboliquement indépendante, alors chaque touche peut être présentée comme un périphérique à part entière. Pour évaluer l'homogénéité de la fonction assurée par un périphérique, il faut donc étudier : l'utilité et la finalité du périphérique (ex : une souris permet essentiellement un déplacement spatial continu, un clavier donne ponctuellement des informations symboliques). la dépendance des informations traitées par le périphérique pour assurer sa fonction (ex : on peut manipuler la souris, sans affecter l'état du clavier, et vice versa). II est important de se méfier de la proximité géographique des différents composants d'un périphérique. Par exemple, un clavier et une souris sont ordinairement placés côté à côte, mais on ne doit pas les considérer comme un seul périphérique. A l'inverse, un volant pour jeux vidéos accompagné de pédales sont considérés comme un seul périphérique, bien que le volant soit souvent assez éloigné géographiquement des pédales pour des raisons ergonomiques. 9.1.1.3 - Unités algorithmiques et non algorithmiques
Tout périphérique dispose de procédés techniques traitant l'information sous forme de signaux (électriques, lumineux, sonores, ...). On considère ces procédés comme rassemblés en "unités fonctionnelles". Une unité fonctionnelle manipule et transforme les signaux selon son domaine de compétence. L'ensemble des unités fonctionnelles assure ainsi la fonction pour laquelle le périphérique est conçu. On ne s'intéresse pas au détail des procédés techniques sous-jacents à une unité fonctionnelle, mais à la fonction de transformation du signal qu'elle réalise.
Par exemple, une carte sonore peut comporter un convertisseur numérique/analogique, une horloge, un oscillateur générateur d'ondes, un amplificateur réglable, un processeur de traitement du signal, etc. Chacun de ces éléments est une unité fonctionnelle participant à la fonction du périphérique. Nous classons les unités fonctionnelles en deux catégories :
- les "unités algorithmiques" dont la fonction de transformation digitale peut être reproduite entièreme.it et de façon identique par logiciel (ou de façon satisfaisante pour une fonction de transformation analogique), et
- les "unités non algorithmiques" qui réalisent une fonction de transformation du signal impossible à reproduire par logiciel. Selon les périphériques on trouvera l'une, l'autre ou les deux catégories d'unités. L'interface de programmation du périphérique permet généralement d'exploiter toutes les unités disponibles, mais le présent procédé de gestion des périphériques ne prend en considération que les unités non algorithmiques, dans la mesure où les processeurs virtuels sont capables d'assurer les opérations relevant des unités algorithmiques par eux-mêmes. Ainsi les périphériques de transformation des données utilisant seulement des unités algorithmiques ne sont pas gérés par le présent procédé de gestion des périphériques. Par exemple, un coprocesseur arithmétique fonctionne uniquement avec des unités algorithmiques : il ne sera donc pas géré par le présent procédé de gestion des périphériques puisque les processeurs virtuels peuvent reproduire totalement son comportement par programme. Parfois, l'accès direct à une unité non algorithmique est impossible sans passer par une unité algorithmique. Dans ce seul cas, le présent procédé de gestion des périphériques doit gérer les unités algorithmi- ques permettant d'accéder aux unités non algorithmiques. Dans le cas de l'exemple, l'oscillateur générateur d'ondes, l'amplificateur et le processeur de traitement du signal sont des unités algorithmiques car leur comportement peut être reproduit avec fidélité par un programme écrit pour le processeur virtuel. 9.1.1.4 - Périphériques privés et publics Parmi les périphériques, nous distinguons les périphériques "privés" auxquels seul le processeur peut accéder en lecture et/ou en écriture. C'est le cas de la RAM, de la ROM et de toute mémoire apparentée non partagée. On notera que certaines unités fonctionnelles d'un périphérique peuvent être malgré tout accédées par d'autres unités fonctionnelles du même périphérique pour assurer son bon fonctionnement. C'est par exemple le cas pour le maintient de l'information dans le temps dans une DRAM, mais un tel accès n'est pas pris en compte dans la définition énoncée ci-dessus. Dans tous les autres cas, nous parlons de périphérique "public". Lorsque nous parlons de périphériques dans le présent document, nous englobons les périphériques privés et publics. 9.1.2 - Temps machine et séquence machine
Un processeur réel est une machine basée sur le modèle de Von Neumann qui exécute ses opérations de façon séquentielle. L'exécution de chaque étape de la séquence demande obligatoirement un certain temps. On définit généralement par " temps machine " d'une séquence d'instructions le temps réel, continu, nécessaire à son exécution. Le processeur virtuel est également une machine basée sur le modèle de Von Neumann qui exécute ses opérations de façon séquentielle. Le temps pris par l'exécution d'une séquence est impossible à évaluer précisément, puisque fonction de la machine support 23. Ainsi, pour le processeur virtuel, on ne parle plus de temps machine, mais de séquence machine, correspondant à un temps discret, cadencé par chaque instruction, dont l'équivalence en temps continu physique est considérée comme non existante. Un programme peut mal- gré tout appréhender le temps de manière très grossière grâce à cette séquentialité, mais il ne doit jamais tenter d'évaluer l'écoulement du temps réel à partir de la durée d'une séquence d'instructions. 9.1.3 - Types de données échangées avec les périphériques Nous distinguons deux catégories de données échangées avec un périphérique : - la première désigne le résultat déjà traité ou à traiter par ses unités fonctionnelles ("données d'exploitation"), et
- la seconde permet de configurer ses unités fonctionnelles, c'est à dire la façon dont elles vont traiter le flux des données ("données de configuration"). Les données de configuration peuvent ne pas exister dans le cas d'un périphérique au comportement prédéfini et invariable (ex : convertisseur analogique-numérique, ROM, ...). 9.1.4 - Programmation d'un périphérique à partir d'un processeur.
Un processeur transmet et/ou reçoit les données d'un périphérique en utilisant des signaux particuliers. Nous nous intéressons ici à la façon de déclencher cette communication processeur/périphérique, c'est-à-dire "l'interface de programmation", et non au détail des signaux électroniques échangés. Cette transmission peut être faite automatiquement sur requête d'un périphérique, mais généralement elle se fera à l'initiative du pro- cesseur. Nous avons connaissance de deux méthodes pour accéder aux périphériques depuis un processeur :
- certaines portions de l'espace d'adressage sont spécialisées pour les périphériques. A une portion correspond un périphérique particulier. Il suffit de faire exécuter au processeur une instruction qui accède à cette portion de l'espace d'adressage pour établir la communication avec le périphérique voulu. Il existe donc un plan d'organisation de la mémoire (memory map). Cette convention est par exemple celle retenue sur les proces- seurs Motorola (marque déposée) 680x0,
- le processeur dispose de quelques instructions réservées pour l'accès aux périphériques publics, toutes les autres instructions étant exclusivement réservées aux périphériques privés (sauf les mémoires de masse). Il y a donc deux espaces d'adressage distincts. Dès que le processeur exécutera une instruction, il établira la communication avec le périphérique public ou privé concerné. Cette convention est celle adoptée par défaut par les processeurs Intel (marque déposée) 80x86.
La première méthode évite d'ajouter des instructions au processeur, et elle se contente d'un seul espace d'adressage pour l'accès à tous les périphériques. Cependant, elle complique la conception d'un ordinateur et d'un émulateur. La seconde méthode oblige à ajouter des instructions supplémentaires. Nous avons retenu la première méthode pour l'accès à certaines données des périphériques privés pour des rai- sons de rapidité et de simplicité d'utilisation. La gestion des autres données repose sur un seul registre adressable des machines de niveaux zéro et un. Nous considérons qu'un processeur ne peut faire qu'une seule chose à la fois, donc visualiser les périphériques à travers un unique registre ne pose pas de problème de type " goulot d'étranglement ". Si plusieurs accès sont à faire en même temps, il faut utiliser plusieurs processeurs fonctionnant en parallèle. 9.2 - Modélisation théorique des périphériques.
D'un point de vue théorique, la description des périphériques vise essentiellement à représenter uniformément l'information nécessaire pour les exploiter et pour faciliter le remplacement de l'un d'entre eux par un autre, de façon automatique. Cette description peut être complétée par des informations annexes, notamment les données de modélisation réelle permettant d'exprimer précisément les interactions entre le périphérique et son environnement, en utilisant les outils classiques des Sciences. Nous cherchons d'abord à connaître, d'un point de vue élémentaire, la façon dont un périphérique à modéliser appréhende ses environnements réels et informatiques : c'est l'analyse microscopique. La seconde étape, nommée analyse macroscopique, consiste à organiser les informations permettant de programmer le périphérique (environnement informatique) selon une structure reflétant les relations du périphérique avec le monde réel (environnement réel). Cette structure est ba- sée sur un modèle mathématique dimensionnel, inspiré de l'algèbre linéaire. Ces analyses sont réalisées indé-
nendamment pour chaque configuration de la fonction d'un périphérique. Lors de l'implémentation, les différents modèles obtenus seront rassemblés en une unique structure définissant la fonction. On peut ainsi modéli- ser de façon exhaustive toute fonction de tout périphérique, au sens des définitions énoncées ci-avant. 9.2.1 - Structure microscopique des périphériques Un périphérique vu de la façon la plus large dispose d'un certain nombre de propriétés, qui le distinguent des autres objets au sein du monde réel. Ces propriétés peuvent avoir ou non un rapport avec la fonction du périphérique. Ainsi, le fait qu'un écran produise une image d'une certaine qualité ou que sa carcasse soit translucide constituent deux propriétés, l'une en rapport avec sa fonction, l'autre non. Les propriétés qui nous intéressent sont celles en rapport avec la fonction du périphérique, et résultant du fonctionnement des unités non al- gorithmiques composant le périphérique : ce sont les propriétés fonctionnelles. Les propriétés fonctionnelles se traduisent par un ou plusieurs phénomènes physiques ou symboliques (exemple : les pixels d'un écran) pouvant être un mélange complexe de phénomènes élémentaires (exemple : couleur, intensité lumineuse, et portion d'espace constituant un pixel d'un écran), ou un seul phénomène élémentaire (intensité lumineuse d'une diode électroluminescente, amplitude sonore produite par un haut-parleur, portion d'espace, lettre alphabéti- que, ...).
L'évaluation de la structure microscopique d'un périphérique se fait selon deux points de vue : le point de vue du programmeur, et le point de vue de l'environnement du périphérique. Du point de vue du programmeur, on cherche à rassembler toutes les données d'exploitation en un ou plusieurs ensembles exclusifs. Le rassemblement de données d'exploitation en un ensemble exclusif intervient lorsque le choix d'une de ces données exclu toutes les autres de l'expression de la fonction. De plus, un ensemble exclusif correspond à une source d'information élémentaire. Du point de vue de l'environnement, on cherche à savoir quel(s) phénomène(s) élémentaire(s) représente(nt) chaque ensemble exclusif dans la réalité. Chacun de ces phénomènes élémentaires ou groupe de phénomènes élémentaires est appelé caractéristique phénoménale. Parmi les phénomènes élémentaires d'une caractéristique phénoménale, un et un seul est directement et complètement modulé par l'information élémentaire : c'est la caractéristique modulée. On remarque que l'on analyse la fonction d'un périphérique avec une certaine précision : celle avec laquelle la fonction s'exprime. On cherche donc à modéliser la fonction du périphérique à l'échelle lui correspondant le mieux. Dans cette optique, les phénomènes élémentaires participant de façon marginale à l'expression de la fonction (c'est-à-dire à une échelle différente) sont ignorés pour la structure microscopique. Cependant, ces phénomènes marginaux pourront être pris en compte dans la définition des données de modélisation réelle. Grâce à un processus de sélection, les phénomènes élémentaires d'une caractéristique phénoménale seront triés par groupes pour la description macroscopique du périphérique. Un groupe est appelé caractéristique élémentaire. L'évaluation des ensembles exclusifs et des caractéristiques phénoménales est un travail de spécialiste. Chacun peut les évaluer différemment, selon sa perception et sa compréhension du fonctionnement d'un périphérique (interface de programmation, unités fonc- tionnelles, propriétés fonctionnelles, phénomènes). Le spécialiste doit être conscient que ces différences d'appréciation peuvent engendrer des modèles non canoniques, qui bien que conformes aux règles que nous allons énoncer, ne permettront pas d'exploiter toutes les ressources des périphériques. Pour réduire au maximum ces risques d'erreur d'appréciation il est donc nécessaire, avant même de tenter de modéliser un quelconque périphérique, de se documenter sur son fonctionnement. 9.2.2 - Structure macroscopique des périphériques
Le modélisation présentée ici est matricielle car la plupart des périphériques actuels fonctionnent selon un modèle matriciel. Un ensemble de caractéristiques élémentaires est représenté par une dimension au sens mathématique du terme. On parle de "dimension". La combinaison de l'ensemble des "dimensions" forme un espace, au sens mathématique du terme, dans lequel la fonction du périphérique pourra être complètement modélisée. On parle d'"espace" de périphérique. Les "dimensions" permettent de distinguer synthétiquement tous les phénomènes physiques ou symboliques régissant le rapport du périphérique avec son environnement réel. Il est ainsi possible de déterminer un profil des paramètres environnementaux avec lesquels le périphérique est capable d' interagir.
Par exemple, on considère un périphérique modélisé par trois "dimensions". L'ensemble forme T'espace" du périphérique. La figure 1 représente un "espace" de périphérique à trois "dimensions" Dl, D2 et D3. Une caractéristique élémentaire est représentée, sur une "dimension", par une "coordonnée". Dans l'exemple, la troisième "dimension" rassemble quatre "coordonnées" C l à C4 illustrées en figure 1. L'ensemble des "coordonnées" de certaines "dimensions" peuvent exprimer un phénomène élémentaire de leur caractéristique élémentaire (la "caractéristique modulée") avec une certaine intensité parmi un ensemble d'intensités possibles. On parle de l' "intensité" d'une "coordonnée". Le choix d'une "intensité" parmi l'ensemble des "intensités" disponibles pour une "coordonnée" d'un point de T'espace" d'un périphérique exclut systématiquement toutes les autres "intensités" de cette même "coordonnée". Dans l'exemple, les "coordonnées" de la troisième "dimension" sont programmables grâce aux paramètres d'"intensité". Les "coordonnées" des autres "dimensions" n'ont pas d'"intensités". La modélisation théorique d'un périphérique peut être symbolisée par une figure géométrique illustrée en figure 1 , dans un espace à n dimensions (trois dimensions en figure 1), n étant le nombre de "dimensions" du périphérique. 9.2.3 - Méthode de construction du modèle macroscopique
Le modèle macroscopique se construit à partir de l'analyse microscopique. La méthode de construction est présentée sous la forme d'une série d'étapes à suivre séquentiellement pour obtenir un modèle macroscopique valide.
9.2.3.1 - Etape initiale :
On considère qu'aucune "dimension", "coordonnée" ou "intensité" n'est définie. Chacun des ensembles exclusifs est associé à un ensemble d'"intensités" rattachées à une nouvelle "coordonnée". La caractéristique phénoménale liée à l'ensemble exclusif est associée à cette nouvelle "coordonnée". Pour un ensemble exclusif, cha- que "intensité" représente une donnée d'exploitation distincte. L'ensemble des "coordonnées" est regroupé au sein d'une seule "dimension". 9.2.3.2. - Etape itérative :
Pour chaque "dimension" existante (appelée "dimension mère") : On tente de rassembler toutes ses "coordonnées" en un ou plusieurs groupe(s). a) Dans le cas d'un rassemblement en deux groupes au moins :
Pour chaque groupe, plusieurs (ou un seul) phénomènes élémentaires peuvent être présents à l'identique dans chaque "coordonnée" du groupe. Ces (ou ce) phénomènes élémentaires sont nommés caractéristique intra- groupe. Parmi les éventuels phénomènes élémentaires n'appartenant pas aux caractéristiques intra-groupes, ceux (ou celui) présents à l'identique dans une coordonnée de chacun des groupes sont nommés caractéristique inter-
groupes. Un phénomène élémentaire ne peut participer qu'à une seule caractéristique inter-groupes. On note qu'une "coordonnée" peut donc être associée à une caractéristique intra-groupe et à une caractéristique intergroupes au maximum. Le rassemblement des "coordonnées" en "groupes" doit respecter les règles suivantes : Chaque "groupe" doit posséder le même nombre de "coordonnées". II est interdit de créer des groupes constitués d'une seule "coordonnée". Il ne doit pas exister de phénomène élémentaire qui n'appartienne ni à une caractéristique intra-groupe, ni à une caractéristique inter-groupes. Au moins deux "coordonnées" de la "dimension mère" doivent comporter au minimum un phénomène élémentaire, b) Dans le cas d'un rassemblement en un seul groupe : Plusieurs (ou un seul) phénomènes élémentaires peuvent être présents à l'identique dans chaque "coordonnée" du groupe. Ces (ou ce) phénomènes élémentaires sont nommés caractéristique intra-groupe. Pour chaque "coordonnée", une caractéristique inter-groupes rassemble les éventuels phénomènes élémentaires qui n'appartiennent pas à la caractéristique intra-groupe. Le rassemblement des "coordonnées" dans le groupe doit respecter les règles suivantes : La "dimension mère" doit contenir au moins deux "coordonnées". Toutes les "coordonnées" doivent contenir des "intensités". La caractéristique modulée de chaque "coordonnée" doit faire partie de la caractéristique intra-groupe. Dans les deux cas, le non respect d'au moins une règle interdit le rassemblement des "coordonnées" en groupe(s). La "dimension" devient alors définitivement établie. S'il est possible de constituer des groupes selon ces règles, alors deux nouvelles "dimensions" sont créées : Une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère". Les caractéristiques phénoménales des "coordonnées" de cette nouvelle "dimension" sont celles d'un groupe quelconque de la "dimension mère", desquelles on a retiré la caractéristique intra-groupe. Une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère". Chacun de ces groupes engendre une "coordonnée" de la nouvelle "dimension". La caractéristique intra-groupe de chacun de ces groupes constitue la caractéristique phénoménale de la "coordonnée" engendrée.
Une "intensité" reste toujours liée à la "coordonnée" qui contient la caractéristique modulée, et donc à la "dimension" qui contient cette "coordonnée".
Une fois toutes les "dimensions" traitées, s'il n'a pas été possible de créer des groupes sur au moins une des "dimensions", alors la construction du modèle est terminée. Les "dimensions" produites par l'algorithme sont regroupées au sein de T'espace" du périphérique. Si le modèle généré semble incorrect, alors il faut éventuellement revoir la structure microscopique. Sinon le processus recommence à l'étape itérative.
La figure 2 résume l'ensemble du processus de modélisation d'un périphérique. 9.2.4 - Exemple de modélisation théorique d'un périphérique 9.2.4.1 - Définition du périphérique
Prenons l'exemple d'une carte graphique et de son écran couleur associé. La finalité de l'ensemble est d'afficher une succession d'images en couleurs. On remarque qu'une carte graphique sans écran n'est d'aucune utilité puisqu'elle ne peut pas exprimer ses informations, et un écran seul est incapable d'afficher une image s'il n'est pas contrôlé par une carte graphique. C'est pourquoi l'ensemble est considéré comme un seul
périphérique de fonction homogène. De plus, le périphérique est public puisque les informations exprimées par l'écran peuvent être connues par d'autres récepteurs que le processeur (exemple : l'utilisateur).
9.2.4.2 - Fonction et configurations du périphérique
Ce périphérique a pour fonction de régulièrement convertir des informations numériques en signaux lumineux analogiques assemblés selon une matrice pour former une succession d'images perçues comme colorées par un être humain. Ce périphérique est capable d'afficher une matrice de 320 pixels horizontalement par 200 pixels verticalement, chaque pixel ayant une couleur définie par un niveau de rouge, un niveau de vert et un niveau de bleu. D'autre part, il permet d'afficher une matrice de 640 par 400 pixels, chaque pixel ayant une couleur sélectionnée parmi une même palette de 256 couleurs distinctes. Chacune de ces 256 couleurs est définie par un niveau de rouge, un niveau de vert et un niveau de bleu. Ce périphérique peut donc fonctionner dans deux configurations différentes (figure 3). Dans tous les cas, la matrice de pixels est mise à jour tous les cinquantièmes de seconde. Dans cet exemple, la courbure de la surface d'affichage du tube cathodique est ignorée car ne participant pas de façon significative à l'affichage d'une image en deux dimensions. Le tube est donc considéré comme plat. De même, l'affichage successif des points constituant une image est considéré comme simultané car l'image résultant de cet affichage est prévue pour être perçue dans son ensemble par l'utilisateur. Cependant, ces phénomènes marginaux pourront être pris en compte dans la définition des données de modélisation réelle.
9.2.4.3 - Etude des unités fonctionnelles
Les procédés techniques du périphérique traitent des données numériques pour les transformer en informations lumineuses. Ce traitement diffère légèrement selon la configuration, et on se reporte aux documentations techniques du périphérique pour l'étudier :
- Dans la configuration 320 par 200 pixels, les valeurs de rouge, de vert et de bleu de chaque pixel sont sauvegardées en mémoire les unes à la suite des autres, chacune sur un octet. Les lignes sont alors décrites successivement (de haut en bas), en présentant pour chacune les valeurs de rouge, vert et bleu des pixels situés de l'abscisse la plus petite (x=l) à l'abscisse la plus grande (x=320). Cette description est relue tous les cinquantièmes de seconde pour être réaffichée à l'écran. La description en mémoire peut être résumée comme suit :
Cette description en mémoire se traduit à l'écran par des pixels composés de taches rouges, vertes, et bleues. Ces pixels sont organisés comme suit :
- Dans la configuration 640 par 400 pixels, les numéros de couleurs (N) sont sauvegardés en mémoire les uns à la suite des autres, chacun correspondant à un pixel. Chaque numéro est sauvegardé sur un octet. Les lignes sont alors décrites successivement (de haut en bas), en présentant pour chacune les numéros de couleurs des pixels situés de l'abscisse la plus petite (x=l ) à l'abscisse la plus grande (x=640). Cette description est relue
te us les cinquantièmes de seconde pour être réaffichée à l'écran. La de eription en mémoire peut être résumée comme suit :
Les numéros N se réfèrent à une liste d'attribution de couleurs se présentant comme suit :
La description en mémoire se traduit à l'écran par des pixels dont les intensités des taches rouges, vertes, et bleues sont décrites dans l'emplacement de la palette pointé par N. Ces pixels sont organisés comme suit :
Les données décrivant une image sont sauvegardées dans une mémoire spéciale située sur la carte graphique. L'adressage des pixels est assuré par une unité non algorithmique établissant le lien entre le processeur et la carte graphique. L'affichage des pixels est assuré par une autre unité non algorithmique : le tube cathodique. Entre ces deux unités fonctionnelles il existe d'autres unités fonctionnelles. Les unités fonctionnelles transfor- ment le signal digital électrique en un signal analogique électrique, puis en un signal analogique lumineux. Parmi ces unités fonctionnelles, certaines sont des unités non algorithmiques comme par exemple les convertisseurs numérique/analogique, l'unité d'attribution de couleurs à la palette, ou l'unité de génération des signaux de contrôle du tube cathodique (CRTC). D'autres peuvent être des unités algorithmiques, mais dans la mesure où le programmeur n'a aucun contrôle sur ces unités, elles sont ignorées pour le processus de modéli- sation. Elles pourront cependant être prises en compte dans le processus d'implémentation après la modélisation. On remarque que si on avait à faire à une carte graphique possédant une unité de calcul spécialisée dans le rendu 3D, seules les unités non algorithmiques présentées dans le paragraphe précédent seraient considérées. Les unités algorithmiques (calcul matriciel sur les coordonnées tridimensionnelles des vecteurs, unité de raste- risation, unité de texture, etc.) devraient en principe être toutes ignorées. Cependant, l'accès aux unités non al- gorithmiques ne peut parfois se faire qu'en utilisant ces unités algorithmiques. Ainsi pour accéder le plus directement à la matrice de pixels composant le tube cathodique, il serait obligatoire de définir un polygone particulier dont la texture permettrait d'accéder aux pixels. Ce moyen détourné permettrait de considérer l'accès aux unités non algorithmiques comme direct, et donc d'ignorer les unités algorithmiques dans le processus de modélisation. 9.2.4.4 - Données de configuration et d'exploitation
Les données permettant de placer le périphérique dans l'une des deux résolutions d'image sont des données de configuration. Dans la configuration 320 par 200, les données envoyées sont toutes des données d'exploitation car elles constituent le flux de données traité (perçu au final par l'utilisateur). De même, dans la configuration 640 par 400, les données indiquant le numéro de couleur pour chaque pixel sont des données d'exploitation. Cependant les données permettant de définir les niveaux de rouge, vert et bleu des 256 couleurs de la palette sont des données de configuration car elles paramétrent le fonctionnement de l'unité d'attribution de couleurs à la palette. De plus, elles ne font qu'influencer globalement le flux de données sortant du périphérique mais n'en font pas partie. 9.2.4.5 - Modélisation microscopique Modélisation de la configuration 320 par 200 pixels : On peut énoncer les propriétés fonctionnelles suivantes :
Le périphérique affiche une image de 320 pixels de large par 200 pixels de haut.
Les pixels sont organisés en lignes et en colonnes.
Chaque pixel est un point coloré composé d'une tache rouge, d'une tache verte et d'une tache bleue. La couleur de chaque pixel est indépendante de celle des autres pixels.
L'intensité de chaque tache est variable indépendamment des autres au cours du temps.
Les pixels ont tous la même largeur et la même hauteur, mais une position différente.
La totalité de l'image est entièrement redessinée tous les cinquantièmes de seconde.
A partir des propriétés fonctionnelles, on peut considérer que chaque pixel est un phénomène ou encore que le signal lumineux véhiculant l'image est un phénomène. Les informations recueillies jusqu'ici permettent de définir la structure microscopique du périphérique. Du point de vue du programmeur :
Les données d'exploitation sont les niveaux de rouge, de vert et de bleu. Pour un pixel, et pour un intervalle de temps unitaire de l/50eme de seconde, l'ensemble des niveaux de rouge possibles constitue un ensemble exclu- sif. Les ensembles des niveaux de vert et de bleu constituent deux autres ensembles exclusifs. Il existe donc trois ensembles exclusifs par pixel et par intervalle de temps unitaire. Pour un intervalle de temps unitaire, le périphérique comporte globalement 320 * 200 * 3 = 192 000 ensembles exclusifs. Comme le périphérique peut fonctionner pendant un temps potentiellement infini, le nombre d'ensembles exclusifs est lui-même infini. Chacun de ces ensembles exclusifs correspond à une source d'information élémentaire. Du point de vue de l'environnement :
Pour un ensemble exclusif particulier, on distingue les phénomènes élémentaires suivants : L'intensité lumineuse programmée d'une valeur faible (0) à une valeur forte (255), la couleur de la lumière dont l'intensité est programmée, la superficie de la tache colorée dont l'intensité est programmée, la position verticale de cette tache, la position horizontale de cette tache, la durée d'émission de la lumière dont l'intensité est programmée, et le moment de début d'émission.
D'autres phénomènes élémentaires pourraient être énoncés, mais ils seraient strictement identiques pour tous les ensembles exclusifs, et ne modifieraient donc pas la structure du modèle macroscopique. L'ensemble de ces phénomènes élémentaires constitue la caractéristique phénoménale représentant l'ensemble exclusif. L'intensité lumineuse est la caractéristique modulée. Pour un intervalle de temps unitaire, il existe donc
192 000 caractéristiques phénoménales, dont certains phénomènes élémentaires varient d'une caractéristique phénoménale à l'autre (exemples : la position verticale, la couleur, ...).
L'analyse de la structure microscopique pour cette configuration est terminée. Le résultat est résumé en figure 4. On peut passer à la modélisation de la structure macroscopique. Modélisation de la configuration 640 par 400 pixels :
Dans cette configuration, l'unité d'attribution de couleurs à la palette doit être paramétrée. Chacune des 256 couleurs de la palette peut être choisie indépendamment des autres parmi plusieurs millions de teintes. La combinatoire de tous ces choix possibles constitue, au sens strict, autant de configurations possibles pour cette unité. Cependant, ces configurations sont toutes équivalentes, et sont donc considérées comme une seule configuration afin de simplifier l'étape de modélisation. Par la suite, l'implémentation du modèle théorique obtenu prendra en compte les différentes configurations. On peut énoncer les propriétés fonctionnelles suivantes :
Le périphérique affiche une image de 640 pixels de large par 400 pixels de haut.
Les pixels sont organisés en lignes et en colonnes. Chaque pixel est un point coloré composé d'une tache rouge, d'une tache verte et d'une tache bleue.
La couleur de chaque pixel est indépendante de celle des autres pixels, mais dépend de la configuration de l'unité d'attribution de couleurs à la palette.
L'unité d'attribution de couleurs à la palette interdit la présence de plus de 256 couleurs simultanément à l'écran. La couleur de chaque pixel est variable indépendamment des autres au cours du temps.
Les pixels ont tous la même largeur et la même hauteur, mais une position différente.
La totalité de l'image est entièrement redessinée tous les cinquantièmes de seconde.
A partir des propriétés fonctionnelles, on peut considérer que chaque pixel est un phénomène ou encore que le signal lumineux véhiculant l'image est un phénomène. Les informations recueillies jusqu'ici permettent de définir la structure microscopique du périphérique. Du point de vue du programmeur :
Les données d'exploitation sont les numéros de couleurs. Pour un pixel, et pour un intervalle de temps unitaire de l/50eme de seconde, l'ensemble des numéros de couleurs possibles constitue un ensemble exclusif. Il n'existe donc qu'un seul ensemble exclusif par pixel et par intervalle de temps unitaire. Pour un intervalle de temps unitaire, le périphérique comporte globalement 640 * 400 = 256 000 ensembles exclusifs. Comme le périphérique peut fonctionner pendant un temps potentiellement infini, le nombre d'ensembles exclusifs est lui- même infini. Chacun de ces ensembles exclusifs correspond à une source d'information élémentaire. Du point de vue de l'environnement : Pour un ensemble exclusif particulier, on distingue les phénomènes élémentaires suivants : La couleur programmée parmi 256 possibles (physiquement composée de trois couleurs primaires), la superficie de la tache lumineuse dont la couleur est programmée, la position verticale de cette tache, la position horizontale de cette tache, la durée d'émission de la lumière dont la couleur est programmée, et le moment de début d'émission. D'autres phénomènes élémentaires pourraient être énoncés, mais ils seraient strictement identiques pour tous les ensembles exclusifs, et ne modifieraient donc pas la structure du modèle macroscopique. L'ensemble de
ces phénomènes élémentaires constitue la carnctéristique phénoménale représentant l'ensemble exclusif. La couleur est la caractéristique modulée. Pour un intervalle de temps unitaire, il existe donc 256 000 caractéristiques phénoménales, dont certains phénomènes élémentaires varient d'une caractéristique phénoménale à l'autre (exemple : la position verticale). L'analyse de la structure microscopique pour cette configuration est terminée. Le résultat est résumé en figure 5. On peut passer à la modélisation de la structure macroscopique. 9.2.4.6 - Construction du modèle macroscopique A/ Construction du modèle de la configuration 320 par 200 pixels :
9.2.4.6.1 - Etape initiale :
On considère qu'aucune "dimension", "coordonnée" ou "intensité" n'est définie. On construit la première "dimension" comme présentée en figure 6.
9.2.4.6.2 - Première étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à la première "dimension". On choisit de rassembler les "coordonnées" en groupes de 192 000 "coordonnées" dont le phénomène élémentaire T est présent à l'identique dans chaque "coordonnée" d'un des groupes. Les phénomènes élémentaires T, S, I et D constituent alors la caractéristique intra-groupe d'un groupe. Pour toute "coordonnée" d'un groupe, les autres phénomènes élémentaires Xx, Yy et Cc de la caractéristique phénoménale appartiennent à la caractéristique inter-groupes car ils se retrouvent à l'identique dans une "coordonnée" de chacun des groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", soit 192 000 "coordonnées", et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère". Ce nombre est potentiellement infini et correspond au nombre d'images affichées successivement par le périphérique depuis son démarrage. Ces nouvelles "dimensions" sont présentées en figure 7. 9.2.4.6.3 - Deuxième étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à chacune des deux "dimensions" produites à l'étape précédente. a) Pour la "dimension" 1 :
On choisit de rassembler les "coordonnées" en 320 groupes de 600 "coordonnées" dont le phénomène élémen- taire X est présent à l'identique dans chaque "coordonnée" du groupe. Le phénomène élémentaire X est alors la caractéristique intra-groupe d'un groupe. Pour toute "coordonnée" d'un groupe, les autres phénomènes élémentaires Yy et Cc de la caractéristique phénoménale appartiennent à la caractéristique inter-groupes car ils se retrouvent à l'identique dans une "coordonnée" de chacun des groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", soit 600 "coordonnées", et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère", soit 320 "coordonnées". Ces nouvelles "dimensions" sont présentées en figure 8. b) Pour la "dimension" 2 :
Or ne peut que rassembler toutes les "coordonnées" en un seul groupe. Les phénomènes élémentaires S, I f t D constituent la caractéristique intra-groupe car ils sont présents à l'identique dans chaque "coordonnée" du groupe. Pour chaque "coordonnée", le phénomène élémentaire T„ de la caractéristique phénoménale constitue la caractéristique inter-groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" du groupe. Ce nombre est potentiellement infini et correspond au nombre d'images affichées successivement par le périphérique depuis son démarrage, et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère", soit une "coordonnée".
Ces nouvelles "dimensions" sont présentées en figure 9.
9.2.4.6.4 - Troisième étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à chacune des quatre "dimensions" produites à l'étape précédente. a) Pour la "dimension" 3 :
On choisit de rassembler les "coordonnées" en 3 groupes de 200 "coordonnées" dont le phénomène élémentaire C est présent à l'identique dans chaque "coordonnée" du groupe. Le phénomène élémentaire C est alors la caractéristique intra-groupe d'un groupe. Pour toute "coordonnée" d'un groupe, le phénomène élémentaire Yy de la caractéristique phénoménale constitue la caractéristique inter-groupes car il se retrouve à l'identique dans une "coor- donnée" de chacun des groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", soit 200 "coordonnées", et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère", soit 3 "coordonnées". Ces nouvelles "dimensions" sont présentées en figure 10. b) Pour la "dimension" 4 :
Il est impossible de rassembler les 320 "coordonnées" de la "dimension" 4 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des 320 "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 4 est donc définitivement établie. c) Pour la "dimension" 5 :
II est impossible de rassembler les "coordonnées" de la "dimension" 5 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 5 est donc définitivement établie. d) Pour la "dimension" 6 :
Il est impossible de constituer des groupes avec l'unique "coordonnée" de la "dimension" 6. En effet, on ne pourrait constituer qu'un seul groupe, mais alors la première règle ne serait pas respectée. La "dimension" 6 est donc définitivement établie.
9.2.4.6.5 - Quatrième étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à chacune des deux "dimensions" produites à l'étape précédente, a) Pour la "dimension" 7 : II est impossible de rassembler les 200 "coordonnées" de la "dimension" 7 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des 200 "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 7 est donc définitivement établie. b) Pour la "dimension" 8 :
Il est impossible de rassembler les 3 "coordonnées" de la "dimension" 8 en groupes. En effet, il n'est pas possible de créer trois groupes d'une seule "coordonnée" car la deuxième règle n'est alors pas respectée. D'autre part il n'est pas possible de créer deux groupes de une et deux "coordonnées" car les première et deuxième règles ne sont alors pas respectées. Si l'on constitue un seul groupe rassemblant les 3 "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 8 est donc définitivement établie.
9.2.4.6.6 - Fin
Il n'a pas été possible de créer des groupes sur aucune des "dimensions mères" disponibles à cette étape, donc la construction du modèle macroscopique est terminée. Les "dimensions" 4, 5, 6, 7 et 8 sont regroupées au sein de T'espace" de périphérique (pour la configuration considérée). B/ Construction du modèle de la configuration 640 par 400 pixels :
9.2.4.6.7 - Etape initiale :
On considère qu'aucune "dimension", "coordonnée" ou "intensité" n'est définie. On construit la première "dimension" comme présentée en figure 1 1. 9.2.4.6.8 - Première étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à la première "dimension". On choisit de rassembler les "coordonnées" en groupes de 640 "coordonnées" dont les phénomènes élémentaires T et Y sont présents à l'identique dans chaque "coordonnée" d'un des groupes. Les phénomènes élémentaires T, Y, S, P et D constituent alors la caractéristique intra-groupe d'un groupe. Pour toute "coordonnée" d'un groupe, le phénomène élémentaire Xx de la caractéristique phénoménale constitue la caractéristique intergroupes car il se retrouve à l'identique dans une "coordonnée" de chacun des groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", soit 640 "coordonnées", et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère". Ce nombre est po- tentiellement infini car il est lié au nombre d'images affichées successivement par le périphérique depuis son démarrage.
Ces nouvelles "dimensions" sont présentées en figure 12. 9.2.4.6.9 - Deuxième étape itérative : On tente d'appliquer les règles de rassemblement en groupes à chacune des deux "dimensions" produites à l'étape précédente.
a) Pour la "dimension" 1 :
Il est impossible de rassembler les 640 "coordonnées" de la "dimension" 1 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des 640 "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 1 est donc définitivement établie. b) Pour la "dimension" 2 :
On choisit de rassembler les "coordonnées" en groupes de 400 "coordonnées" dont le phénomène élémentaire T est présent à l'identique dans chaque "coordonnée" du groupe. Les phénomènes élémentaires T, S, P et D constituent alors la caractéristique intra-groupe d'un groupe. Pour toute "coordonnée" d'un groupe, le phénomène élémentaire Yy de la caractéristique phénoménale appartient à la caractéristique inter-groupes car il se retrouve à l'identique dans une "coordonnée" de chacun des groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" d'un groupe de la "dimension mère", soit 400 "coordonnées", et une "dimension" possédant un nom- bre de "coordonnées" égal au nombre de "coordonnées" du groupe. Ce nombre est potentiellement infini et correspond au nombre d'images affichées successivement par le périphérique depuis son démarrage. Ces nouvelles "dimensions" sont présentées en figure 13.
9.2.4.6.10 - Troisième étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à chacune des deux "dimensions" produites à l'étape précédente. c) Pour la "dimension" 3 :
Il est impossible de rassembler les 400 "coordonnées" de la "dimension" 3 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des 400 "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 3 est donc définitivement établie. d) Pour la "dimension" 4 :
On ne peut que rassembler toutes les "coordonnées" en un seul groupe. Les phénomènes élémentaires S, P et D constituent la caractéristique intra-groupe car ils sont présents à l'identique dans chaque "coordonnée" du groupe. Pour chaque "coordonnée", le phénomène élémentaire Tn de la caractéristique phénoménale constitue la caractéristique inter-groupes. Les groupes étant constitués, on crée deux nouvelles "dimensions" : une "dimension" possédant un nombre de "coordonnées" égal au nombre de "coordonnées" du groupe. Ce nombre est potentiellement infini et correspond au nombre d'images affichées successivement par le périphérique depuis son démarrage, et une "dimension" possédant un nombre de "coordonnées" égal au nombre de groupes de la "dimension mère", soit une "coordonnée".
Ces nouvelles "dimensions" sont présentées en figure 14.
9.2.4.6.1 1 - Quatrième étape itérative :
On tente d'appliquer les règles de rassemblement en groupes à chacune des deux "dimensions" produites à l'étape précédente. e) Pour la "dimension" 5 :
Il est impossible de rassembler le:, "coordonnées" de la "dimension" 5 en groupes. En effet, si l'on constitue deux ou plusieurs groupes, il n'existe ni caractéristique intra-groupe, ni caractéristique inter-groupes (la troisième règle de rassemblement n'est donc pas respectée). Si l'on constitue un seul groupe rassemblant l'ensemble des "coordonnées", alors il existe une caractéristique inter-groupes par "coordonnée". Dans ce cas, les deuxième et troisième règles ne sont pas respectées. La "dimension" 5 est donc définitivement établie, f) Pour la "dimension" 6 :
Il est impossible de constituer des groupes avec l'unique "coordonnée" de la "dimension" 6. En effet, on ne pourrait constituer qu'un seul groupe, mais alors la première règle ne serait pas respectée. La "dimension" 6 est donc définitivement établie. 9.2.4.6.12 - Fin
Il n'a pas été possible de créer des groupes sur aucune des "dimensions mères" disponibles à cette étape, donc la construction du modèle macroscopique est terminée. Les "dimensions" 1 , 3, 5 et 6 sont regroupées au sein de T'espace" de périphérique (pour la configuration considérée). Les deux configurations sont à présent organisées selon une structure reflétant les relations du périphérique avec le monde réel. Sur cette structure vont venir se greffer les informations permettant de programmer le périphérique, comme nous le verrons par la suite. 9.3 - Représentation arborescente du modèle
9.3.1 - La notion d'arborescence de périphériques
Nous déduisons de la modélisation théorique une classification hiérarchique permettant de décrire de façon synthétique la fonction de chaque périphérique, en organisant les modèles théoriques des périphériques selon une arborescence. Cette arborescence est constituée de "nœuds". Les liens entre les nœuds sont symbolisés par des "branches" (ou entre-nœuds). Un nœud peut regrouper un (ou plusieurs) autre(s) nceud(s). Un nœud qui ne regroupe aucun autre nœud est nommé "feuille". Une feuille est une information unitaire indivisible qui ne rassemble pas d'autres informations plus élémentaires. Cette arborescence est un ensemble de liens de subordina- tion, un élément englobant des sous-éléments qui le décrivent plus précisément. Les liens qu'elle établit peuvent être représentés graphiquement par un arbre, permettant au programmeur un accès plus rapide et intuitif à son organisation. A la différence de la convention usuellement retenue en informatique, la représentation retenue est calquée sur les structures vivantes du même nom. Ainsi, en allant de bas en haut, cet arbre dispose d'un nœud racine (appelé "racine"), de nœuds et de feuilles. La racine regroupe tous les nœuds et feuilles. Plus un nœud est éloigné de la racine, plus le nombre de nœuds qu'il rassemble est faible. Une feuille est située à une extrémité de l'arbre. Un nœud situé vers la racine englobe un nombre élevé de nœuds et de feuilles différents, susceptibles d'être répartis entre plusieurs périphériques. Un nœud situé vers les extrémités de l'arbre regroupe un nombre restreint de nœuds ou de feuilles pouvant être spécifiques d'un seul périphérique.
9.3.2 - Description générale de l'arbre des périphériques Les périphériques sont décrits sous la forme d'une arborescence, organisée en niveaux. Sur chacun de ces niveaux, tous les nœuds sont similaires. Ces nœuds sont nommés en fonction du niveau qu'ils occupent dans la hiérarchie (voir fig. 15). Entre deux nœuds d'un niveau quelconque, il existe toujours tous les nœuds des niveaux intermédiaires permettant de les relier. Si un nœud ne regroupe aucun nœud, il prend alors le statut de feuille. Ce processus peut se poursuivre sur certains nœuds en progressant vers la racine de l'arbre. Pour pren- dre connaissance d'un périphérique, ou y accéder, on parcourt l'arbre de la racine vers les feuilles. Cet arbre
est prévu pour permettre la configuration et la programmation d'un périphérique par simple parcours de ses nœuds.
Selon qu'un périphérique est disponible ou non, la branche correspondante de l'arbre supportant les nœuds décrivant ce périphérique apparaît ou disparaît. Un autre arbre ou une portion d'arbre, représentant les périphéri- ques contrôlés par une autre Machine Universelle, peut également être greffé sur cet arbre. Un processeur virtuel peut ainsi contrôler des périphériques par l'intermédiaire d'un autre processeur virtuel. Cette greffe se traduit par un lien entre les deux arbres au niveau d'un nœud précis, mais chaque arbre conserve sa structure propre. Chaque nœud peut fournir des "directives de dépendance". Il s'agit de contraintes sur la structure de l'arbre lorsqu'on le parcours, dépendant de l'interaction entre périphériques, de leurs configurations possibles et de leurs limites de fonctionnement. Certaines branches de l'arbre peuvent ainsi être disponibles ou indisponibles temporairement, et donc apparaître ou disparaître, lorsqu'on accède à un périphérique particulier, ou lorsqu'on place ce dernier dans une configuration particulière. Certaines directives de dépendance peuvent être à usage unique ou compté : on parle de "directive d'élagage". Une branche devient alors définitivement disponible ou indisponible lorsque la condition définie par une ou des directive(s) d'élagage est remplie. Les diffé- rentes configurations de la fonction d'un périphérique donnent lieu à autant de modèles théoriques. Ces modèles sont tous rassemblés dans le même "espace" de périphérique car relevant de la même fonction, bien que leurs structures puissent différer. Afin de permettre la cohabitation de ces modèles, certains nœuds rassemblent au niveau suivant plusieurs groupes de nœuds qui correspondent aux différentes configurations possibles. Ces groupes de nœuds s'excluent alors mutuellement par des directives de dépendance. On parle de "nœud à géo- métrie variable".
Ces trois derniers mécanismes confèrent à l'arbre une structure plastique. 9.3.3 - Description détaillée de l'arbre des périphériques
La racine de l'arbre représente I' "univers" des périphériques. C'est le point d'entrée dans l'arbre des périphériques. S'il n'est pas présent, on considère qu'il n'existe pas de périphériques accessibles par le processeur vir- tuel. Cependant ce cas ne correspond pas à un fonctionnement normal de la machine, car le processeur virtuel ne peut pas fonctionner en l'absence d'au moins un périphérique de type RAM ou ROM. Cet "univers" regroupe deux nœuds appelés "groupes" situés au niveau suivant : le "groupe" des périphériques d'échange, et le "groupe" des périphériques de conservation. Ces "groupes" symbolisent le devenir des informations échangées entre le processeur et un périphérique : soit elles seront transmises dans un environnement ouvert, accessible à tout moment par d'autres récepteurs que le processeur, permettant ainsi leur communication avec l'extérieur de la machine (ou bien elles seront transmises à partir d'émetteurs, situés dans un environnement ouvert, vers le processeur). C'est le cas d'un écran vidéo accessible par un humain ou d'un bus de données accessible par un autre processeur par exemple. Ce sont en fait tous les périphériques publics ; soit elles seront transmises dans un environnement accessible exclusivement par le processeur pendant un certain temps (une mémoire, un disque dur, etc.). Ce sont la plupart du temps les périphériques privés. De même que pour T'univers", l'absence d'un de ces nœuds indique qu'il n'y a pas de périphérique disponible ayant les spécificités du "groupe" concerné. Chacun de ces "groupes" englobe deux "hyperespaces" situés au niveau suivant. Les "hyperespaces" du "groupe" des périphériques d'échange indiquent le sens de transmission des informations. On distingue : 1 '"hyperespace" des périphériques d'échange en sortie : les informations iront
du processeur vers son environnement extérieur, et I '"hyperespace" des périphériques d'échange en entrée : les informations iront de l'environnement extérieur vers le processeur.
Le problème est différent dans le cas des périphériques de conservation. Ils sont forcément accessibles en entrée puisque la notion de conservation d'une information implique sa disponibilité ultérieure, sans quoi, 5 conserver une information sans jamais pouvoir y accéder revient à la détruire. On notera toutefois que ces périphériques sont le plus souvent accessibles en entrée et en sortie. Le caractère discriminant de ces périphériques est la disponibilité des informations pour le processeur. En effet, certains de ces périphériques sont critiques pour le bon fonctionnement du processeur, en particulier les RAM et ROM. En conséquence, les "hyperespaces" du "groupe" des périphériques de conservation indiquent le niveau de disponibilité de l'information
10 pour le processeur. On distingue : I' "hyperespace" des périphériques de conservation adressables : le processeur a un accès instantané, permanent et direct aux périphériques, par une zone de son espace d'adressage, afin d'échanger des informations, et I '"hyperespace" des périphériques de conservation non adressables : l'accès aux informations est indirect (requiert un algorithme d'accès). Il est souvent plus lent (cas des supports de masse) et/ou n'est pas garanti en permanence (cas des supports de masse amovibles).
15 Chacun de ces "groupes" englobe un ou plusieurs "espaces" de périphériques situés au niveau suivant. A partir de ce niveau de l'arbre, on aborde le fonctionnement d'un périphérique.
Un "espace" regroupe les "dimensions" d'un périphérique modélisé par l'analyse macroscopique. Une "dimension" englobe une ou plusieurs "coordonnées". Une "coordonnée" précise, si besoin, la nature physique ou symbolique de la caractéristique élémentaire qu'elle supporte. Si toutes les "coordonnées" qu'une
20 "dimension" regroupe sont de même nature, alors cette "dimension" précise cette nature.
Les "intensités" représentent le niveau situé à l'extrémité de l'arborescence. Elles représentent les intensités d'expression possibles de la caractéristique modulée de la "coordonnée".
Les "coordonnées" ou les "intensités"constituent le plus souvent les feuilles de l'arbre.
10 - Aspects pratiques
25 10.1 - Implémentation des périphériques dans la Machine Universelle
Chaque niveau hiérarchique de la Machine Universelle met en œuvre une méthode d'accès aux périphériques basée sur le modèle théorique décrit. Une méthode d'accès particulière présente plus ou moins d'informations concernant les périphériques. L' implémentation des périphériques en niveaux zéro et un doit permettre de reconstituer l'arbre des périphériques complet tel que décrit (voir figure 15). Cependant, elle doit être réduite à
30 l'essentiel pour conserver la simplicité des émulateurs et compilateurs dynamiques. En conséquence, la représentation de l'arbre des périphériques est partielle, et certaines de ses caractéristiques sont déduites et reconstituées par des programmes spécifiques écrits en niveau un (ou éventuellement en niveau zéro). L' implémentation dans le cadre de la machine 31 de niveau deux et des éventuelles machines de niveaux supérieurs est le reflet exact du type d'arbre de la figure 15. En effet, le niveau un émulant le niveau deux reconsti-
35 tue l'arborescence complète des périphériques, et met en place des fonctions qui en simplifient l'exploitation. 10.1.1 - Implémentation en niveaux zéro et un
L'implémentation présentée dans cette partie est prévue pour le niveau 0.4 (ou le niveau 0.2 émulant le niveau 0.4), ainsi que pour le niveau un (ou le niveau 0.4 émulant le niveau un, ou encore le niveau 0.2 émulant le niveau 0.4 émulant le niveau un). Dans cette implémentation, deux modes sont accessibles. Le mode normal
permet de gérer tout type de périphérique disposant au moins d'une unité non algorithmique, tandis que le mode simplifié ne permet de gérer que des périphériques aux caractéristiques standardisées. 10.1.1.1 - Mode normal
L'implémentation du mode normal sert de base pour le système de gestion des périphériques plus élaboré du niveau supérieur (niveau deux). Dans le mode normal, les informations issues de l'étape de modélisation théorique d'un périphérique (ou de plusieurs périphériques interdépendants), ainsi que le protocole d'accès à ce dernier sur la machine support 23, sont rassemblés en trois blocs distincts :
- le premier bloc, nommé "LINK" 26, permet de transporter et d'aiguiller les données de configuration et d'exploitation échangées entre le processeur virtuel de niveau zéro ou un et un périphérique particulier de la machine support 23 par l'intermédiaire du registre "MER" 27. Le premier bloc établit le lien avec les adresses d'accès au périphérique sur la machine support 23. Il contient des programmes écrits dans le langage machine natif de la machine support 23 afin de transporter les données échangées aux bonnes adresses. Ces programmes permettent aussi de détecter la présence du périphérique et de I'initialiser dans un état stable permettant son bon fonctionnement ultérieur (sous-programme d'initialisation). - le second bloc, nommé "TREE" 29, donne les principales informations permettant d'évaluer la fonction du périphérique et toutes les informations pour calculer et inteφréter les données de configuration et d'exploitation. L'évaluation est permise par le codage binaire du modèle théorique arborescent, tandis que les calculs et inteφrétations des données d'exploitation et de configuration sont effectués au moyen de programmes spécifiques insérés dans ce codage. Un bloc "TREE" 29 est la description de T'espace" d'un périphérique (ou de plusieurs dans certains cas exceptionnels, explicités par la suite) et de tous les nœuds qu'il englobe ("espace", "dimensions", "coordonnées" et "intensités"), donc une portion de l'arbre. Il indique l' "hyperespace" auquel appartient le périphérique.
- le troisième bloc, optionnel, est nommé " FEATURE EXTENSION " ou "FEXT". Il peut être présent lorsque le bloc "TREE" 29 ne peut pas fournir certaines informations. Il peut contenir des équations Physiques, des re- présentations symboliques (par exemple graphiques), ou tout autre type de modélisation de caractéristiques physiques, symboliques, ou encore logiques permettant de préciser le comportement dans la réalité des "dimensions", "coordonnées" et "intensités" incluses dans le bloc "TREE" 29. Il peut aussi contenir d'autres informations venant enrichir le bloc "TREE" 29. Un bloc "TREE" 29 ou "FEXT" est spécifique d'un périphérique particulier, mais totalement indépendant de la machine support 23 dans laquelle ce périphérique est implanté. Ainsi, peu importe si une carte sonore est connectée dans un micro-ordinateur, dans un assistant personnel ou encore dans un téléphone portable : le bloc "TREE" 29 ou "FEXT" est inchangé, et peut être réutilisé tant que les caractéristiques du périphérique restent strictement identiques. Un bloc "LINK" 26 est spécifique d'un périphérique et de la machine support 23 dans laquelle ce périphérique est inséré. Pour pouvoir exploiter la carte sonore (prise pour exemple ci-dessus) im- plantée dans une des machines support décrites, il faudra qu'un programmeur réécrive le bloc "LINK" 26 pour cette machine. Pour pouvoir exploiter un périphérique, il faut au minimum son bloc "TREE" 29, ainsi que le bloc "LINK" 26 associé qui correspond à la machine support 23 considérée. Le bloc "TREE" 29 représente la majeure partie du travail d'accès à un périphérique. Le bloc "LINK" 26 est relativement court puisque sa fonction est généralement de transporter une information entre le processeur virtuel et un périphérique. La portion de gestion des périphériques dépendante d'une machine support 23 est ainsi réduite.
10.1.1.2 - Mcde simplifié
Dans le mode simplifié, les périphériques étant définis de façon standardisée, l'étape de modélisation théorique est inutile. L'accès à ces périphériques standards se fait directement par le registre MER au moyen d'un protocole simple. Si un périphérique standard n'est pas disponible, toute tentative d'accès à ce périphérique déclen- 5 che l'exception.
10.1.2 - Implémentation en niveau deux
L'implémentation des périphériques de niveau deux est basée sur un programme de niveau un (ou éventuellement de niveau zéro) exploitant les périphériques disponibles à son niveau. La structure plus complexe du niveau deux et des niveaux supérieurs s'accorde mieux avec une représentation plus complète permettant un ac-
10 ces plus immédiat aux périphériques. L'arbre des périphériques présenté au niveau deux dispose de tous les nœuds décrits au paragraphe 9.3.3 (en particulier les "groupes", "univers", et "hyperespaces"). La programmation des périphériques se fait grâce à un protocole permettant de naviguer dans l'arbre de branche en branche. Les directives de dépendance ne sont pas accessibles directement, mais s'expriment en modifiant la structure de l'arbre selon les branches parcourues.
15 10.2 - Accès aux périphériques en niveau zéro et un par le mode normal
10.2.1 - Schéma d'organisation
Pour que le programmeur passe à la phase d'implémentation des périphériques en mode normal, il doit les avoir préalablement modélisé avec soin, et connaître toutes les informations permettant de décrire les "dimensions", "coordonnées" et "intensités". La mise en place de l'arbre et son exploitation sont pris en charge par
20 différents processeurs. Elle est assurée d'une part par la machine support 23, à travers une portion du programme d'émulation de la machine de niveau zéro ou un appelée le cartographe/énumerateur 25 (Mapper/Enumerator) qui prend en charge le protocole du mode normal. D'autre part, le processeur virtuel reçoit les blocs "TREE" 29 à partir du cartographe/énumerateur 25 par l'intermédiaire du registre "MER" 27 (Mapper/Enumerator Register pour "registre du cartographe/énumerateur"). Enfin, un processeur virtuel spécialisé,
25 émulé par le processeur de niveau un (ou éventuellement de niveau zéro), prend en charge les programmes de calcul des données de configuration et d'exploitation, ainsi que les directives de dépendance insérés dans les nœuds de l'arbre. C'est le coprocesseur de périphériques 28. Le processeur de niveau zéro ou un est alors en mesure d'exécuter un programme prenant en charge le parcours des différentes branches de l'arbre pour accéder aux périphériques, par l'intermédiaire des programmes du coprocesseur 28 qui accèdent au registre "MER"
30 27. Les blocs "TREE" 29 sont transmis sur commande par le cartographe/énumerateur 25, par l'intermédiaire du registre "MER" 27. L'ensemble de ces blocs contient toutes les indications nécessaires pour pouvoir reconstruire un arbre des périphériques complet comme décrit au paragraphe 9.3.3. Les blocs "LINK" 26 sont installés dans la mémoire de la machine support 23 par le cartographe/énumerateur 25, qui les appelle selon les "espaces" de périphériques utilisés. Les blocs "FEXT" sont chargés explicitement par un programme écrit en
35 niveau zéro ou un et viennent enrichir les descriptions des blocs "TREE" 29.
10.2.2 - Le coprocesseur de périphériques 28
La simple analyse des blocs "TREE" 29 permet d'évaluer l'environnement du processeur virtuel, sans y accéder. Pour accéder aux périphériques il faut exécuter des programmes de parcours inclus dans les nœuds des blocs "TREE" 29. Ces programmes calculent les données d'exploitation et de configuration adéquates pour 40 pouvoir utiliser le périphérique, compte tenu de la branche de l'arbre parcourue. La plupart du temps, seuls les
programmes situé dans certains nœuds (notamment les nœuds d'"intensités") sont chargés de réaliser l'accès aux périphériques, en fonction des données calculées par les programmes d'autres nœuds. En outre, le programme de parcours d'un nœud d'"espace" doit activer le périphérique correspondant, en particulier son mécanisme d'interruption. L'exécution d'un programme de parcours est conditionnée par le résultat de l'exécution du programme d'autorisation situé dans le même nœud. Certains périphériques sont capables de déclencher une interruption, c'est-à-dire de demander un traitement particulier immédiat par le processeur de niveau zéro ou un. Dans ce cas, un programme d'interruption doit être exécuté par le coprocesseur de périphériques 28, afin de tenir à jour certains paramètres. Seuls les nœuds de l'arbre appartenant à un espace de périphérique ("espace", "dimension", "coordonnée", "intensité") peuvent contenir des programmes de parcours et d'autorisation. Pour fonctionner, ces programmes utilisent un environnement de programmation restreint nommé coprocesseur de périphériques 28, disposant de 25 types d'instructions, de 8 registres de données à usage général, et de quatre indicateurs binaires d'état. 10.2.2.1 - Organisation de l'environnement de programmation L'environnement de programmation du coprocesseur 28 s'apparente à une machine virtuelle constituée d'un processeur virtuel n'ayant accès qu'à une unique mémoire réinscriptible, appelée mémoire données. Le programme à exécuter par ce processeur est situé dans une mémoire programmes séparée. Le contenu de cette mémoire est inaccessible par les opérations du processeur, mais ce dernier peut se positionner à l'intérieur de la séquence des instructions, par rapport à la dernière instruction délivrée (saut relatif). Le processeur dispose de huit registres internes, d'une largeur de 16 bits chacun, nommés RO à R7. Il est capable d'exécuter 25 types d'instructions, et peut conserver certains résultats caractéristiques de la dernière opération dans des indicateurs d'état (signe : N, nullité : Z, débordement : O, retenue : C). Les opérations sont encodées sous la forme de mots de 16 bits. On distingue trois grands groupes d'opérations : chargement, sauvegarde, terminaison opérations arithmétiques, logiques et de déplacement sauts conditionnels
La mémoire réinscriptible à laquelle le processeur a accès peut contenir 65536 mots distincts au maximum. La taille de cette mémoire est définie statiquement à 0 ou par une puissance de 2 pour l'ensemble des programmes d'un bloc "TREE" 29. Cette mémoire peut donc être absente, ou avoir une capacité allant de 2° = 1 mot de mémoire données à 216 = 65536 mots de mémoire données au maximum. Lors de l'exécution d'une instruction coprocesseur faisant appel à une mémoire données de taille inférieure à la taille adressable maximale de l'instruction considérée, les bits d'adressage inutilisés sont ignorés. Un programme coprocesseur est constitué d'une succession d'instructions qui sont exécutées séquentiellement, à l'exception des sauts qui constituent des ruptures de séquence. Le nombre d'instructions qu'il peut contenir n'est pas limité. Ce programme ne peut en aucun cas accéder à la mémoire programmes contenant les instructions le constituant, que ce soit en lecture ou en écriture. Il ne peut donc pas se modifier. Tous les programmes coprocesseurs concernant un même périphérique (donc situés dans un même "espace" de périphérique) accèdent exclusivement à une seule et même mémoire réinscriptible, dont la capacité est fixée lors de l'installation de l'arbre. Ils devront donc être prévus pour utiliser cette mémoire sans conflits entre eux. 10.2.2.2 - Description du jeu d'instructions
Le coprocesseur de périphériques 28 dispose de vingt-cinq types d'instructions décrits dans les tableaux ci- dessous.
Les conventions suivantes sont communes à la description de l'ensemble des instructions : un bit de valeur 1 est dit levé et un bit de valeur 0 est dit baissé, les bits d'un mot 16 bits sont numérotés de 0 à 15. Le bit 0 étant le bit de plus faible poids, le bit 15 celui de plus fort poids.
Dans le codage d'une instruction : "r" désigne un bit de codage du numéro de registre, "a" désigne un bit de codage de l'adresse mémoire. "i" désigne un bit de codage de la valeur immédiate.
"?" désigne un bit réservé, devant être systématiquement baissé pour garantir une compatibilité ascendante avec d'éventuelles version ultérieures.
"z", "o", "n" et "c" désignent les bits de mise àjour des indicateurs Z, O, N et C respectivement : s'ils sont levés, les indicateurs correspondants sont mis àjour en fonction du résultat de l'opération. "s" désigne un bit de codage du numéro de registre source, "d" désigne un bit de codage du numéro de registre destination.
Les instructions d'accès à "MER" 27 sont restreintes par rapport à l'accès à ce registre directement depuis le niveau zéro ou un. C'est pourquoi seules les fonctions de lecture et d'écriture sur le bloc "LINK" 26 correspondant à l'"espace" de périphérique auquel appartient le programme sont autorisées. Le numéro de la com- mande de lecture ou d'écriture sur le bloc "LINK" 26 est automatiquement envoyé à "MER" 27 par l'émulateur 33 du coprocesseur de périphériques 28.
De façon générale, pour les instructions arithmétiques et logiques : l'indicateur N est une copie du bit 15 du résultat de l'instruction ; l'indicateur Z est levé si tous les bits du résultat sont baissés ; l'indicateur O est levé si l'instruction génère un débordement en logique signée ; et l'indicateur C est levé si une retenue ou un emprunt est généré par l'instruction.
Dans le codage d'une instruction de saut :
"j" désigne un bit de codage de la condition de saut, et
"p" désigne un bit de codage de l'adresse relative du saut dans le programme.
10.2.2.3 - Déroulement de l'exécution d'un programme coprocesseur
Au démarrage de la machine de niveau zéro ou un, chaque bloc "TREE" 29 est installé en mémoire. L'espace mémoire données requis pour les programmes coprocesseurs de chaque bloc "TREE" 29 est alloué, et les mots de cet espace sont initialisés avec la valeur 0. L'ensemble des programmes coprocesseurs d'un même bloc "TREE" 29 sont considérés comme étant mis bout à bout, de sorte qu'ils peuvent, si besoin, sauter vers des portions de code de programmes coprocesseurs n'appartenant pas à leur branche. Ils partagent donc le même espace mémoire programmes. Lorsqu'un programme de niveau zéro ou un parcourt l'arbre pour accéder à un périphérique, il doit d'abord exécuter le programme d'autorisation du nœud courant pour vérifier si le parcours est valide. Si c'est le cas, alors le programme de parcours peut être exécuté avec éventuellement un paramètre transmis par l'intermédiaire des registres R0 à R7. La branche est alors considérée comme parcourue. Le processus peut se répéter sur les nœuds suivants jusqu'à atteindre une feuille de l'arbre. Pour exécuter un programme coprocesseur, le programme de niveau zéro ou un fait appel à l'émulateur 33 du coprocesseur de périphériques 28 en lui fournissant la localisation exacte des mémoires programmes et données du programme coprocesseur. Avant passage d'un éventuel paramètre, les registres R0 à R7 ainsi que les indicateurs d'état sont dans un état indéterminé à chaque nouveau démarrage d'un programme coprocesseur. Lorsque le programme coprocesseur est terminé (par rencontre de l'instruction EOP), le programme de niveau zéro ou un récupère un code de terminaison dans le registre R7 (et éventuellement d'autres paramètres dans les autres registres). S'il s'agit d'un programme d'autorisation, les valeurs du code de terminaison ont la signification conventionnelle suivante : "0" signifie l'interdiction d'accès au nœud,
"SFFFF" signifie une autorisation inconditionnelle, les valeurs " 1 " à "SFFFD" indiquent une directive d'élagage, c'est-à-dire que l'accès n'est autorisé que pour le nombre de fois spécifié, et la valeur "SFFFE" indique une directive d'élagage dont le nombre d'autorisations d'accès restant est supérieur ou égal à "SFFFE".
S'il s'agit d'un programme de parcours, la valeur 0 indique un succès du parcours. Toute autre valeur indique un numéro d'erreur mis à la disposition du programme de niveau zéro ou un.
10.2.2.4 - Insertion des programmes coprocesseurs dans l'arbre
Chaque programme coprocesseur est inséré dar.s la description binaire du nœud pour lequel il est conçu. Un programme coprocesseur ne peut être inséré que dans les nœuds de l'arbre des périphériques appartenant à un "espace" de périphérique ("espace", "dimension", "coordonnée" ou "intensité"). Il ne peut exister qu'un programme de parcours et qu'un programme d'autorisation par nœud, et chaque nœud d'un "espace" de périphé- 5 rique peut contenir aucun, l'un, l'autre ou les deux programmes. L'absence d'un programme d'autorisation indique que le parcours du nœud concerné est toujours autorisé. Le nœud représentant T'espace" contient en plus le programme d'interruption s'il existe. Il ne peut y avoir qu'un seul programme d'interruption pour un "espace" de périphérique. L'absence d'un programme d'interruption signifie que le périphérique n'est pas capable de déclencher une interruption. 10 10.2.3 - Les blocs "LINK" 26
Un bloc "LINK" 26 est spécifique d'une machine support 23 et du périphérique pour lequel il est conçu. Il est constitué de quatre sous-programmes prévus pour s'interfacer avec le cartographe/énumerateur 25 : un d'initialisation, un de lecture, un d'écriture et un de détection d'interruption. Ces sous-programmes peuvent réaliser tout type d'opération nécessaire au bon fonctionnement du périphérique et au respect du protocole du 15 mode normal. Les trois premiers sous-programmes doivent pouvoir être appelés depuis le cartographe/énumerateur 25, avec transmission éventuelle de paramètres lors de leur appel ou à leur retour. Le premier est chargé d'initialiser le périphérique dont il a le contrôle afin de le placer dans un état connu permettant son utilisation. Dans cet état, le périphérique est prêt à être exploité, mais ne doit en aucun cas déclencher une interruption de la machine de niveau zéro ou un. Ce sous-programme retourne la valeur conven- 0 tionnelle 0 lorsque l'initialisation s'est déroulée correctement ; il retourne la valeur SFFFF dans le cas contraire. Le second et le troisième sont chargés d'établir le lien entre le périphérique de la machine support 23 et la machine de niveau zéro ou un. Le second renvoie une donnée provenant directement ou indirectement du périphérique à la machine de niveau zéro ou un par l'intermédiaire du cartographe/énumerateur 25. Le troisième récupère une donnée en provenance de la machine de niveau zéro ou un par l'intermédiaire du cartogra- 5 phe/énumérateur 25, et l'envoie directement ou indirectement au périphérique.
Le quatrième sous-programme est installé mais désactivé par le sous-programme d'initialisation, et appelle le cartographe/énumerateur 25 en cas de déclenchement d'une interruption par le périphérique afin qu'elle soit prise en compte. Il est activé par le programme coprocesseur de parcours du nœud représentant T'espace". Un bloc "LINK" 26 doit disposer d'un protocole d'échange de données avec ses sous-programmes de lecture 0 et d'écriture, compatible avec le protocole des programmes coprocesseurs du bloc "TREE" 29 associé.
Tous les blocs "LINK" 26 programmés pour une machine support 23 particulière doivent suivre les même conventions d'interface avec le cartographe/énumerateur 25 (exemple : localisation et appel des quatre sous- programmes, passage des paramètres, etc.). 10.2.4 - Les blocs "TREE" 29 5 Un "espace" de périphérique est encodé dans un bloc "TREE" 29 sous la forme d'une suite de mots 16 bits dont l'organisation reflète la hiérarchie des nœuds dans T'espace". Pour décrire cette organisation, certaines notions sont indispensables.
10.2.4.1 - Notions préalables à l'encodage des blocs "TREE" 29 Un bloc "TREE" 29 est une succession de "champs" de données. Un champ est un groupe de mots participant 0 à l'expression d'une même information. Tout champ de données est organisé selon un format particulier.
Un mot de 16 bits jeul ne permet d'exprimer que des valeurs d'amplitude limitée. Certaines valeurs incluses dans la description d'un bloc "TREE" 29 ne peuvent pas être exprimées sur 16 bits seulement. Un champ de données de taille fixe pour l'expression des valeurs n'est pas adapté car il peut s'avérer trop petit dans certains cas, ou occuper une place inutile pour représenter des valeurs faibles. Ainsi, pour concilier une occupation mémoire minimale avec une largeur de codage pouvant être importante, certaines valeurs sont encodées sous la forme d'un champ de taille variable. On parle de "codage graduel". Chaque caractéristique élémentaire correspond à une "coordonnée". Certaines caractéristiques élémentaires peuvent être classées dans des grands types physiques ou symboliques. Le type d'une caractéristique élémentaire est encodé dans le champ représentant le nœud "coordonnée" correspondant. La modélisation des périphériques conduit souvent à des ensembles de nœuds de même niveau hiérarchique (exemple : "intensités") et de même type. Plutôt que d'encoder chaque nœud individuellement, on utilise un encodage factorisant, afin d'économiser de la mémoire. On parle de "répétition de nœud". Dans certains cas, des périphériques différents modélisés séparément ont un fonctionnement interdépendant : on parle de "périphériques interdépendants". Il y a donc nécessité de présenter ces périphériques dans un même bloc "TREE" 29 pour que les programmes coprocesseurs puissent partager la même mémoire données et ainsi gérer cette interdépendance. 10.2.4.2 - Formats des champs de base
Ces champs sont fréquemment utilisés dans la description des nœuds des blocs "TREE" 29. Nombres Nous distinguons deux catégories de nombres : les nombres simples et les nombres "graduels". Un nombre graduel peut prendre deux valeurs spéciales : l'infini et le nombre inconnu.
Un nombre simple est une valeur positive comprise entre 0 et 65535. Il est directement encodé dans un champ SIMP d'une taille de un mot.
Valeur
Champ SIMP Une valeur positive susceptible de ne pas pouvoir être encodée par un nombre simple est représentée par un nombre graduel, encodé dans un champ "GRAD" occupant plusieurs mots. Ce champ est composé d'un mot indiquant le nombre de fenêtres (i.e. le nombre de mots de 16 bits) sur lesquelles est encodée la valeur. Les mots représentant cette valeur suivent du mot de plus fort poids au mot de plus faible poids. Si le mot représentant le nombre de fenêtres vaut SFFFF, alors le nombre est considéré comme infini. De même, si ce mot vaut 0, alors le nombre est considéré comme inconnu : sa valeur est variable et peut être éven- tuellement déterminée par un autre moyen. Dans ces deux cas, le champ GRAD ne comporte que ce mot.
Nombre de Fenêtre de Fenêtre de fenêtres poids fort poids faible
Champ GRAD Programmes coprocesseurs
Un programme coprocesseur est encodé dans un champ appelé "PCP". Ce champ est la succession des mots constituant le programme coprocesseur. Le mot suivant le dernier mot du programme prend la valeur réservée S6FFF, indiquant la fin du champ.
Champ PCP
Le champ "PCPA" représente un programme d'autorisation, le champ "PCPP" représente un programme de parcours, et le champ "PCPI" représente un programme d'interruption. Types physiques ou symboliques
Les nœuds "coordonnées" indiquent le type physique ou symbolique de la caractéristique élémentaire qu'ils représentent. Un type est encodé par une valeur conventionnelle stockée dans un champ appelé "TYP" occupant un mot de 16 bits. Les 8 bits de poids fort du mot indiquent la grande catégorie du type, les 8 bits de poids faible précisent cette catégorie. Le tableau ci-après présente le codage des catégories et sous-catégories principales.
La catégorie de code 0 indique un type inconnu. Une sous-catégorie de code 0 indique que seule la catégorie est connue.
Type
Champ TYP Identificateur d'"hyperespace"
Le numéro identifiant I '"hyperespace" auquel appartient un "espace" est encodé par un champ "HYP" d'une taille de un mot. Un champ HYP prend la valeur : "$FFFF" pour l'"hyperespace" des périphériques d'échange en sortie. "$8000" pour T'hyperespace" des périphériques d'échange en entrée. "0" pour T'hyperespace" des périphériques de conservation non adressables. " 1 " pour 1 '"hyperespace" des périphériques de conservation adressables.
N° d'"hyperespace"
Champ HYP Fin de description d'"espace" de périphérique
Le champ "FEP", d'une taille de un mot, indique la fin d'une succession de descriptions de nœuds (fin d'un champ EP).
$FFFF
Champ FEP Somme de contrôle
Le champ "CRC", d'une taille de un mot, représente une somme de contrôle permettant de vérifier l'intégrité d'un bloc "TREE" 29.
Somme de contrôle
Champ CRC 10.2.4.3 - Formats des champs encodant les nœuds Les nœuds représentant un "espace", une "dimension", une "coordonnée", ou une "intensité" sont encodés dans des champs spécifiques.
Chaque champ représentant un nœud débute par un champ "ENT". Un tel champ inclus un mot "RNH", suivi éventuellement d'un champ GRAD. Les trois bits de poids faible du mot RNH, appelés "NH", identifient le niveau hiérarchique du nœud. Si le bit de poids fort "R" du mot RNH est levé, alors le nœud décrit est répété. Les autres bits du mot RNH doivent être baissés. Le champ GRAD n'apparaît que si le nœud est répété. Il correspond au nombre de répétitions du champ représentant le nœud répété.
O0OOO00000000NH
Champ ENT représentant un nœud non répété
Champ ENT représentant un nœud répété "intensité" Format du champ NI représentant un nœud "intensité". NH = 0 dans le champ ENT.
Champ NI "coordonnée"
Format du champ NC représentant un nœud "coordonnée". NH = 1 dans le champ ENT.
Champ NC "dimension"
Format du champ ND représentant un nœud "dimension". NH = 2 dans le champ ENT.
Champ ND espace
Format du champ NE représentant un nœud "espace". NH = 3 dans le champ ENT.
Champ NE 10.2.4.4 - Encodage de l'ensemble de T'espace" de périphérique Les nœuds de T'espace" de périphérique sont décrits les uns à la suite des autres, dans l'ordre de parcours de l'arbre communément appelé " en profondeur d'abord ". La figure 16 présente le parcours en profondeur d'abord d'un exemple d'"espace" de périphérique. Les numéros indiquent l'ordre dans lequel les nœuds sont rencontrés. A chaque niveau, les nœuds de "dimensions", de "coordonnées" ou d'" intensités" doivent si possible être pré- sentes selon un ordre conventionnel. La description ordonnée de l'ensemble des nœuds d'un "espace" de périphérique est un champ nommé "EP", terminé par un champ "FEP".
Champ EP correspondant à l'exemple de la fig. 16
10.2.4.5 - Encodage d'un bloc "TREE" 29
Un bloc "TREE" 29 comporte un en-tête "EBT", un champ NS indiquant le nombre d'"espaces" de périphéri- ques, la description du ou des "espace(s)" de périphérique(s) interdépendant(s) EP, et enfin une somme de contrôle CRC calculée sur l'ensemble du bloc "TREE" 29, et permettant de vérifier l'intégrité des données du bloc.
L'entête EBT est un champ d'une taille de un mot dont les 1 1 bits de poids fort sont initialisés avec la valeur standard binaire 1010101 1001, permettant d'identifier un bloc "TREE" 29. Les 5 bits de poids faible contien- nent l'exposant P de la puissance de 2 indiquant la taille de la mémoire données qui doit être réservée pour l'exécution des programmes coprocesseurs du bloc. Ces 5 bits peuvent prendre les valeurs 0 à $ 10. La valeur
$ 1 F signifie que la mémoire données est absente.
Champ EBT
Le champ "NS" vaut la plupart du temps 1 car les périphériques interdépendants sont très peu fréquents. La valeur 0 est interdite pour NS. Le format d'un bloc "TREE" 29 est le suivant :
Bloc "TREE" 29 5 10.3 - Accès aux périphériques en niveau zéro et un par le mode simplifié
Ce mode peut être utilisé par les machines de niveaux zéro et un. Il partage un certain nombre de caractéristiques avec le mode normal. 10.3.1 - Schéma d'organisation Dans ce mode, aucune modélisation préalable n'est requise, car l'accès aux périphériques standards n'est pas
10 basé sur une structure arborescente. Le Cartographe/Enumérateur prend entièrement en charge la mise en place de ce mode simplifié, mode qui ne nécessite aucun module extérieur ni coprocesseur de périphériques, contrairement au mode normal. Une machine de niveau zéro ou un démarrant systématiquement en mode normal, un programme exploitant le mode simplifié doit d'abord changer le mode de fonctionnement du cartographe/énumerateur. Par la suite, les périphériques standards sont accèdes par sélection de leur numéro
15 d'identification (prédéfini), puis par échanges de données par l'intermédiaire du registre MER selon un protocole spécifique à chacun. Certains génèrent une interruption, qu'ils soient en cours d'utilisation ou non. Si un programme tente de changer le mode de fonctionnement du Cartographe/Enumérateur sur une machine de niveau zéro ou un ne proposant pas le mode simplifié, ou bien si un périphérique standard non disponible est sélectionné, alors l'exception est déclenchée.
20 10.3.2 - Protocoles d'accès aux périphériques standards
Le mode simplifié propose 10 périphériques standards prédéfinis, couvrant les principales catégories de fonctions habituellement rencontrées sur les micro-ordinateurs. Chacun est désigné par un numéro d'identification unique et invariable. On trouve dans l'ordre d'identification de 0 à 9 : le Cartographe/Enumérateur, la mémoire centrale, la mémoire de sauvegarde, le compteur temporel, l'écran, l'imprimante, le son, le transfert de don-
25 nées en émission, le transfert de données en réception, et le clavier. Chacun de ces périphériques peut être réinitialisé. La commande d'initialisation exécute les opérations nécessaires sur la machine support pour qu'un périphérique soit placé dans un état normal de fonctionnement, et retourne un mot indiquant si le périphérique a été initialisé correctement, nb : ci-après, [ae] désigne le mot pointé par ae.
30 10.3.2.1 - Cartographe/Enumérateur
• Fonctionnement
La sélection du cartographe/énumerateur par l'identificateur de numéro 0 ne permet que sa réinitialisation par la commande d'initialisation.
• Algorithme 35 Initialisation :
Appel au sous-programme d'initialisation du Cartographe/Enumérateur. 10.3.2.2 - Mémoire centrale
• Fonctionnement
Ce p riphérique est en lecture seule, et indique le type de mémoire composant la troisième zone de la mémoire de la machine de niveau zéro, ou bien le type de l'ensemble de la mémoire de la machine de niveau un. Une fois sélectionné par son identificateur de numéro 1 , le périphérique retourne en lecture un mot désignant le type de mémoire, selon la convention suivante : 5 $0301 : stockage en lecture
$0302 : stockage volatil en lecture/écriture $0303 : stockage non volatil en lecture/écriture
Si cette mémoire n'existe pas, la valeur retournée est l'une quelconque des trois valeurs ci-dessus et n'a pas de sens. 10 La commande d'initialisation n'a aucun effet sur ce périphérique.
• Algorithme Lecture :
VARET — valeur désignant le type de mémoire Initialisation : 15 VARET <- 0
10.3.2.3 - Mémoire de sauvegarde
• Fonctionnement
Ce périphérique est en lecture/écriture, et permet la sauvegarde d'informations dans une mémoire non volatile d'une taille multiple de 256 mots (au maximum 16 méga-mots). La mémoire est découpée en blocs contigus de 20 256 mots. 11 existe un index (l'index inter-blocs) pour désigner le bloc courant. Un autre index (l'index intra- bloc) désigne un mot à l'intérieur du bloc courant. L'accès aux mots constituant chaque bloc est exclusivement séquentiel : le mot, pointé par l'index intra-bloc, est accédé, puis l'index intra-bloc pointe sur le mot suivant. Lorsque le dernier mot a été accédé, l'index intra-bloc pointe sur le premier mot du bloc courant. Un bloc est donc un tampon de mémoire circulaire. Lorsque ce périphérique est sélectionné par son identificateur de nu- 25 méro 2, l'index intra-bloc pointe sur le premier mot du bloc courant. Le premier accès au périphérique après la sélection permet : en lecture : de connaître le numéro du dernier bloc accessible en écriture : de se positionner sur un bloc (le mot écrit contient le numéro du bloc, sauvegardé dans l'index inter-blocs) 30 Les accès suivants permettent de lire ou d'écrire des données du bloc courant comme décrit ci-avant. La commande d'initialisation fait pointer l'index inter-blocs sur le premier bloc (bloc 0).
• Algorithme
Mise en place du périphérique :
Réserver x*256 mots de mémoire non volatile sur la machine support, à partir d'une adresse ADRS. 5 Sélection :
INDEXINTRA <- 0
SELECTM <r- 1
Lecture :
Si SELECTM = 1 0 VARET <- x - I
SELECTM - C Sinon
VARET <- [ADRS + 256 * INDEXINTER + INDEXINTRA] INDEXINTRA <- (INDEXINTRA + 1 ) MOD 256 Ecriture :
Si SELECTM = 1
Si VARENT < (x - l)
INDEXINTER <- VARENT Sinon INDEXINTER <- x - 1
SELECTM - 0 Sinon
[ADRS + 256 * INDEXINTER + INDEXINTRA] <- VARENT INDEXINTRA <- (INDEXINTRA + I ) MOD 256 Initialisation :
INDEXINTER «- 0 VARET <- 0
10.3.2.4 - Compteur temporel • Fonctionnement Ce périphérique est en lecture seule, et permet d'estimer l'écoulement du temps. Lorsque ce périphérique est sélectionné par son identificateur de numéro 3, le premier mot lu correspond à la fréquence de comptage, exprimée en Hertz. Cette fréquence peut varier de 1 à 65535 Hertz par pas de 1 Hertz ; elle est représentée par les valeurs 1 à 65535 respectivement. La valeur 0 est réservée, et ne peut jamais être renvoyée. Les lectures suivantes retournent un mot, nommé compteur temporel, dont la valeur est incrémentée de 1 (modulo 65536) à la fréquence spécifiée. A chaque incrémentation, une interruption est générée. La fréquence du compteur temporel doit être autant que possible en rapport avec la vitesse d'exécution du processeur de niveau zéro ou un, selon les capacités de la machine support 23. Le processeur de niveau zéro ou un devrait être en mesure d'exécuter environ 30 000 instructions entre deux incrémentations du compteur. Si, pour des raisons particulières, ce nombre devait être réduit, il ne devrait jamais descendre en dessous de 300 instructions entre deux in- crémentations du compteur, sans quoi l'utilisation de l'interruption pour ce périphérique pourrait devenir impossible. Autant que possible, la fréquence réelle d'incrémentation doit être exactement la même que celle indiquée après la sélection du périphérique. A défaut, la fréquence indiquée correspond à l'arrondi le plus proche de la fréquence réelle.
La commande d'initialisation place le compteur temporel à 0. • Algorithme
Mise en place du périphérique :
Installer un mécanisme d'interruption sur la machine support 23, chargé d'incrémenter COMPTEUR de 1 , appelé à la fréquence la plus proche possible de FREQ COMPTAGE. Sélection :
SELECTT <- I
Lecture :
Si SELECTT = 1
VARET <- FREQ_COMPTAGE SELECTT <- 0
Sinon
VARET - COMPTEUR
Initialisation :
COMPTEUR <- 0 VARET <- 0
10.3.2.5 - Écran
• Fonctionnement
Ce périphérique est en lecture/écriture, et permet l'affichage d'une image monochrome sur un écran graphique.
A tout moment, un mot peut être lu depuis le périphérique. Ce mot contient la résolution de l'image affichée, les 10 bits de poids fort indiquant la résolution verticale en nombre de lignes décrémenté de 1 , les 6 bits de poids faible indiquant la résolution horizontale en nombre de groupes de 16 pixels décrémenté de 1.
L'accès aux pixels de l'écran est réalisé par l'intermédiaire d'un pointeur désignant l'un des groupes de 16 pixels. Chaque groupe, dont les pixels sont alignés horizontalement de la gauche vers la droite, est encodé du bit de plus fort poids au bit de plus faible poids dans un mot de 16 bits. Chaque pixel est représenté par un bit, la valeur 0 éteignant le pixel sur l'écran, la valeur 1 l'allumant. Par convention, les pixels sont organisés de gauche à droite, et les lignes de haut en bas. Lorsque ce périphérique est sélectionné par son identificateur de numéro 4, le premier mot écrit permet de positionner le pointeur sur un groupe de pixels. Par la suite, chaque écriture met àjour le groupe de 16 pixels pointé, puis le pointeur désigne automatiquement le groupe suivant (incrémentation), dont les pixels sont placés immédiatement à la droite des pixels du groupe courant. Lorsque la fin de ligne est atteinte, le pointeur désigne automatiquement le groupe de pixels le plus à gauche de la ligne située immédiatement en-dessous de la ligne courante. Lorsque le groupe le plus en bas à droite est atteint, le pointeur désigne automatiquement le groupe le plus en haut à gauche. Le premier mot écrit après sélection correspond au nombre d'incrémentations à réaliser sur le pointeur à partir du groupe le plus en haut à gauche, selon la convention présentée ci-dessus. Lors de son appel, la commande d'initialisation peut modifier l'image affichée par l'écran graphique. Le pointeur n'est pas affecté par cette commande. • Algorithme Mise en place du périphérique :
Réserver la mémoire pour l'écran sur la machine support, d'une taille de (Y*(X DIV 16)) mots, à partir de l'adresse de base ADRE. Faire afficher cette mémoire sur l'écran graphique de la machine support. Sélection :
SELECTE <r- 1 Lecture :
VARET - Tailles en X et en Y Je l'écran encodées sur un mot selon la convention décrite.
Ecriture :
Si SELECTE = 1
INDEXE r- VARENT SELECTE - 0
Sinon
[ADRE + INDEXE] <- VARENT
INDEXE - (INDEXE + 1 ) MOD (Y * (X DIV 16)) Initialisation : Configure l'écran dans la résolution standard X colonnes par Y lignes. VARET r- 0 si l'écran a été configuré correctement, SFFFF sinon. 10.3.2.6 - Imprimante
• Fonctionnement
Ce périphérique, d'identificateur numéro 5, est en lecture/écriture. Il permet l'impression de texte. L'écriture d'un mot envoie ses 7 bits de poids faible à l'imprimante pour impression. La valeur encodée dans ces bits correspond à un caractère ASCII standard. A tout moment, un mot peut être lu depuis le périphérique. Si ce mot a pour valeur SFFFF, l'imprimante est dans un état d'erreur et les données envoyées ne seront pas imprimées. Si ce mot a pour valeur 0, l'imprimante fonctionne correctement. Les autres valeurs sont réservées et ne peuvent jamais être retournées. Lors de son appel, la commande d'initialisation peut modifier l'état de l'imprimante, notamment en ramenant la tête d'impression en début de ligne ou en éjectant la feuille en cours d'impression.
• Algorithme Lecture :
Si l'imprimante est dans un état d'erreur VARET <- $FFFF
Sinon
VARET <- 0 Ecriture : Si l'imprimante n'est pas dans un état d'erreur Envoie les 7 bits de poids faible de VARENT à l'imprimante.
Initialisation :
Envoie une commande de réinitialisation à l'imprimante. VARET <— 0 si l'imprimante est fonctionnelle, SFFFF sinon. 10.3.2.7 - Son • Fonctionnement
Ce périphérique, d'identificateur numéro 6, est en lecture/écriture. Il permet de produire des sons dans une gamme de fréquences définie. A tout moment, un mot peut être lu depuis le périphérique. L'octet de poids faible indique la fréquence minimale reproductible en Hertz, valeur divisée par 128, et arrondie à l'entier le plus proche. L'octet de poids fort indique la fréquence maximale reproductible en Hertz, valeur divisée par 128,
puis décrémentée de 1 et arrondie à l'entier le plus proche. L'écriture d'un me a pour effet de générer un son, de volume constant prédéfini, à la fréquence la plus proche de celle désirée, entre 0,5 et 32767,5 Hertz, par pas de 0,5 Hertz, selon la valeur du mot entre 1 et 65535. La valeur 0 stoppe la génération de son et règle le volume à son niveau minimal. Si la fréquence désirée est en dehors des limites de fréquences spécifiées, le son de fréquence la plus proche possible est généré. La commande d'initialisation a pour effet de stopper la génération de son et de régler le volume à son niveau minimal.
• Algorithme Lecture :
VARET <— Fréquences minimale (FREQ MIN) et maximale (FREQ MAX) du son encodées sur un mot selon la convention décrite. Ecriture : Si VARENT = 0
VOLUME <- 0
Stoppe la production d'onde sonore. Sinon
Si VARENT < FREQ_MIN
FREQ <- FREQ_MIN Sinon si VARENT > FREQJvlAX FREQ <- FREQ_MAX Sinon
FREQ <- VARENT VOLUME <- Volume Normal
Production d'une onde sonore de fréquence la plus proche possible de FREQ. Initialisation : VOLUME <- 0
Stoppe la production d'onde sonore.
VARET <- 0
10.3.2.8 - Transfert de données en émission
• Fonctionnement Ce périphérique, d'identificateur numéro 7, est en lecture/écriture. Il permet d'envoyer des données vers un récepteur distant (une autre machine). La lecture d'un mot permet de connaître l'état de disponibilité du périphérique. Une valeur à 0 indique que l'envoi peut être réalisé par écriture du mot de données à transmettre. Une valeur à SFFFF indique que la donnée précédente n'a pas encore été envoyée, et qu'il faut donc attendre avant d'écrire le prochain mot de données à transmettre. Si ce prochain mot est malgré tout écrit, il sera ignoré. Toute autre valeur est réservée et ne peut jamais être retournée. La commande d'initialisation peut arrêter le transfert d'une donnée. Suite à cette commande, le programme doit attendre que le mot d'état revienne à la valeur 0 avant tout nouvel envoi.
• Algorithme Lecture :
Si le tampon BUFS d'envoi est vide
VARET <r- 0 Sinon
VARET <- $FFFF Ecriture :
Si le tampon BUFS d'envoi est vide
BUFS - VARENT Initialisation :
Envoie la commande d'initialisation au périphérique réel, si elle est prévue. VARET <— 0 si le périphérique a été initialisé correctement, SFFFF sinon. 10.3.2.9 - Transfert de données en réception
• Fonctionnement
Ce périphérique est en lecture seule. Il permet de recevoir des données depuis un émetteur distant (une autre machine). Lorsque ce périphérique est sélectionné par son identificateur de numéro 8, le premier mot lu est un indicateur permettant de connaître la disponibilité d'une donnée reçue : la valeur SFFFF indique qu'aucune donnée n'a encore été reçue, et la prochaine valeur lue correspondra de nouveau à cet indicateur. la valeur 0 indique qu'une donnée a été reçue, et qu'elle sera disponible à la prochaine lecture. Après lecture de cette donnée, la prochaine valeur correspondra de nouveau à l'indicateur. - la valeur 1 indique qu'une donnée a été reçue, qu'elle sera disponible à la prochaine lecture, mais qu'au moins une donnée a été perdue depuis cette réception. Après lecture de la donnée reçue, la prochaine valeur lue correspondra encore à l'indicateur. toute autre valeur de l'indicateur est réservée et ne peut jamais être retournée. Lorsqu'une donnée est reçue par le périphérique, avec ou sans perte, une interruption est déclenchée. La commande d'initialisation peut arrêter le transfert d'une donnée. Elle ne modifie pas l'étape de réception, c'est-à-dire la lecture de l'indicateur ou la lecture d'une donnée. Cependant, le programme peut re-sélectionner le périphérique pour s'assurer que la prochaine valeur lue corresponde à l'indicateur.
• Algorithme
Mise en place du périphérique : On considère 2 tampons de réception BUFR et BUFL, ainsi que deux indicateurs OVFR et OVFL.
OVFR - SFFFF
OVFL <- SFFFF
Réception d'une donnée DAT en interne :
Si OVFR = SFFFF BUFR <- DAT
OVFR <- 0
Sinon
OVFR <- 1
Déclenche l'interruption.
Sélection : SELECTR - 1 Lecture : Si SELECTR = 1 Si OVFL = SFFFF
Interdire interruption de réception interne à la machine support 23. BUFL - BUFR OVFL - OVFR OVFR <- SFFFF Autoriser interruption de réception interne à la machine support 23.
Si OVFL = 0 ou si OVFL = I SELECTR = 0 VARET <- OVFL Sinon OVFL *- SFFFF
SELECTR <- 1 VARET r- BUFL Initialisation :
Envoie la commande d'initialisation au périphérique réel, si elle est prévue. BUFL et OVFL ne sont pas modifiés.
VARET — 0 si le périphérique a été initialisé correctement, $FFFF sinon. 10.3.2.10 - Clavier • Fonctionnement
Ce périphérique est en lecture seule. Il permet de recevoir des caractères sélectionnés par l'utilisateur au moyen d'un clavier. Les caractères sont reçus sous la forme de mots dont les 7 bits de poids faible correspondent à un caractère ASCII. Le huitième bit indique l'état de la touche associée à ce caractère : 0 pour une touche enfoncée et 1 pour une touche relâchée. Les 8 bits de poids fort du mot sont toujours à 0. Lorsque ce périphérique est sélectionné par son identificateur de numéro 9, le premier mot lu est un indicateur permettant de connaître la disponibilité d'un caractère reçu : - la valeur SFFFF indique qu'aucun caractère n'a encore été reçu, et la prochaine valeur lue correspondra de nouveau à cet indicateur. la valeur 0 indique qu'un caractère a été reçu, et qu'il sera disponible à la prochaine lecture. Après lecture de ce caractère, la prochaine valeur correspondra de nouveau à l'indicateur. la valeur 1 indique qu'un caractère a été reçu, qu'il sera disponible à la prochaine lecture, mais qu'au moins un caractère a été perdu depuis cette réception. Après lecture du caractère reçu, la prochaine valeur lue correspondra encore à l'indicateur. toute autre valeur de l'indicateur est réservée et ne peut jamais être retournée. Lorsqu'un caractère est reçu par le périphérique, avec ou sans perte, une interruption est déclenchée. La commande d'initialisation peut arrêter le transfert d'un caractère. Elle ne modifie pas l'étape de réception, c'est-à-
dire la lecture de l'indicateur ou la lecture d'un caractère. Cependant, le programme peut re-sélectionner le périphérique pour s'assurer que la prochaine donnée lue corresponde à l'indicateur. • Algorithme Mise en place du périphérique : On considère 2 tampons de réception BUFK et BUFKL, ainsi que deux indicateurs OVFK et OVFKL. OVFK - SFFFF OVFKL <r- SFFFF
Réception d'un caractère avec état de la touche CAR (sur 8 bits) en interne : CARE <- 0 Bits 0 à 7 de CARE <- CAR Si OVFK = SFFFF
BUFK <r- CARE OVFK <- 0 Sinon 0VFK <- 1
Déclenche l'interruption. Sélection : SELECTK - 1 Lecture : Si SELECTK = 1
Si OVFKL = SFFFF
Interdire interruption de réception interne à la machine support 23. BUFKL - BUFK OVFKL «- OVFK OVFK <- SFFFF
Autoriser interruption de réception interne à la machine support 23. Si OVFKL = 0 ou si OVFKL = 1 SELECTK = 0 VARET <- OVFKL Sinon
OVFKL - SFFFF SELECTK <r- 1 VARET <- BUFKL Initialisation : Envoie la commande d'initialisation au périphérique réel, si elle est prévue. BUFKL et OVFKL ne sont pas modifiés.
VARET <- 0 si le périphérique a été initialisé correctement, SFFFF sinon. 10.3.2.1 1 - Opérations de lecture et d'écriture non utilisées
Lors d'un accès en lecture ans le cadre d'un protocole ne prévoyant pas cette opération, la valeu: standard 0 est systématiquement retournée. Dans le cas d'un accès en écriture, l'accès est sans aucun effet. 10.4 - Le cartographe/énumerateur 25
Le cartographe/énumerateur 25 fait partie, avec l'émulateur d'un processeur de niveau zéro ou un, des deux modules que l'on doit obligatoirement programmer pour la machine support 23 afin d'obtenir une machine de niveau zéro ou un fonctionnelle. Pour le mode normal, la création des blocs "LINK" 26 est également obligatoire. Les blocs "TREE" 29 correspondants (et éventuellement les blocs "FEXT") doivent être écrits si les périphériques de la machine support 23 n'ont jamais été modélisés.
10.4.1 - Principe de fonctionnement Le cartographe/énumerateur 25 est la base du système de gestion des périphériques de la Machine Universelle. Il établit le lien entre le registre "MER" 27 (et l'interruption des machines de niveau 0.4 et un) d'une part et les blocs "LINK" 26 et "TREE" 29 (ou les périphériques standards), d'autre part. Le cartographe/énumerateur 25 assure plusieurs fonctions : il intègre son propre bloc "LINK" 26 permettant sa réinitialisation (par appel au sous-programme d'initialisation). Ce sous-programme installe les blocs "LINK" 26 sur la machine support 23, et appelle leurs sous-programmes d'initialisation ; il met à disposition des programmes de niveau zéro ou un quatre commandes permettant l'accès aux blocs "LINK" 26 ou aux périphériques standards, une commande de changement de mode, et une commande qui transmet le contenu des blocs "TREE" 29 disponibles sur la machine support 23 à la machine de niveau zéro ou un ; il gère les demandes d'interruptions émises par les périphériques par l'intermédiaire des blocs "LINK" 26 ou par les périphériques standards et les transmet à la machine de niveau zéro ou un sur requête de cette dernière ; il gère les périphériques standards. L'exception, notamment déclenchée au démarrage d'un processeur de niveau zéro ou un, appelle le sous- programme de réinitialisation du cartographe/énumerateur qui permet le bon fonctionnement de ce dernier.
10.4.2 - Fonctionnement détaillé
La machine de niveau zéro ou un et le cartographe/énumerateur 25 dialoguent exclusivement par l'intermédiaire du registre "MER" 27 (et du mécanisme d'interruption en niveau 0.4 et un). Un programme de niveau zéro ou un doit respecter les protocoles d'utilisation des commandes, sous peine de déclencher l'exception. Lorsqu'une commande du cartographe/énumerateur 25 est en cours, elle doit d'abord être terminée pour pouvoir exécuter une autre commande. Seule l'exception peut interrompre une commande à tout moment. Lorsque le cartographe /énumérateur 25 n'exécute pas une commande, il attend un numéro de commande à exécuter et peut transmettre le numéro d'un périphérique ayant demandé une interruption. Lorsque le cartographe/énumerateur 25 transmet le numéro du périphérique à l'origine d'une interruption par le registre "MER" 27, une interruption est déclenchée en niveau 0.4. En niveau un, lorsque les interruptions sont autorisées, une interruption se déclenche automatiquement sur requête d'un périphérique, le numéro du périphérique étant transmis dans un registre du processeur. Pour les processeurs de niveau zéro, lorsque aucune interruption n'est en attente, le numéro transmis a pour valeur $FFFF (et aucune interruption n'est déclenchée). Les six commandes accessibles sont : la sélection du mode d'exploitation (commande 0),
la sélection d'un b'oc "LINK" 26 ou d'un périphérique standard (commande I ), l'écriture d'un mot vers le bloc "LINK" 26 ou le périphérique standard sélectionné (commande 2), la lecture d'un mot depuis le bloc "LINK" 26 ou le périphérique standard sélectionné (commande 3), l'initialisation du bloc "LINK" 26 ou du périphérique standard sélectionné (commande 4), et la lecture des blocs "TREE" 29 (commande 5).
En mode normal, sur exécution de la commande de lecture des blocs "TREE" 29, le cartographe/énumerateur 25 présente alors les blocs "TREE" 29 les uns à la suite des autres, découpés en tranches de 128 mots. Si la fin d'un bloc "TREE" 29 est atteinte au cours de la transmission d'une tranche, les mots restants de cette tranche prennent la valeur 0. Chaque tranche débute par un mot indiquant si la tranche est la première d'un bloc "TREE" 29 (code SDEBE) ou non (code SCEAB), ou bien si la dernière tranche du dernier bloc "TREE" 29 a été renvoyée (code SFEDB). Toute autre valeur pour ce mot est interdite. Le cartographe/énumerateur 25 numérote chaque bloc "TREE" 29 envoyé en partant de 1 et en ajoutant 1 à chaque nouveau bloc "TREE" 29 envoyé, ce qui permet d'attribuer un numéro d'identification unique à chaque périphérique. La valeur 0 désigne systématiquement le cartographe/énumerateur 25 lui-même. De par le fonctionnement du cartogra- phe/énumérateur 25, un seul mot est transféré à chaque exécution de la commande.
En mode simplifié, l'exécution de la commande de lecture des blocs "TREE" 29 déclenche l'exception. Au démarrage de la machine de niveau zéro ou un, le périphérique zéro (cartographe/énumerateur 25) est sélectionné par défaut. 10.4.3 - Algorithme de fonctionnement Le cartographe/énumerateur 25 se compose de cinq sous-programmes, appelés par l'émulateur du processeur de niveau zéro ou un, ou encore par les blocs "LINK" 26 (ou les périphériques standards). L'algorithme présenté permet une exploitation des deux modes. Initialisation: Appel au sous-programme de réinitialisation. MAXPERIPH <- 0 VARET - 0
{Pour implémenter le mode simplifié :}
Met en place chaque périphérique standard disponible, notamment en réservant la mémoire nécessaire à sa gestion. Une liste des périphériques standards disponibles est établie. Interdit les interruptions en provenance des périphériques standards. {Pour implémenter le mode normal :}
Elimine de la mémoire de la machine support 23 les blocs LINK installés lors d'une éventuelle initialisation précédente. Réservation d'une zone de mémoire sur la machine support 23 destinée à accueillir le premier bloc LINK, à partir d'une adresse de base.
Pour chaque bloc LINK détecté (dans la limite de 32767 blocs LINK) MAXPERIPH <- MAXPERIPH + 1 A partir de l'adresse de base :
Sauvegarde MAXPERIPH
Sauvegarde l'adresse du sr us-programme du cartographe/énumerateur que le bloc LINK doit appeler en cas d'interruption (mise dans la file d'attente). Copie le bloc LINK Appel au sous-programme d'initialisation du bloc LINK Si l'initialisation a échoué
MAXPERIPH <- MAXPERIPH - 1 VARET <- $FFFF Sinon
Sauvegarde l'adresse de base dans la liste des blocs LINK (située dans l'espace d'adressage de la machine support 23).
Sauvegarde l'identificateur dans la liste des blocs LINK (exemple : le nom du fichier contenant le bloc LINK).
Réservation d'une nouvelle zone de mémoire sur la machine support 23 destinée à accueillir le prochain bloc LINK, à partir d'une nouvelle adresse de base. {Pour les deux modes :}
NUMPERIPH <- 0 {cartographe/énumerateur sélectionné par défaut}
MODE - 0 {mode normal par défaut}
Vide la file d'attente des interruptions. (Retour de sous-programme) Réinitialisation :
ETAPE <- 0 {Etat par défaut : attente de commande}
Ferme un éventuel bloc "TREE" 29 ouvert par la commande 5. NUMLINK <- 1
PREMIERE <- 1 {Première tranche du bloc "TREE" 29 à envoyer} (Retour de sous-programme)
Sauvegarde d'interruption en attente :
{Sous-programme appelé par les blocs "LINK" 26 ou les périphériques standards sur interruption} Ajoute le numéro du périphérique ayant demandé l'interruption dans la file d'attente des interruptions, s'il n'est pas déjà présent dans la file. (Retour de sous-programme) Lecture :
Si ETAPE = 0 {Attente de commande}
Si une interruption est présente dans la file d'attente
MER <— Numéro du périphérique arrivé en premier dans la file d'attente des interruptions. Retirer l'interruption traitée de la file d'attente.
Dans le cas d'un processeur de niveau 0.4 : saut à l'interruption Sinon
MER <- SFFFF Si ETAPE = 1 {Exécution de commande en lecture} Si COMMANDE < 3
Saut a l'exception ETAPE - 0 Si COMMANDE = 3 {lecture d'un mot depuis le bloc "LINK" 26 ou le périphérique standard sélectionné} Si MODE = 0
Appel au sous-programme d'entrée du bloc "LINK" 26 n° NUMPERIPH Sinon
Appel au sous-programme d'entrée du périphérique standard n° NUMPERIPH MER — valeur VARET renvoyée par le sous-programme d'entrée Si COMMANDE = 4
{Initialisation du bloc "LINK" 26 ou du périphérique standard sélectionné} Si MODE = 0
Appel au sous-programme d'initialisation du bloc "LINK" 26 n° NUMPERIPH Sinon Appel au sous-programme d'initialisation du périphérique standard n° NUMPE¬
RIPH
MER <— code de retour VARET renvoyé par le sous-programme d'initialisation Si COMMANDE = 5 { Lecture des blocs "TREE" 29}
Si PREMIERE = 1 Si NUMLINK > MAXPERIPH
NUMLINK <- 1 {Numéro du bloc "LrNK" 26 dont le bloc "TREE" 29 associé est en cours d'envoi} MER <- SFEDB Sinon Ouvrir le bloc "TREE" 29 associé au bloc "LINK" 26 n° NUMLINK (par son identificateur)
TREEOFFSET <- 1 PREMIERE <- 0 MER <- $DEBE Sinon si TREEOFFSET = 0
TREEOFFSET <- 1 MER <- SCEAB Sinon
Si Fin de bloc "TREE" 29 MER <- 0
Sinon
MER <- Prochain mot dans le bloc "TREE" 29 ouvert Si TREEOFFSET < 128
TREEOFFSET <- TREEOFFSET + I
Sinon si Fin de blrc "TREE" 29
Fermer le bloc "TREE" 29 NUMLINK <- NUMLINK + 1 PREMIERE <- 1 Sinon
TREEOFFSET <- 0 (retour de sous-programme) Ecriture :
Si ETAPE = 0 {Attente de commande} COMMANDE <- MER {Mémorise le numéro de commande}
Si MODE = 0
Si COMMANDE > 5 {Commande inexistante pour le mode normal} Saut à l'exception Sinon Si COMMANDE > 4 {Commande inexistante pour le mode simplifié}
Saut à l'exception ETAPE r- 1 Si ETAPE = 1 {Exécution de commande en écriture}
Si COMMANDE > 2 Saut à l'exception
ETAPE r- 0
Si COMMANDE = 0 {Sélection du mode d'exploitation}
Si MER = 0
Appel au sous-programme d'initialisation du cartographe/énumerateur Sinon si MER = $FFFF et si le mode simplifié est implémenté
Appel au sous-programme d'initialisation du cartographe/énumerateur MODE <- 1
Appel au sous-programme d'initialisation de chaque périphérique standard disponible, s'il existe. Autorise les interruptions en provenance des périphériques standards
Sinon
Saut a l'exception Si COMMANDE = 1
{Sélection d'un bloc "LINK" 26 ou d'un périphérique standard} Si MODE = 0
Si MER > MAXPERIPH
Saut a l'exception Sinon
NUMPERIPH - MER Sinon
Si MER = numéro d'un périphérique standard appartenant à la liste des périphériques standards disponibles
NUMPERIPH <- MER
S'il existe, appel au sous-programme de sélection spécifique du périphéri- que standard
Sinon
Saut à l'exception Si COMMANDE = 2
{Écriture d'un mot vers le bloc "LINK" 26 ou le périphérique standard sélectionné} VARENT r- MER
Si MODE = 0
Appel au sous-programme de sortie du bloc "LINK" 26 n° NUMPERIPH en transmettant la valeur VARENT Sinon Appel au sous-programme de sortie du périphérique standard n° NUMPERIPH en transmettant la valeur VARENT (retour de sous-programme) 10.5 - Fonctions évoluées sur les périphériques
10.5.1 - Méthode générale d'accès aux périphériques en niveau zéro ou un par le mode normal de gestion des périphériques. Pour qu'un programme puisse gérer un périphérique avec le mode normal de gestion des périphériques, il doit d'abord charger en mémoire le bloc "TREE" 29 qui le représente en utilisant la commande de lecture des blocs "TREE" 29 du cartographe/énumerateur 25. Il sauvegarde alors le numéro d'identification qui a été attribué au bloc par le cartographe/énumerateur 25. Il est ensuite possible d'analyser la structure du ou des arbres inclus dans le bloc "TREE" 29 ou encore de se reporter au bloc "FEXT" correspondant pour déter- miner le type de fonction que réalise le périphérique. Lorsqu'on a identifié le périphérique réalisant la fonction souhaitée, on peut alors l'utiliser. Selon I' "hyperespace" auquel appartient T'espace" décrivant le périphérique, les opérations permises sont différentes : dans le cas d'un "hyperespace" d'échange en sortie, on ne peut qu'envoyer des données au périphérique, dans le cas d'un "hyperespace" d'échange en entrée, on ne peut que recevoir des données depuis le périphéri- que, dans le cas d'un "hyperespace" de conservation adressable, aucune opération n'est permise puisque le périphérique est directement accessible par l'espace d'adressage de la machine ; Dans ce cas, T'espace" de ce périphérique n'est là que pour indiquer les caractéristiques du périphérique, et dans le cas d'un "hyperespace" de conservation non adressable, les opérations permises peuvent être l'envoi et/ou la réception de données.
10.5.1.1 - Envoi de données vers un périphérique par parcours de l'arbre
L'envoi de données est réalisé par parcours de l'arbre selon les données que le programmeur souhaite transmettre au périphérique. Les programmes coprocesseurs de chaque nœud sont chargés de convertir chaque étape du parcours en données de configuration et d'exploitation correctes transmises au périphérique. Le pro- cessus d'envoi consiste d'abord à repérer le nœud d'"espace" à la base de l'arbre. Le programme coprocesseur
d'autorisation doit être exécuté. Si l'autorisation st donnée, alors on exécute le programme de parcours du nœud. On cherche ensuite les nœuds de "dimension" rattachés à ce nœud d'"espace", et on applique la même procédure au nœud de "dimension" choisi. Le processus se poursuit, et se termine lorsque le programme coprocesseur de parcours d'un nœud d'"intensité" a été exécuté : l'action correspondante au parcours de l'arbre a 5 été effectuée.
10.5.1.2 - Réception de données depuis un périphérique par parcours de l'arbre
La réception des données est réalisée par parcours de l'arbre selon les directives retournées par les programmes coprocesseurs de chaque nœud. Certains nœuds contiennent des programmes chargés de demander au périphérique les données d'exploitation : ils les convertissent en un parcours cohérent de l'arborescence aboutis- 10 sant à un nœud d'"intensité" représentant la valeur reçue. Le parcours d'autres nœuds permet de mémoriser d'éventuels paramètres afin de sélectionner une donnée d'exploitation lorsque plusieurs sont proposées (exemple : choisir un pixel particulier dans une image provenant d'une caméra vidéo numérique). Le processus de réception consiste d'abord à repérer le nœud d'"espace" à la base de l'arbre. A chaque nœud rencontré à partir du nœud d'"espace", on répète le processus suivant : 15 Le programme coprocesseur d'autorisation doit être exécuté.
Si l'autorisation est accordée, le programme de parcours peut être exécuté. Il renvoie alors une donnée dans le registre R7 du coprocesseur, indiquant si le nœud de niveau hiérarchique suivant peut être choisi librement pour être parcouru (valeur 0), ou bien s'il est déterminé. Dans ce deuxième cas, la valeur indique le nombre de registres contenant le numéro de ce nœud (de 1 à 7 pour R0 à R6 au maximum).
20 Si l'autorisation est refusée, cela signifie soit qu'aucune donnée n'est disponible dans cette portion de l'arbre à partir de ce nœud, soit qu'il est nécessaire de parcourir d'abord d'autres nœuds de T'espace" du périphérique pour préciser la localisation de la donnée à lire. Lorsque cette localisation est suffisamment précise, l'autorisation est alors donnée pour exécuter le programme de parcours du nœud considéré. Si aucun nœud d'un niveau hiérarchique donné n'autorise son parcours, ou si une feuille est atteinte, il peut
25 être nécessaire de redescendre d'un niveau dans l'arbre pour que le processus de lecture continue. Redescendre en deçà du nœud d'"espace" signifie que toutes les données disponibles ont été lues.
Par exemple, pour connaître la couleur d'un pixel en provenance d'un scanner, il peut être nécessaire de localiser d'abord ce pixel en choisissant sa position horizontale et sa position verticale, puis de se laisser guider vers le nœud d'"intensité" du pixel.
30 10.5.2 - Exemples de séquences d'instructions 0.4 émulant les instructions du coprocesseur 28
Le processeur de niveau 0.4 est chargé d'émuler les instructions du coprocesseur de périphériques 28. Cette émulation est réalisée par un programme complet, dont on ne présente ici que quelques séquences reproduisant certaines opérations. Dans chaque séquence, les opérations sont séparées par une virgule ou un retour à la ligne.
35 Pour les séquences d'instructions suivantes, on considère que : les plages d'adresses $100 à $1 FF contiennent les valeurs allant de $FFO0 à $FFFF, les plages d'adresses $200 à $2FF contiennent les valeurs allant de $0000 à $00FF, les plages d'adresses $300 à $3FF contiennent les valeurs allant de S00FF à SFFFF, par incréments de $ 100,
Rd et Rs sont des adresses contenant les opérandes Rd et Rs tels qu'ils ont été décrits pour les instructions du 0 coprocesseur 28, et
tmp et tmp2 sont deux adresses de mémoire réinscriptible quelconques. 10.3.2.1 - Séquence reproduisant le OU logique
AND $200, SBB Rd, ST tmp, AND R, SBB $201, AND Rs, SBB tmp, ST Rd (A ce stade l'emprunt est indéfini. Une instruction "AND R" peut être insérée pour l'effacer) 5 10.3.2.2 - Séquence reproduisant le OU logique exclusif
AND $200, SBB Rd, ST tmp, AND R, SBB $201, AND Rs, SBB tmp, ST tmp, LD Rd, AND Rs, ST tmp2 LD S1 FF, SBB tmp2, AND tmp, ST Rd (A ce stade l'emprunt est annulé)
10.5.2.3 - Séquence reproduisant le chargement d'une valeur immédiate dans un registre
10 On considère le chargement d'une valeur immédiate positive $0ijk (j et k étant des chiffres hexadécimaux quelconques, i étant un chiffre hexadécimal valant 0 ou 1). LD $30i, AND $ljk, ST Rd (A ce stade l'emprunt est annulé)
10.5.2.4 - Séquence reproduisant la sauvegarde d'un registre vers la mémoire
15 On considère une adresse mémoire quelconque de valeur binaire %abcdefghij. On considère que le registre
MP contient l'adresse du dernier mot de l'espace d'adressage du coprocesseur 28, et que cet espace d'adressage est aligné sur une page de 8 Kmots en mémoire de niveau zéro.
LD Rs, ST &%000abcdefghij
(L'emprunt reste inchangé) 20 10.5.2.5 - Séquence reproduisant l'addition sans retenue
AND $200, SBB Rd, ST tmp, AND R, LD Rs, SBB tmp, ST Rd
(A ce stade l'emprunt est indéterminé)
10.5.2.6 - Séquence reproduisant la soustraction sans retenue AND R, LD Rd, SBB Rs, ST Rd
25 (A ce stade l'emprunt est positionné selon le résultat de la soustraction)
10.5.2.7 - Séquences reproduisant la mise àjour des indicateurs d'état (N, Z, O et C)
Chaque indicateur est sauvegardé en mémoire de niveau zéro dans un mot dont la valeur 0 signifie que l'indicateur est baissé, et dont la valeur $FFFF signifie qu'il est levé.
Les adresses contenant les indicateurs N, Z, O et C sont nommées NCOP, ZCOP, OCOP, et CCOP respecti- 30 vement. On nomme " res " l'adresse contenant le résultat de la dernière opération.
En sortie l'emprunt est positionné selon la valeur de l'indicateur qui a été calculée.
Mise àjour de l'indicateur N
(Si l'emprunt B du processeur de niveau 0.4 n'est pas annulé à ce stade, une instruction AND R doit précéder cette séquence) 5 LD S37F, SBB res, SBB R, ST NCOP
Mise àjour de l'indicateur Z
AND $200, SBB res, SBB R, SBB S 1 FE, SBB R, ST ZCOP
Mise àjour de l'indicateur O
L'algorithme de mise à jour de l'indicateur O est différent selon les instructions. On donne ici l'exemple de la 0 mise àjour de l'indicateur O dans l'instruction de soustraction sans retenue.
LD Ps, AND S37F, ST tmp, LD Rd, AND S37F, SBB tmp, SBB R, ST tm;j, AND R, LD Rd, SBB Rs, ST Rd SBB R, (Si l'indicateur C doit être également mis àjour, on peut insérer ici une instruction ST CCOP) AND R, SBB tmp, ST tmp, AND $200, SBB tmp, SBB R, ST OCOP Mise à jour de l'indicateur C L'algorithme de mise àjour de l'indicateur C est différent selon les instructions. On donne ici deux exemples. Exemple de la mise àjour au cours de l'instruction de soustraction sans retenue : AND R, LD Rd, SBB Rs, ST Rd, SBB R, ST CCOP Exemple de la mise àjour au cours de l'instruction d'addition sans retenue :
AND $200, SBB Rd, ST tmp, SBB R, SBB $200, ST tmp2, LD Rs, SBB tmp, ST Rd, SBB R, SBB tmp2 SBB R, ST CCOP
10.5.3 - Contenu des blocs "FEXT"
Un bloc "FEXT" contient un ensemble d'informations optionnelles qui viennent compléter celles fournies par le bloc "TREE" 29 associé.
Un bloc "FEXT" peut contenir un ou plusieurs des éléments suivants : les données de modélisation réelle fournissent des équations ou d'autres types d'informations définissant précisément les relations physiques, symboliques et logiques que les branches de l'arbre des périphériques entretiennent entre elles et avec le monde réel, des données dites " de modélisation perceptive ", fournissant des équations ou d'autres types d'informations définissant précisément les relations physiques entre la limite physique d'interaction du périphérique avec le monde extérieur et l'émetteur/destinataire de l'information. Par exemple, on peut souhaiter modéliser la façon dont un être humain valide, ou au contraire ayant des problèmes oculaires, perçoit les couleurs produites par un écran, et un programme coprocesseur spécifique, nommé " programme de parcours rapide ", venant remplacer les programmes coprocesseurs de certains nœuds du bloc "TREE" 29 associé. Ce programme permet d'accéder au pé- riphérique de manière optimisée en termes de vitesse selon un parcours de l'arbre prédéfini et invariable qui doit être explicité dans le bloc "FEXT".
10.5.4 - Auto-adaptation des périphériques 10.5.4.1 - Définition et utilisations
Pour un périphérique " A " donné, non disponible sur la machine support 23, l'auto-adaptation de la Machine Universelle est un mécanisme logiciel qui permet : d'une part de trouver le périphérique " B " disponible sur la machine support 23 et remplissant la fonction la plus proche possible de celle du périphérique A, d'autre part d'adapter le flux de données initialement traité par le périphérique A en un flux de données différent, traité par le périphérique B, et qui donnera un résultat le plus proche possible de ce qu'il aurait été s'il avait été directement traité par le périphérique A.
Le procédé d'auto-adaptation repose sur une philosophie contraire à celle usuellement retenue pour la gestion des périphériques : c'est la machine qui se plie aux exigences du programmeur. Ce dernier propose un type de périphérique avec un format précis de données d'exploitation et la machine lui donne accès au périphérique le plus proche possible de sa demande, si besoin en adaptant " à la volée " les flux de données échangés. En cas de changement imprévu de l'état d'un périphérique (panne, arrêt) la machine peut rechercher automatiquement
un moyen de rediriger J' information vers ou depuis le périphérique le plus proche. II y a donc adaptation automatique de la machine virtuelle à l'environnement matériel.
10.5.4.2 - Principe de fonctionnement
On commence par analyser la structure de T'espace" décrivant le périphérique A, notamment 1 '"hyperespace" 5 auquel il est rattaché, ainsi que le nombre et le type des nœuds de "dimension", de "coordonnée" et d'"intensité".
On parcourt alors tous les "espaces" de périphériques disponibles et on cherche celui ayant la structure arborescente la plus proche. L'évaluation de la proximité de deux structures arborescentes repose sur des algorithmes de comparaison d'abord très sélectifs (une structure strictement identique est recherchée) avec attribution
10 d'un ou plusieurs coefficients exprimant la similarité entre chaque "espace" de périphérique analysé et l'"espace" du périphérique A. La tolérance de ces algorithmes est ensuite modulée en établissant une priorité de certains paramètres sur d'autres, et en permettant de regrouper ou d'ignorer certains paramètres considérés comme contribuant peu à la fonction du périphérique. Au final, T'espace" du périphérique B présentant les coefficients de similarité les plus forts avec I '"espace" du périphérique A est retenu.
15 Lorsque T'espace" A (source) et T'espace" B (destination) sont connus, un algorithme de conversion est généré, afin de prendre les directives de parcours de l'arbre de ['"espace" A et de les convertir au mieux en directives de parcours de l'arbre de l'"espace" B. Cet algorithme est élaboré à partir du nombre et du type des nœuds de chaque "espace", et des regroupements ou priorités établis lors de la recherche de similitude. Il se base aussi sur les blocs "FEXT" ainsi que sur une base de données répertoriant des algorithmes standards permettant les
20 conversions entre différents types physiques et symboliques.
10.5.4.3 - Programme chargé de ces opérations
Le mécanisme d'auto-adaptation est mis en œuvre par un programme chargé d'effectuer les opérations de comparaison et de conversion entre périphériques. Ce programme est appelé " éclaireur " (ou " pathfinder "). Il est écrit pour un niveau donné de la Machine Universelle et ne fonctionne pas de façon autonome pour ce ni-
25 veau : ce sont les autres programmes du niveau qui devront y faire appel en cas de besoin. Les programmes écrits pour un niveau supérieur utiliseront ces fonctionnalités de façon transparente, si l'émulateur de ce niveau supérieur utilise l'éclaireur pour la gestion des périphériques. Ce programme est la partie la plus complexe de la gestion des périphériques, mais sa présence n'est absolument pas indispensable pour pouvoir exploiter les périphériques. Toutes les applications n'ont en effet pas besoin d'une auto-adaptation des périphériques. Lors-
30 qu'une application a besoin d'un périphérique remplissant une fonction particulière et qu'elle ne souhaite pas le rechercher par elle même (ou bien qu'elle ne trouve pas de périphérique correspondant à ses besoins), elle peut alors appeler l'éclaireur en lui transmettant le profil du périphérique recherché. L'éclaireur se charge de trouver le meilleur périphérique et devient l'interlocuteur exclusif de l'application pour toutes ses transmissions avec le périphérique.
35 10.5.5 - Définition des zones réservées de l'espace d'adressage de niveau 0.4
Le tableau suivant présente les champs de données associés aux plages d'adresses qui leur sont réservées.
Les innovations apportées par la Machine Universelle permettent d'envisager de multiples applications industrielles. Ce document en présente quelques unes.
1 1 - Exemples d'applications de la Machine Universelle dans son ensemble
L'architecture de la Machine Universelle repose sur une base très simple. Elle permet d'élaborer des pro- grammes d'une complexité quelconque qui pourront fonctionner sur n'importe quelle machine support 23, moyennant un effort de programmation minimal. Les programmes peuvent donc être considérés comme réalisés une fois pour toutes. Ainsi, un logiciel de jeu ou un système d'exploitation n'est programmé qu'une seule fois, et sera converti en quelques jours sur tout type de machine support 23. La rapidité et la facilité de conversion sont particulièrement utiles pour des groupes de machines qui ne sont pas encore totalement standardisées et uniformisées. On peut citer notamment les assistants personnels numériques (en anglais "PDA" pour "per- sonal digital assistant"), les téléphones mobiles, ou encore les cartes à puce.
12 - Exemples d'applications de certains niveaux de la Machine Universelle, directement exploités (sans se baser sur les niveaux inférieurs)
12.1 - Niveau 0.2 Grâce à son extrême simplicité, le processeur de niveau 0.2 peut être fondu sous la forme d'un microprocesseur de taille très réduite. Dans ce cas, il peut convenir à des applications nécessitant une miniaturisation extrême, une bonne fiabilité du fonctionnement électronique, une faible consommation d'énergie et n'ayant pas besoin de beaucoup de puissance de calcul. C'est par exemple le cas de certaines applications médicales : on pourrait imaginer faire tenir un processeur 0.2 accompagné d'un ou plusieurs dispositifs mécaniques miniaturi- ses (capteur, pompe avec réservoir, électrodes, ...) dans un volume suffisamment réduit pour être implanté dans le coφs humain. Par exemple, chez des malades, ces machines miniatures pourraient libérer des substances pharmaceutiques selon la teneur dans le sang d'un composé quelconque. Une autre application serait la création de neurones artificiels, implantés dans le cerveau, palliant à certaines déficiences neurologiques : un processeur 0.2 peut simuler un ensemble de neurones. Dans d'autres domaines l'intérêt d'un processeur 0.2 est différent. C'est le cas des applications en milieu extrême : au lieu de privilégier la miniaturisation, la simplicité du niveau 0.2 permet de le fondre sous la forme d'un " macro " processeur, c'est-à-dire un processeur disposant de circuits électriques très grossiers. Ce processeur, tout en restant de taille raisonnable (de l'ordre de la taille d'un processeur actuel très complexe) serait très tolérant aux perturbations induites par les rayons cosmi-
ques, les "ariations extrêmes de températures ou les contraintes mécaniques. I 'aérospatiale et l'aéronautique sont des exemples de domaines d'applications. D'autres applications sont possibles dans le domaine des " ordinateurs vestimentaires " (wearable computers, c'est à dire des ordinateurs incoφorés dans des vêtements pour mieux s'intégrer dans la vie quotidienne de l'utilisateur). Un processeur 0.2 fondu sur une base isolante 5 souple pourrait être intégré à faible coût aux vêtements, et résister à une utilisation courante (déformation, froid, humidité, chocs, etc.).
Enfin, la miniaturisation extrême d'un processeur de niveau 0.2 permettrait de libérer de la place sur les surfaces de silicium pour d'autres composants électroniques, notamment pour de la mémoire. Cela serait intéressant pour les cartes à puce dont la mémoire peut être limitée par la taille du processeur.
10 12.2 - Niveau 0.4
La simplicité du niveau 0.2 a pour conséquence une lenteur d'exécution des programmes qui peut rendre quasi-inutilisable les applications complexes à cause des temps de calculs inappropriés. Le niveau 0.4 se présente comme un meilleur compromis entre la rapidité et la simplicité. Le supplément de complexité est minime par rapport au niveau 0.2 de sorte que les applications industrielles envisageables sont très proches. La vitesse
15 d'exécution des programmes est cependant environ 100 fois plus rapide. Ainsi des programmes très complexes sont exécutés dans des délais raisonnables.
12.3 - Niveau un
La simplicité des niveaux 0.2 et 0.4 rend leur utilisation directe difficile. D'autre part le niveau 0.4 reste d'une lenteur relative qui peut être inadaptée à certaines applications. Le niveau un est d'un niveau de complexité in- 0 termédiaire. Il est capable d'exécuter des applications de haut niveau avec une faible perte d'efficacité par rapport à leur exécution directe sur la machine support 23. Ce niveau convient donc à la plupart des applications courantes d'un micro-ordinateur (applications graphiques, sonores, bureautiques, etc.). Le niveau un représente le meilleur compromis entre simplicité de conception et rapidité d'exécution. Il requiert cependant une machine support 23 ayant des capacités suffisantes pour l'accueillir, et n'est donc pas toujours adapté à certaines 5 machines support aux capacités très limitées. De plus, le temps nécessaire pour réaliser une machine matérielle ou logicielle de niveau un peut être relativement long comparé à l'utilisation que l'on va en faire. C'est pourquoi ce niveau convient pour des machines largement diffusées et qui ne seront pas obsolètes trop rapidement.
12.4 - Machine 31 de niveau deux
La plupart du temps, il n'est pas utile de réaliser directement une implémentation de ce niveau. En effet, la ré- 0 alisation d'une machine matérielle ou logicielle de niveau deux demande un investissement de travail conséquent, alors que son émulation par le niveau un n'entraîne qu'une perte négligeable d'efficacité. Cependant, l'utilisation directe de ce niveau peut s'avérer intéressante, par exemple pour le calcul intensif. En effet, la masse de calculs nécessaires démultiplie le nombre d'opérations à exécuter. La perte de temps, négligeable lors de l'émulation de ce niveau par le niveau un, peut alors devenir importante. On peut citer comme 5 exemple le calcul scientifique, le calcul d'images de synthèse, l'intelligence artificielle, ou la compression en temps réel de données vidéo.