COURS 5.TXT/fr

From Atari Wiki
Revision as of 14:08, 23 November 2023 by Exxos (talk | contribs)
Jump to navigation Jump to search
   ******************************************************************
   *                                                                *
   *             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