COURS 5.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
(Created page with "<pre> ****************************************************************** * * * COURS D'ASSEMBL...") Â |
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 donn� que nous avons parfaitement compris ce qui se passait |
||
− | 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-�-dire tout le syst�me d'adresse fixe � laquelle on trouve |
||
− | 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- |
||
− | 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 achet� une machine, c'est quand m�me pour pouvoir l'uti- |
||
− | 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 � m�langer ATARI ST et 68000 MOTOROLA. Gr�ce � l'�norme |
||
− | 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 � tours de bras. L�, la diff�renciation Superviseur/Utili- |
||
− | 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'unit� centrale, les personnes utilisant les terminaux n'�tant |
||
− | 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'�tudier les 3 bits restant du SR (I2, I1, I0), il faut sa- |
||
− | 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 |
||
− | pr‚c‚demment le fonctionnement li‚ au bit T (trace). Lorsque ce |
||
+ | bit est positionn�, le programme principal est interrompu, au pro- |
||
− | 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 |
||
− | ‚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 d�tecte l'interruption, j'arr�te mon travail et je d�- |
||
− | 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 |
||
− | 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 d�croche, mais en cours de conversation, on sonne � la porte. |
||
− | Je d‚croche, mais en cours de conversation, on sonne … la porte. |
||
+ | L� intervient le principe de la priorit� d'interruption. Si la |
||
− | L… intervient le principe de la priorit‚ d'interruption. Si la |
||
+ | porte d'entr�e � une priorit� sup�rieure � celle du t�l�phone, |
||
− | 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�- |
||
− | 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- |
||
− | 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 |
||
− | 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. |
||
− | … 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 |
||
− | 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- |
||
− | 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 d�tourner vers la routine. Une fois celle-ci termin�e, il re- |
||
− | 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- |
||
− | trouv‚ la routine en interruption ? Et bien simplement en utili- |
||
+ | sant le m�me principe que pour le mode Trace. Nous avons vu que |
||
− | 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 �tant l'adresse de la routine � ex�cuter. Si l'interruption |
||
− | 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 �vident que c'est au programmeur de placer ces long mots |
||
− | 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 |
||
− | … 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 |
||
− | 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 d�j� �tudi�s. Toutes ces adresses ont des num�ros d'or- |
||
− | 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 |
||
− | 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 d |
+ | 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�- |
||
− | 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 |
||
− | 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 |
||
− | 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 (p�nible) de recherche du grain de sable qui bloque tout! |
||
− | 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 � mesure des besoins. Chaque chose en son temps! |
||
− | 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 m�me si tout vous para�t compris. Plus nous avancerons plus |
||
− | 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 15:08, 23 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