COURS 5.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 4: | Line 4: | ||
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
||
* * |
* * |
||
− | * par Le |
+ | * par Le Féroce Lapin (from 44E) * |
* * |
* * |
||
− | * Cours |
+ | * Cours numéro 5 * |
* * |
* * |
||
****************************************************************** |
****************************************************************** |
||
− | Suite de l' |
+ | Suite de l'étude du Status register, les interruptions. |
− | Etant |
+ | Etant donné que nous avons parfaitement compris ce qui se passait |
− | dans le cas |
+ | dans le cas où le 68000 trouvait le bit T du Status Register à 1, |
− | c'est- |
+ | c'est-à-dire tout le système d'adresse fixe à laquelle on trouve |
l'adresse de la routine, nous allons pouvoir continuer et en fait |
l'adresse de la routine, nous allons pouvoir continuer et en fait |
||
finir la description des autres bits de ce Status Register. |
finir la description des autres bits de ce Status Register. |
||
Line 22: | Line 22: | ||
Le bit S / Superviseur |
Le bit S / Superviseur |
||
− | Le 68000 peut |
+ | Le 68000 peut évoluer dans 2 modes: le mode Superviseur et le |
− | mode Utilisateur. Dans le mode superviseur, nous avons |
+ | mode Utilisateur. Dans le mode superviseur, nous avons accès à |
− | TOUTES les instructions du 68000 et |
+ | TOUTES les instructions du 68000 et à TOUTE la mémoire, alors |
− | qu'en mode utilisateur certaines instructions ne peuvent |
+ | qu'en mode utilisateur certaines instructions ne peuvent être em- |
− | + | ployées, et l'accès à certaines parties de la mémoire est in- |
|
terdit. |
terdit. |
||
Effectivement cela peut sembler au premier abord surprenant: |
Effectivement cela peut sembler au premier abord surprenant: |
||
− | Vous avez |
+ | Vous avez acheté une machine, c'est quand même pour pouvoir l'uti- |
− | liser dans sa |
+ | liser dans sa totalité! Là encore, nous tombons dans le piège qui |
− | consiste |
+ | consiste à mélanger ATARI ST et 68000 MOTOROLA. Grâce à l'énorme |
− | puissance de ce micro-processeur, il est tout |
+ | puissance de ce micro-processeur, il est tout à fait possible |
d'envisager un travail multi-utilisateur. |
d'envisager un travail multi-utilisateur. |
||
− | Gonflons notre ST |
+ | Gonflons notre ST à 8 Mega octets, équipons le d'un énorme disque |
− | dur, et connectons le |
+ | dur, et connectons le à plusieurs terminaux. Nous avons donc plu- |
− | sieurs claviers, plusieurs |
+ | sieurs claviers, plusieurs écrans, mais en revanche un seul mi- |
− | cro-processeur, celui de l' |
+ | cro-processeur, celui de l'unité centrale (dont le nom prend ici |
− | toute sa valeur) et une seule |
+ | toute sa valeur) et une seule mémoire, dans laquelle tout le monde |
− | pioche |
+ | pioche à tours de bras. Là, la différenciation Superviseur/Utili- |
− | sateur prend son sens. Le Superviseur, c'est le ' |
+ | sateur prend son sens. Le Superviseur, c'est le 'propriétaire' de |
− | l' |
+ | l'unité centrale, les personnes utilisant les terminaux n'étant |
que des 'utilisateurs'. Le fait de ne leur autoriser qu'une partie |
que des 'utilisateurs'. Le fait de ne leur autoriser qu'une partie |
||
− | des instructions et de la |
+ | des instructions et de la mémoire, a pour but d'éviter les planta- |
ges car si dans le cas d'une mono-utilisation, un plantage total |
ges car si dans le cas d'une mono-utilisation, un plantage total |
||
− | de la machine est toujours |
+ | de la machine est toujours gênant, dans le cas d'une multi-utili- |
− | sation, cela |
+ | sation, cela relève de la catastrophe, car on ne plante plus le |
travail d'une seule personnes mais de plusieurs! |
travail d'une seule personnes mais de plusieurs! |
||
− | Le bit S du Status Register, s'il est |
+ | Le bit S du Status Register, s'il est à 0, indique que nous sommes |
en mode Utilisateur. A 1, il indique que nous sommes en Super- |
en mode Utilisateur. A 1, il indique que nous sommes en Super- |
||
viseur. |
viseur. |
||
− | Tout comme MONST indiquait l' |
+ | Tout comme MONST indiquait l'état Trace en indiquant T à côté du |
SR, il indique U ou S suivant le mode dans lequel nous nous |
SR, il indique U ou S suivant le mode dans lequel nous nous |
||
trouvons. |
trouvons. |
||
− | Jetons un coup d'oeil en |
+ | Jetons un coup d'oeil en arrière sur le chapitre décrivant le bro- |
− | chage du 68000 (cours |
+ | chage du 68000 (cours supplémentaire A). Nous retrouvons cette |
distinction au niveau des broches FC0, FC1, FC2. |
distinction au niveau des broches FC0, FC1, FC2. |
||
− | Avant d' |
+ | Avant d'étudier les 3 bits restant du SR (I2, I1, I0), il faut sa- |
− | voir que le Status Register est en fait |
+ | voir que le Status Register est en fait séparé en 2 octets. L'oc- |
− | tet de poids fort (bit 8 |
+ | tet de poids fort (bit 8 à 15) est appelé octet superviseur, alors |
que l'octet de poids faible est l'octet utilisateur. |
que l'octet de poids faible est l'octet utilisateur. |
||
− | En mode utilisateur on ne peut |
+ | En mode utilisateur on ne peut écrire que dans l'octet utilisateur |
− | alors qu'en mode superviseur nous avons |
+ | alors qu'en mode superviseur nous avons accès au word dans sa to- |
− | + | talité. |
|
L'octet utilisateur contenant les bits de conditions (bits X N Z V |
L'octet utilisateur contenant les bits de conditions (bits X N Z V |
||
− | C), on l'appelle |
+ | C), on l'appelle également registre des codes conditions (Condi- |
tion Code Register), ou CCR. |
tion Code Register), ou CCR. |
||
Les bits I2, I1 et I0 (Interrupt Mask) |
Les bits I2, I1 et I0 (Interrupt Mask) |
||
− | Ces 3 bits servent |
+ | Ces 3 bits servent à représenter les masques d'interruption. Mais |
− | voyons tout d'abord ce qu'est une interruption. Nous avons |
+ | voyons tout d'abord ce qu'est une interruption. Nous avons étudié |
− | + | précédemment le fonctionnement lié au bit T (trace). Lorsque ce |
|
− | bit est |
+ | bit est positionné, le programme principal est interrompu, au pro- |
− | fit d'une routine |
+ | fit d'une routine spéciale. C'est en quelque sorte le principe de |
l'interruption. |
l'interruption. |
||
− | Une routine en interruption, c'est un bout de programme |
+ | Une routine en interruption, c'est un bout de programme différent |
− | du programme principal. A intervalles |
+ | du programme principal. A intervalles réguliers ou à cause d'un |
− | + | élément extérieur, le 68000 va interrompre (c'est bien le mot!) le |
|
− | programme principal, pour aller |
+ | programme principal, pour aller exécuter cette routine. Lorsque |
− | celle-ci sera |
+ | celle-ci sera terminée, il y aura retour au programme principal. |
− | L'exemple le plus simple est celui du |
+ | L'exemple le plus simple est celui du téléphone: Je travaille à |
− | mon bureau (c'est le programme principal) lorsque le |
+ | mon bureau (c'est le programme principal) lorsque le téléphone |
− | sonne. Je |
+ | sonne. Je détecte l'interruption, j'arrête mon travail et je dé- |
− | croche ( |
+ | croche (exécution de l'interruption). La conversation terminée, je |
− | raccroche et je retourne |
+ | raccroche et je retourne à mon occupation première. |
− | Maintenant, plus |
+ | Maintenant, plus compliqué: Interruption de mon travail principal. |
− | Je |
+ | Je décroche, mais en cours de conversation, on sonne à la porte. |
− | + | Là intervient le principe de la priorité d'interruption. Si la |
|
− | porte d' |
+ | porte d'entrée à une priorité supérieure à celle du téléphone, |
− | j'interrompt la conversation |
+ | j'interrompt la conversation téléphonique pour aller ouvrir: Il y |
− | a interruption de l'interruption. Une fois |
+ | a interruption de l'interruption. Une fois claqué la porte au |
− | + | 124ème marchand de balayettes de la journée je reprends le télé- |
|
− | phone, je finis la conversation, je raccroche puis je me remets |
+ | phone, je finis la conversation, je raccroche puis je me remets à |
− | ma |
+ | ma tâche principale. |
− | Par contre, si l'interruption 'porte d' |
+ | Par contre, si l'interruption 'porte d'entrée' a une priorité |
− | + | inférieure à celle du téléphone, j'attendrai d'avoir fini avec ce- |
|
lui-ci avant d'aller ouvrir. |
lui-ci avant d'aller ouvrir. |
||
− | Les 3 bits I2, I1 et I0 (Interrupt mask) permettent de |
+ | Les 3 bits I2, I1 et I0 (Interrupt mask) permettent de définir le |
niveau mini d'interruption qui sera pris en cours. Comme on ne |
niveau mini d'interruption qui sera pris en cours. Comme on ne |
||
− | + | possède que 3 bits, on ne peut définir que 7 niveau, de 1 à 7 (on |
|
ne parle pas ici du niveau 0, car c'est le niveau de travail 'nor- |
ne parle pas ici du niveau 0, car c'est le niveau de travail 'nor- |
||
− | mal' de la machine. Si le niveau est |
+ | mal' de la machine. Si le niveau est à 0, c'est qu'il n'y a pas |
d'interruption.). Ainsi, si nous avons 011 pour ces 3 bits, nous |
d'interruption.). Ainsi, si nous avons 011 pour ces 3 bits, nous |
||
obtenons 3 comme niveau mini. Les interruptions de niveaux 1 et 2 |
obtenons 3 comme niveau mini. Les interruptions de niveaux 1 et 2 |
||
− | ne seront donc pas prises en compte. Puisque le niveau |
+ | ne seront donc pas prises en compte. Puisque le niveau indiqué par |
− | les 3 bits sera |
+ | les 3 bits sera accepté comme niveau d'interruption, nous en dé- |
− | duisons que si les bits sont |
+ | duisons que si les bits sont à 111, seuls les interruptions de ni- |
− | veau 7 seront prises en compte. Or nous voyons bien |
+ | veau 7 seront prises en compte. Or nous voyons bien également |
− | qu'il n'est pas possible de |
+ | qu'il n'est pas possible de définir un niveau minimum de 8 par |
− | exemple, et donc qu'il sera impossible d' |
+ | exemple, et donc qu'il sera impossible d'empêcher une interruption |
de niveau 7. Ce niveau est donc dit 'non-masquable'. |
de niveau 7. Ce niveau est donc dit 'non-masquable'. |
||
− | Les interruptions de niveau 7 sont donc |
+ | Les interruptions de niveau 7 sont donc appelées NMI c'est à dire |
non-maskable-interrupt. |
non-maskable-interrupt. |
||
− | A noter qu'il n'est pas possible d' |
+ | A noter qu'il n'est pas possible d'opérer une sélection précise et |
par exemple d'autoriser les interruptions de niveaux 4, 5 et 7 et |
par exemple d'autoriser les interruptions de niveaux 4, 5 et 7 et |
||
− | pas celles de niveau 6. Si les bits sont |
+ | pas celles de niveau 6. Si les bits sont à 100, les interruptions |
− | de niveau 4, 5, 6 et 7 seront |
+ | de niveau 4, 5, 6 et 7 seront autorisées. Vous pouvez jeter à nou- |
veau un coup d'oeil sur le cours annexe A. Vous retrouverez bien |
veau un coup d'oeil sur le cours annexe A. Vous retrouverez bien |
||
sur le 68000 les broches I2, I1 et I0. Une remarque cependant, ces |
sur le 68000 les broches I2, I1 et I0. Une remarque cependant, ces |
||
− | broches sont actives |
+ | broches sont actives à l'état bas, c'est-à-dire qu'elle indique |
− | quelque chose lorsqu'il n'y a pas de courant, |
+ | quelque chose lorsqu'il n'y a pas de courant, à l'inverse des au- |
tres broches. |
tres broches. |
||
− | Par contre leur |
+ | Par contre leur représentation au sein du Status Register se fait |
dans le bon 'sens'. |
dans le bon 'sens'. |
||
− | Nous sommes maintenant |
+ | Nous sommes maintenant amenés à nous poser une question similaire |
− | + | à celle que nous nous sommes posée lors de l'étude du mode Trace. |
|
− | Le 68000 |
+ | Le 68000 reçoit une demande d'interruption. Il compare le niveau |
− | de celle-ci |
+ | de celle-ci à la limite fixée par les bits I du Status Register. |
Si l'interruption est acceptable, il sauve le Status Register et |
Si l'interruption est acceptable, il sauve le Status Register et |
||
met en place dans les bits I le niveau de l'interruption qu'il va |
met en place dans les bits I le niveau de l'interruption qu'il va |
||
− | + | exécuter afin de ne pas être gêné par une autre demande plus fai- |
|
− | ble. Il stoppe alors l' |
+ | ble. Il stoppe alors l'exécution de son programme principal pour |
− | se |
+ | se détourner vers la routine. Une fois celle-ci terminée, il re- |
− | vient au programme principal. C'est bien joli, mais |
+ | vient au programme principal. C'est bien joli, mais où a-t-il |
− | + | trouvé la routine en interruption ? Et bien simplement en utili- |
|
− | sant le |
+ | sant le même principe que pour le mode Trace. Nous avons vu que |
− | lorsque le bit T |
+ | lorsque le bit T était en place, le 68000 allait voir à l'adresse |
− | $24 et qu'il y trouvait un long mot, ce long mot |
+ | $24 et qu'il y trouvait un long mot, ce long mot étant l'adresse |
− | de la routine. Pour les interruptions, le principe est le |
+ | de la routine. Pour les interruptions, le principe est le même: si |
− | c'est une interruption de niveau 4, c'est |
+ | c'est une interruption de niveau 4, c'est à l'adresse $70 que le |
68000 trouvera un long mot, ce long mot, comme dans le cas du mode |
68000 trouvera un long mot, ce long mot, comme dans le cas du mode |
||
− | Trace |
+ | Trace étant l'adresse de la routine à exécuter. Si l'interruption |
− | est de niveau 1, c'est le long mot |
+ | est de niveau 1, c'est le long mot situé à l'adresse $64 etc... Il |
− | est bien |
+ | est bien évident que c'est au programmeur de placer ces long mots |
− | + | à ces adresses: On prépare une routine, on cherche son adresse de |
|
− | + | départ, puis on note celle ci à l'endroit précis où l'on sait que |
|
le 68000 viendra la chercher. |
le 68000 viendra la chercher. |
||
− | Toutes ces adresses |
+ | Toutes ces adresses étant situées dans le premier kilo de mémoire |
− | de notre machine, |
+ | de notre machine, étudions de plus près ces 1024 octets. (Vous |
− | trouverez un tableau |
+ | trouverez un tableau représentant ce kilo en annexe) Pour le mo- |
− | ment nous n'allons faire qu'y |
+ | ment nous n'allons faire qu'y repérer les quelques éléments que |
− | nous avons |
+ | nous avons déjà étudiés. Toutes ces adresses ont des numéros d'or- |
− | dres, et |
+ | dres, et à cause de leur fonction propre (ne faire que communiquer |
l'adresse d'une routine), on les appelle 'vecteurs'. |
l'adresse d'une routine), on les appelle 'vecteurs'. |
||
Nous retrouvons bien en $24 le vecteur 9, correspondant au mode |
Nous retrouvons bien en $24 le vecteur 9, correspondant au mode |
||
− | Trace, de $64 |
+ | Trace, de $64 à $7C les vecteurs correspondants aux interruptions |
− | de niveau 1 |
+ | de niveau 1 à 7. Le niveau 0, étant le niveau 'normal' de travail, |
n'a pas de vecteur. |
n'a pas de vecteur. |
||
− | Nous pouvons |
+ | Nous pouvons déjà expliquer d'autres vecteurs: Ainsi le numéro 5 |
(adresse $14) c'est le vecteur de division par 0. Le 68000 ne peut |
(adresse $14) c'est le vecteur de division par 0. Le 68000 ne peut |
||
pas faire de division par 0. Lorsque le programme essaye, il se |
pas faire de division par 0. Lorsque le programme essaye, il se |
||
− | produit la |
+ | produit la même chose que pour le mode Trace: Ayant détecté une |
− | division par 0, le 68000 fonce |
+ | division par 0, le 68000 fonce à l'adresse $14, y trouve une |
− | adresse de routine et va |
+ | adresse de routine et va exécuter celle-ci. Dans la plupart des |
− | cas cette routine va afficher quelques bombes |
+ | cas cette routine va afficher quelques bombes à l'écran et tout |
− | bloquer. Rien ne vous |
+ | bloquer. Rien ne vous empêche cependant de préparer votre propre |
routine et de mettre son adresse en $14. Ainsi dans un programme |
routine et de mettre son adresse en $14. Ainsi dans un programme |
||
de math (beurkk!) cette routine peut afficher "division par 0 im- |
de math (beurkk!) cette routine peut afficher "division par 0 im- |
||
possible". Si l'utilisateur tente une telle division, inutile de |
possible". Si l'utilisateur tente une telle division, inutile de |
||
− | faire des tests pour le |
+ | faire des tests pour le prévenir de cette impossibilité, le 68000 |
s'en chargera tout seul. |
s'en chargera tout seul. |
||
Line 196: | Line 196: | ||
Les autres vecteurs |
Les autres vecteurs |
||
− | Erreur bus. Nous avons vu |
+ | Erreur bus. Nous avons vu précédemment que le 68000 utilise ce |
− | que nous appelons un bus pour recevoir ou transmettre des |
+ | que nous appelons un bus pour recevoir ou transmettre des données. |
Si une erreur survient sur celui ci, il y a saut a l'adresse $8 |
Si une erreur survient sur celui ci, il y a saut a l'adresse $8 |
||
− | pour trouver l'adresse de la routine qui sera alors |
+ | pour trouver l'adresse de la routine qui sera alors exécutée. |
− | Erreur d'adresse. Le 68000 ne peut |
+ | Erreur d'adresse. Le 68000 ne peut accéder qu'à des adresses |
− | paires. S'il tente d' |
+ | paires. S'il tente d'accéder à une adresse impaire, il se produit |
− | une erreur d'adresse ( |
+ | une erreur d'adresse (même principe de traitement que l'erreur |
bus, ou le mode Trace, vecteur, adresse etc...). Nous verrons plus |
bus, ou le mode Trace, vecteur, adresse etc...). Nous verrons plus |
||
− | tard qu'il nous sera possible d' |
+ | tard qu'il nous sera possible d'accéder à des adresse impaires, |
− | mais avec des |
+ | mais avec des précautions. |
− | Instructions |
+ | Instructions illégales. Nous avons vu que le travail de l'as- |
− | sembleur consistait simplement |
+ | sembleur consistait simplement à transformer en chiffres, ligne |
− | par ligne, notre programme. Cependant, si nous mettons en |
+ | par ligne, notre programme. Cependant, si nous mettons en mémoire |
− | une image, celle-ci sera |
+ | une image, celle-ci sera également placée dans le 'tube mémoire' |
− | sous forme de chiffres. La |
+ | sous forme de chiffres. La différence c'est que ces chiffres là |
ne veulent rien dire pour le 68000 en tant qu'instruction. Si |
ne veulent rien dire pour le 68000 en tant qu'instruction. Si |
||
− | nous ordonnons au 68000 d'aller |
+ | nous ordonnons au 68000 d'aller à cette adresse (celle de |
− | l'image) il essayera de |
+ | l'image) il essayera de décrypter ces chiffres comme des instruc- |
− | tions, ce qui |
+ | tions, ce qui déclenchera une erreur 'instruction illégale'. |
− | Violation de |
+ | Violation de privilège. Nous avons vu que le 68000 pouvait évo- |
− | luer en mode utilisateur ou en mode superviseur. On dit que l' |
+ | luer en mode utilisateur ou en mode superviseur. On dit que l'état |
− | superviseur est l' |
+ | superviseur est l'état privilégié (ou état de plus haut |
− | + | privilège). Tenter d'accéder en mode utilisateur à une zone mé- |
|
− | moire |
+ | moire réservée au mode superviseur ou bien tenter d'exécuter une |
− | instruction |
+ | instruction privilégiée (donc utilisable uniquement en supervi- |
− | seur) provoquera une erreur 'violation de |
+ | seur) provoquera une erreur 'violation de privilège'. |
− | + | Connaître ces différents types d'erreurs est très important. En |
|
− | effet la phase de mise au point est |
+ | effet la phase de mise au point est généralement longue en assem- |
− | bleur, surtout au |
+ | bleur, surtout au début. De très nombreuses erreurs peuvent surve- |
− | nir, dont la cause est parfois juste sous notre nez. Le type |
+ | nir, dont la cause est parfois juste sous notre nez. Le type même |
− | de l'erreur, si celle-ci est bien comprise, peut souvent suffire |
+ | de l'erreur, si celle-ci est bien comprise, peut souvent suffire à |
− | orienter les recherches plus |
+ | orienter les recherches plus précisément et ainsi raccourcir le |
− | temps ( |
+ | temps (pénible) de recherche du grain de sable qui bloque tout! |
− | Tous les vecteurs constituant le premier kilo de |
+ | Tous les vecteurs constituant le premier kilo de mémoire ayant |
− | pour but de |
+ | pour but de dérouter le programme principal vers une routine ex- |
− | ceptionnelle, sont |
+ | ceptionnelle, sont appelés 'vecteurs d'exceptions'. |
− | Les vecteurs restants seront |
+ | Les vecteurs restants seront étudiés dans les séries suivantes, au |
− | fur et |
+ | fur et à mesure des besoins. Chaque chose en son temps! |
− | Pour aujourd'hui nous nous |
+ | Pour aujourd'hui nous nous arrêterons là. Ce fut court mais le |
− | prochain chapitre sera |
+ | prochain chapitre sera consacré à la pile et sera bien gros! |
− | La pile est un |
+ | La pile est un problème aussi simple que les autres, qui demande |
− | simplement de l'attention. |
+ | simplement de l'attention. Après avoir étudié ce qu'est la pile, |
il ne nous restera plus qu'un demi-cours avant d'aborder nos pre- |
il ne nous restera plus qu'un demi-cours avant d'aborder nos pre- |
||
miers 'gros' programmes! |
miers 'gros' programmes! |
||
− | Courage! mais surtout prenez votre temps! Relisez les cours |
+ | Courage! mais surtout prenez votre temps! Relisez les cours précé- |
− | dent |
+ | dent même si tout vous paraît compris. Plus nous avancerons plus |
le nombre de petites choses augmentera et moins il y aura de place |
le nombre de petites choses augmentera et moins il y aura de place |
||
− | pour la plus petite |
+ | pour la plus petite incompréhension. |
+ | |||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
Revision as of 12:20, 24 November 2023
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le Féroce Lapin (from 44E) * * * * Cours numéro 5 * * * ****************************************************************** Suite de l'étude du Status register, les interruptions. Etant donné que nous avons parfaitement compris ce qui se passait dans le cas où le 68000 trouvait le bit T du Status Register à 1, c'est-à-dire tout le système d'adresse fixe à laquelle on trouve l'adresse de la routine, nous allons pouvoir continuer et en fait finir la description des autres bits de ce Status Register. Le bit S / Superviseur Le 68000 peut évoluer dans 2 modes: le mode Superviseur et le mode Utilisateur. Dans le mode superviseur, nous avons accès à TOUTES les instructions du 68000 et à TOUTE la mémoire, alors qu'en mode utilisateur certaines instructions ne peuvent être em- ployées, et l'accès à certaines parties de la mémoire est in- terdit. Effectivement cela peut sembler au premier abord surprenant: Vous avez acheté une machine, c'est quand même pour pouvoir l'uti- liser dans sa totalité! Là encore, nous tombons dans le piège qui consiste à mélanger ATARI ST et 68000 MOTOROLA. Grâce à l'énorme puissance de ce micro-processeur, il est tout à fait possible d'envisager un travail multi-utilisateur. Gonflons notre ST à 8 Mega octets, équipons le d'un énorme disque dur, et connectons le à plusieurs terminaux. Nous avons donc plu- sieurs claviers, plusieurs écrans, mais en revanche un seul mi- cro-processeur, celui de l'unité centrale (dont le nom prend ici toute sa valeur) et une seule mémoire, dans laquelle tout le monde pioche à tours de bras. Là, la différenciation Superviseur/Utili- sateur prend son sens. Le Superviseur, c'est le 'propriétaire' de l'unité centrale, les personnes utilisant les terminaux n'étant que des 'utilisateurs'. Le fait de ne leur autoriser qu'une partie des instructions et de la mémoire, a pour but d'éviter les planta- ges car si dans le cas d'une mono-utilisation, un plantage total de la machine est toujours gênant, dans le cas d'une multi-utili- sation, cela relève de la catastrophe, car on ne plante plus le travail d'une seule personnes mais de plusieurs! Le bit S du Status Register, s'il est à 0, indique que nous sommes en mode Utilisateur. A 1, il indique que nous sommes en Super- viseur. Tout comme MONST indiquait l'état Trace en indiquant T à côté du SR, il indique U ou S suivant le mode dans lequel nous nous trouvons. Jetons un coup d'oeil en arrière sur le chapitre décrivant le bro- chage du 68000 (cours supplémentaire A). Nous retrouvons cette distinction au niveau des broches FC0, FC1, FC2. Avant d'étudier les 3 bits restant du SR (I2, I1, I0), il faut sa- voir que le Status Register est en fait séparé en 2 octets. L'oc- tet de poids fort (bit 8 à 15) est appelé octet superviseur, alors que l'octet de poids faible est l'octet utilisateur. En mode utilisateur on ne peut écrire que dans l'octet utilisateur alors qu'en mode superviseur nous avons accès au word dans sa to- talité. L'octet utilisateur contenant les bits de conditions (bits X N Z V C), on l'appelle également registre des codes conditions (Condi- tion Code Register), ou CCR. Les bits I2, I1 et I0 (Interrupt Mask) Ces 3 bits servent à représenter les masques d'interruption. Mais voyons tout d'abord ce qu'est une interruption. Nous avons étudié précédemment le fonctionnement lié au bit T (trace). Lorsque ce bit est positionné, le programme principal est interrompu, au pro- fit d'une routine spéciale. C'est en quelque sorte le principe de l'interruption. Une routine en interruption, c'est un bout de programme différent du programme principal. A intervalles réguliers ou à cause d'un élément extérieur, le 68000 va interrompre (c'est bien le mot!) le programme principal, pour aller exécuter cette routine. Lorsque celle-ci sera terminée, il y aura retour au programme principal. L'exemple le plus simple est celui du téléphone: Je travaille à mon bureau (c'est le programme principal) lorsque le téléphone sonne. Je détecte l'interruption, j'arrête mon travail et je dé- croche (exécution de l'interruption). La conversation terminée, je raccroche et je retourne à mon occupation première. Maintenant, plus compliqué: Interruption de mon travail principal. Je décroche, mais en cours de conversation, on sonne à la porte. Là intervient le principe de la priorité d'interruption. Si la porte d'entrée à une priorité supérieure à celle du téléphone, j'interrompt la conversation téléphonique pour aller ouvrir: Il y a interruption de l'interruption. Une fois claqué la porte au 124ème marchand de balayettes de la journée je reprends le télé- phone, je finis la conversation, je raccroche puis je me remets à ma tâche principale. Par contre, si l'interruption 'porte d'entrée' a une priorité inférieure à celle du téléphone, j'attendrai d'avoir fini avec ce- lui-ci avant d'aller ouvrir. Les 3 bits I2, I1 et I0 (Interrupt mask) permettent de définir le niveau mini d'interruption qui sera pris en cours. Comme on ne possède que 3 bits, on ne peut définir que 7 niveau, de 1 à 7 (on ne parle pas ici du niveau 0, car c'est le niveau de travail 'nor- mal' de la machine. Si le niveau est à 0, c'est qu'il n'y a pas d'interruption.). Ainsi, si nous avons 011 pour ces 3 bits, nous obtenons 3 comme niveau mini. Les interruptions de niveaux 1 et 2 ne seront donc pas prises en compte. Puisque le niveau indiqué par les 3 bits sera accepté comme niveau d'interruption, nous en dé- duisons que si les bits sont à 111, seuls les interruptions de ni- veau 7 seront prises en compte. Or nous voyons bien également qu'il n'est pas possible de définir un niveau minimum de 8 par exemple, et donc qu'il sera impossible d'empêcher une interruption de niveau 7. Ce niveau est donc dit 'non-masquable'. Les interruptions de niveau 7 sont donc appelées NMI c'est à dire non-maskable-interrupt. A noter qu'il n'est pas possible d'opérer une sélection précise et par exemple d'autoriser les interruptions de niveaux 4, 5 et 7 et pas celles de niveau 6. Si les bits sont à 100, les interruptions de niveau 4, 5, 6 et 7 seront autorisées. Vous pouvez jeter à nou- veau un coup d'oeil sur le cours annexe A. Vous retrouverez bien sur le 68000 les broches I2, I1 et I0. Une remarque cependant, ces broches sont actives à l'état bas, c'est-à-dire qu'elle indique quelque chose lorsqu'il n'y a pas de courant, à l'inverse des au- tres broches. Par contre leur représentation au sein du Status Register se fait dans le bon 'sens'. Nous sommes maintenant amenés à nous poser une question similaire à celle que nous nous sommes posée lors de l'étude du mode Trace. Le 68000 reçoit une demande d'interruption. Il compare le niveau de celle-ci à la limite fixée par les bits I du Status Register. Si l'interruption est acceptable, il sauve le Status Register et met en place dans les bits I le niveau de l'interruption qu'il va exécuter afin de ne pas être gêné par une autre demande plus fai- ble. Il stoppe alors l'exécution de son programme principal pour se détourner vers la routine. Une fois celle-ci terminée, il re- vient au programme principal. C'est bien joli, mais où a-t-il trouvé la routine en interruption ? Et bien simplement en utili- sant le même principe que pour le mode Trace. Nous avons vu que lorsque le bit T était en place, le 68000 allait voir à l'adresse $24 et qu'il y trouvait un long mot, ce long mot étant l'adresse de la routine. Pour les interruptions, le principe est le même: si c'est une interruption de niveau 4, c'est à l'adresse $70 que le 68000 trouvera un long mot, ce long mot, comme dans le cas du mode Trace étant l'adresse de la routine à exécuter. Si l'interruption est de niveau 1, c'est le long mot situé à l'adresse $64 etc... Il est bien évident que c'est au programmeur de placer ces long mots à ces adresses: On prépare une routine, on cherche son adresse de départ, puis on note celle ci à l'endroit précis où l'on sait que le 68000 viendra la chercher. Toutes ces adresses étant situées dans le premier kilo de mémoire de notre machine, étudions de plus près ces 1024 octets. (Vous trouverez un tableau représentant ce kilo en annexe) Pour le mo- ment nous n'allons faire qu'y repérer les quelques éléments que nous avons déjà étudiés. Toutes ces adresses ont des numéros d'or- dres, et à cause de leur fonction propre (ne faire que communiquer l'adresse d'une routine), on les appelle 'vecteurs'. Nous retrouvons bien en $24 le vecteur 9, correspondant au mode Trace, de $64 à $7C les vecteurs correspondants aux interruptions de niveau 1 à 7. Le niveau 0, étant le niveau 'normal' de travail, n'a pas de vecteur. Nous pouvons déjà expliquer d'autres vecteurs: Ainsi le numéro 5 (adresse $14) c'est le vecteur de division par 0. Le 68000 ne peut pas faire de division par 0. Lorsque le programme essaye, il se produit la même chose que pour le mode Trace: Ayant détecté une division par 0, le 68000 fonce à l'adresse $14, y trouve une adresse de routine et va exécuter celle-ci. Dans la plupart des cas cette routine va afficher quelques bombes à l'écran et tout bloquer. Rien ne vous empêche cependant de préparer votre propre routine et de mettre son adresse en $14. Ainsi dans un programme de math (beurkk!) cette routine peut afficher "division par 0 im- possible". Si l'utilisateur tente une telle division, inutile de faire des tests pour le prévenir de cette impossibilité, le 68000 s'en chargera tout seul. Les autres vecteurs Erreur bus. Nous avons vu précédemment que le 68000 utilise ce que nous appelons un bus pour recevoir ou transmettre des données. Si une erreur survient sur celui ci, il y a saut a l'adresse $8 pour trouver l'adresse de la routine qui sera alors exécutée. Erreur d'adresse. Le 68000 ne peut accéder qu'à des adresses paires. S'il tente d'accéder à une adresse impaire, il se produit une erreur d'adresse (même principe de traitement que l'erreur bus, ou le mode Trace, vecteur, adresse etc...). Nous verrons plus tard qu'il nous sera possible d'accéder à des adresse impaires, mais avec des précautions. Instructions illégales. Nous avons vu que le travail de l'as- sembleur consistait simplement à transformer en chiffres, ligne par ligne, notre programme. Cependant, si nous mettons en mémoire une image, celle-ci sera également placée dans le 'tube mémoire' sous forme de chiffres. La différence c'est que ces chiffres là ne veulent rien dire pour le 68000 en tant qu'instruction. Si nous ordonnons au 68000 d'aller à cette adresse (celle de l'image) il essayera de décrypter ces chiffres comme des instruc- tions, ce qui déclenchera une erreur 'instruction illégale'. Violation de privilège. Nous avons vu que le 68000 pouvait évo- luer en mode utilisateur ou en mode superviseur. On dit que l'état superviseur est l'état privilégié (ou état de plus haut privilège). Tenter d'accéder en mode utilisateur à une zone mé- moire réservée au mode superviseur ou bien tenter d'exécuter une instruction privilégiée (donc utilisable uniquement en supervi- seur) provoquera une erreur 'violation de privilège'. Connaître ces différents types d'erreurs est très important. En effet la phase de mise au point est généralement longue en assem- bleur, surtout au début. De très nombreuses erreurs peuvent surve- nir, dont la cause est parfois juste sous notre nez. Le type même de l'erreur, si celle-ci est bien comprise, peut souvent suffire à orienter les recherches plus précisément et ainsi raccourcir le temps (pénible) de recherche du grain de sable qui bloque tout! Tous les vecteurs constituant le premier kilo de mémoire ayant pour but de dérouter le programme principal vers une routine ex- ceptionnelle, sont appelés 'vecteurs d'exceptions'. Les vecteurs restants seront étudiés dans les séries suivantes, au fur et à mesure des besoins. Chaque chose en son temps! Pour aujourd'hui nous nous arrêterons là. Ce fut court mais le prochain chapitre sera consacré à la pile et sera bien gros! La pile est un problème aussi simple que les autres, qui demande simplement de l'attention. Après avoir étudié ce qu'est la pile, il ne nous restera plus qu'un demi-cours avant d'aborder nos pre- miers 'gros' programmes! Courage! mais surtout prenez votre temps! Relisez les cours précé- dent même si tout vous paraît compris. Plus nous avancerons plus le nombre de petites choses augmentera et moins il y aura de place pour la plus petite incompréhension.
Back to ASM_Tutorial