<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=COURS_5.TXT</id>
	<title>COURS 5.TXT - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=COURS_5.TXT"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=COURS_5.TXT&amp;action=history"/>
	<updated>2026-07-27T01:36:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=COURS_5.TXT&amp;diff=11529&amp;oldid=prev</id>
		<title>&gt;Zorro 2: Created page with &quot;&lt;pre&gt;    ******************************************************************    *                                                                *    *             COURS D'ASSEMBL...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=COURS_5.TXT&amp;diff=11529&amp;oldid=prev"/>
		<updated>2016-12-22T14:33:49Z</updated>

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