Pl2 INTER 2.DOC/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
(Replacing content with updated version)
mNo edit summary
 
Line 17: Line 17:
 
($FFFA1D)
 
($FFFA1D)
   
Les bits 0 à 2 sont r‚serv‚s au TIMER C
+
Les bits 0 à 2 sont réservés au TIMER C
Les bits 4 à 6 sont r‚serv‚s au TIMER D
+
Les bits 4 à 6 sont réservés au TIMER D
   
 
Voir le tableau de TACR pour la signification des bits...
 
Voir le tableau de TACR pour la signification des bits...
   
 
Je vous rappelle que nous n'utiliserons pas ces TIMERS car
 
Je vous rappelle que nous n'utiliserons pas ces TIMERS car
ils sont d‚jà utilis‚s par le système à l'origine.
+
ils sont déjà utilisés par le système à l'origine.
   
 
16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F):
 
16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F):
Line 31: Line 31:
 
20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27):
 
20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27):
   
Des registres qui ne sont pas utilis‚s par les TIMERS, et ils
+
Des registres qui ne sont pas utilisés par les TIMERS, et ils
se contentent de controler les ‚missions de caractères...
+
se contentent de controler les émissions de caractères...
   
   
   
   
Maintenant que vous ètes familiaris‚ avec les diff‚rents registres
+
Maintenant que vous ètes familiarisé avec les différents registres
du MFP 68901, vous pourrez commencer à r‚aliser vos premiers pro-
+
du MFP 68901, vous pourrez commencer à réaliser vos premiers pro-
 
grammes sous interruption.
 
grammes sous interruption.
   
 
Pour modifier un registre du MFP, il suffit de connaitre l'adresse
 
Pour modifier un registre du MFP, il suffit de connaitre l'adresse
du registre et d'y d‚poser les donn‚es qu'il faut.
+
du registre et d'y déposer les données qu'il faut.
   
 
- Voilà comment il faut procèder pour mettre une routine sous
 
- Voilà comment il faut procèder pour mettre une routine sous
Line 50: Line 50:
 
* On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre
 
* On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre
 
du MFP.
 
du MFP.
* On met à 0 le bit correspondant au TIMER utilis‚ dans le registre
+
* On met à 0 le bit correspondant au TIMER utilisé dans le registre
 
IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination)
 
IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination)
* On met à 0 le bit correspondant au TIMER utilis‚ dans le registre
+
* On met à 0 le bit correspondant au TIMER utilisé dans le registre
 
ISR.
 
ISR.
* On met à 0 le bit correspondant au TIMER utilis‚ dans le registre
+
* On met à 0 le bit correspondant au TIMER utilisé dans le registre
 
IPR.
 
IPR.
* On met à 0 le bit correspondant au TIMER utilis‚ dans le registre
+
* On met à 0 le bit correspondant au TIMER utilisé dans le registre
 
IER.
 
IER.
 
* On installe notre routine:
 
* On installe notre routine:
   
.Soit en d‚posant l'adresse de notre routine directement dans le
+
.Soit en déposant l'adresse de notre routine directement dans le
VECTEUR D'EXCEPTION correspondant au TIMER utilis‚:
+
VECTEUR D'EXCEPTION correspondant au TIMER utilisé:
 
$134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C,
 
$134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C,
 
$110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur)
 
$110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur)
Line 67: Line 67:
   
 
Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE
 
Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE
du TIMER en d‚posant les nouvelles valeurs aux adresses de ceux-ci.
+
du TIMER en déposant les nouvelles valeurs aux adresses de ceux-ci.
 
(Avec MOVE.B #VALEUR,$adresse)
 
(Avec MOVE.B #VALEUR,$adresse)
 
(Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les
 
(Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les
Line 92: Line 92:
 
 
 
----------------------------------------------------------------------
 
----------------------------------------------------------------------
Et voilà, ma routine est install‚e !!!
+
Et voilà, ma routine est installée !!!
   
 
 
Line 98: Line 98:
 
La routine elle même:
 
La routine elle même:
 
---------------------
 
---------------------
La routine à mettre sous interruption devra pouvoir s'ex‚cuter
+
La routine à mettre sous interruption devra pouvoir s'exécuter
 
entièrement avant l'appel suivant du TIMER car sinon attention
 
entièrement avant l'appel suivant du TIMER car sinon attention
 
au plantage !!
 
au plantage !!
 
Celle-ci ne devra donc pas être trop longue:
 
Celle-ci ne devra donc pas être trop longue:
 
On ne pourra pas par exemple mettre une routine qui demande 0,5
 
On ne pourra pas par exemple mettre une routine qui demande 0,5
secondes pour s'ex‚cuter entièrement sous interruption et règler
+
secondes pour s'exécuter entièrement sous interruption et règler
sa fr‚quence d'appel à 0,007 secondes ...
+
sa fréquence d'appel à 0,007 secondes ...
 
 
 
Votre routine sous interruption devra toujours se terminer par:
 
Votre routine sous interruption devra toujours se terminer par:
   
.Une mise à 0 du bit correspondant au TIMER utilis‚ du registre ISR
+
.Une mise à 0 du bit correspondant au TIMER utilisé du registre ISR
 
,pour indiquer au MFP que la routine se termine.
 
,pour indiquer au MFP que la routine se termine.
   
Line 121: Line 121:
 
 
   
De plus, comme votre routine s'ex‚cute à intervals r‚guliers, je vous
+
De plus, comme votre routine s'exécute à intervals réguliers, je vous
d‚conseille fortement d'utiliser les registre DN ou AN (mème SP) car
+
déconseille fortement d'utiliser les registre DN ou AN (mème SP) car
 
ceci peut provoquer des changments brusques au niveaux des registres
 
ceci peut provoquer des changments brusques au niveaux des registres
conscern‚s dans la programme principal.(Le programme sous interruption
+
conscernés dans la programme principal.(Le programme sous interruption
s'ex‚cutant sans interrompre le programme principal, nous en verrons
+
s'exécutant sans interrompre le programme principal, nous en verrons
 
une très bonne illustration dans un prochain exercice)
 
une très bonne illustration dans un prochain exercice)
   
 
Le programme sous interruption pourra toutefois faire appel à des
 
Le programme sous interruption pourra toutefois faire appel à des
adresses du segment DATA ou BSS pour lire ou d‚poser des valeurs...
+
adresses du segment DATA ou BSS pour lire ou déposer des valeurs...
   
 
 
 
 
Voilà pour la th‚orie, je vous conseille fortement de relire tout
+
Voilà pour la théorie, je vous conseille fortement de relire tout
 
le chapitre à fond car maintenant viennent les EXERCICES ...
 
le chapitre à fond car maintenant viennent les EXERCICES ...
   

Latest revision as of 21:02, 17 December 2023



  suite sur les INTERRUPTIONS ...
  ---------------------------



  14) TBCR :Identique à TACR, sauf que ce regsitre controle le TIMER B
            ($FFFA1B)

 
  15) TCDCR:Vecteur bit ayant le mème role que TACR et TBCR pour les
            TIMER C et TIMER D, mais ici seul le  DELAY MODE est dis-
            ponible.
            ($FFFA1D)

            Les bits 0 à 2 sont réservés au TIMER C
            Les bits 4 à 6 sont réservés au TIMER D

            Voir le tableau de TACR pour la signification des bits...

            Je vous rappelle que nous n'utiliserons pas ces TIMERS car
            ils sont déjà utilisés par le système à l'origine.

  16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F):

      Voilà les registres de DONNEES des 4 TIMERS ...

  20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27):

      Des registres qui ne sont pas utilisés par les TIMERS, et ils 
      se contentent de controler les émissions de caractères...




  Maintenant que vous ètes familiarisé avec les différents registres
  du MFP 68901, vous pourrez commencer à réaliser vos premiers pro-
  grammes sous interruption.

  Pour modifier un registre du MFP, il suffit de connaitre l'adresse
  du registre et d'y déposer les données qu'il faut.

 - Voilà comment il faut procèder pour mettre une routine sous 
   interruption: 
   
  --------------------------------------------------------------------        
  * On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre
    du MFP.
  * On met à 0 le bit correspondant au TIMER utilisé dans le registre
    IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination)
  * On met à 0 le bit correspondant au TIMER utilisé dans le registre
    ISR.
  * On met à 0 le bit correspondant au TIMER utilisé dans le registre
    IPR.
  * On met à 0 le bit correspondant au TIMER utilisé dans le registre
    IER.         
  * On installe notre routine:

   .Soit en déposant l'adresse de notre routine directement dans le
    VECTEUR D'EXCEPTION correspondant au TIMER utilisé:
    $134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C,
    $110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur)
    (Voir le Tableau des vecteurs d'exception)

    Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE
    du TIMER en déposant les nouvelles valeurs aux adresses de ceux-ci.
    (Avec MOVE.B  #VALEUR,$adresse) 
    (Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les
    adresses des REGISTRES TADR,TBDR,TCDR,TDDR (DONNEE) )
    
    
   .Soit en appelant une fonction de l'XBIOS qui le fait à notre place:
    C'est la fonction XBTIMER de l'XBIOS.
  
    Les paramètres à passer sont:

    L-M:Adresse de la routine    
    MOT:Valeur du registre de DONNEE
    MOT:Valeur de registre de CONTROLE
    MOT:Le code du TIMER (0=TIMER A,1=TIMER B,2=TIMER C,3=TIMER D)
    MOT:Code de la fonction = $1F
    
  
   Il faudra encore:

  .Mettre le bit du registre IER correspondant à notre TIMER à 1 (Pour
   valider notre routine sous interruption) 
  .Mettre le bit du registre IMR correspondant à notre TIMER à 1 
   
  ----------------------------------------------------------------------
   Et voilà, ma routine est installée !!!

   

   La routine elle même:
   ---------------------
   La routine à mettre sous interruption devra pouvoir s'exécuter 
   entièrement avant l'appel suivant du TIMER car sinon attention
   au plantage !!
   Celle-ci ne devra donc pas être trop longue:
   On ne pourra pas par exemple mettre une routine qui demande 0,5 
   secondes pour s'exécuter entièrement sous interruption et règler
   sa fréquence d'appel à 0,007 secondes ...
 
   Votre routine sous interruption devra toujours se terminer par:

    .Une mise à 0 du bit correspondant au TIMER utilisé du registre ISR
     ,pour indiquer au MFP que la routine se termine.

               --------------------------------
     Avec      BCLR  #5,$FFFA07 pour le TIMER A        (Sur ISRA)
     ou        BLCR  #0,$FFFA11 pour le TIMER B        (Sur ISRB)

               --------------------------------

    .Un RTE (Return From Exception)  
        ---
  

  De plus, comme votre routine s'exécute à intervals réguliers, je vous
  déconseille fortement d'utiliser les registre DN ou AN (mème SP) car
  ceci peut provoquer des changments brusques au niveaux des registres
  conscernés dans la programme principal.(Le programme sous interruption
  s'exécutant sans interrompre le programme principal, nous en verrons 
  une très bonne illustration dans un prochain exercice)

  Le programme sous interruption pourra toutefois faire appel à des
  adresses du segment DATA ou BSS pour lire ou déposer des valeurs...

  
  
  Voilà pour la théorie, je vous conseille fortement de relire tout
  le chapitre à fond car maintenant viennent les EXERCICES ...


          
                              -----------------

  PIECHOCKI  Laurent
  8,Impasse Bellevue            Suite dans le fichier:EXOS_4.DOC 
  57980  TENTELING                                    ----------





   

Back to ASM_Tutorial