Pl2 INTERRUP.DOC/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
m (Olivier.jan moved page Pl2 INTERRUP.DOC to Pl2 INTERRUP.DOC/fr: Renaming for language version)
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
  +
{{Languages|Pl2 INTERRUP.DOC}}
 
<pre>
 
<pre>
   
Line 10: Line 11:
   
 
Avant de commencer à vous parler des programmes sous interruption, nous
 
Avant de commencer à vous parler des programmes sous interruption, nous
allons ‚tudier:
+
allons étudier:
   
 
*** LES VARIABLES SYSTEME ***
 
*** LES VARIABLES SYSTEME ***
Line 16: Line 17:
   
 
- Les VARIABLES SYSTEME sont diverses informations qui nous sont dispo-
 
- Les VARIABLES SYSTEME sont diverses informations qui nous sont dispo-
nibles en lecture et en ‚criture et qui se situent au d‚but du second
+
nibles en lecture et en écriture et qui se situent au début du second
 
KO de la RAM de notre ST. (L'emplacement en RAM varie si vous possèdez
 
KO de la RAM de notre ST. (L'emplacement en RAM varie si vous possèdez
 
un MEGA ST au un ST dont le système d'exploitation (le TOS) n'est pas
 
un MEGA ST au un ST dont le système d'exploitation (le TOS) n'est pas
en ROM, mais il ne varie pas entre les diff‚rentes versions de ROM)
+
en ROM, mais il ne varie pas entre les différentes versions de ROM)
 
 
 
- Pour atteindre ces variables, il faudra d'abord se positonner en MODE
 
- Pour atteindre ces variables, il faudra d'abord se positonner en MODE
Line 28: Line 29:
 
influences grandement le fonctionnement du ST:
 
influences grandement le fonctionnement du ST:
   
Voilà les adresses ou se situent ces diff‚rentes variables ainsi que
+
Voilà les adresses ou se situent ces différentes variables ainsi que
leurs noms , leurs tailles et leurs utilit‚:
+
leurs noms , leurs tailles et leurs utilité:
   
Les noms ci-dessous sont les noms standard donn‚s par ATARI à ces
+
Les noms ci-dessous sont les noms standard donnés par ATARI à ces
variables ,les adresses qui leur sont attribu‚es sont uniquement
+
variables ,les adresses qui leur sont attribuées sont uniquement
 
valables pour les ST avec le TOS en RAM.
 
valables pour les ST avec le TOS en RAM.
   
Line 42: Line 43:
 
$FCA648 ( Je donne les adresses valables
 
$FCA648 ( Je donne les adresses valables
 
pour les ST avec TOS en ROM ) et qui per-
 
pour les ST avec TOS en ROM ) et qui per-
met l'ex‚cution des fonctions p‚riodiques
+
met l'exécution des fonctions périodiques
 
du GEM.
 
du GEM.
   
 
. $404 evt_critic (.W) : C'est un vecteur qui pointe sur l'adresse
 
. $404 evt_critic (.W) : C'est un vecteur qui pointe sur l'adresse
$2A156 et qui est utilis‚ quand le système
+
$2A156 et qui est utilisé quand le système
 
d'exploitation doit traiter une erreur pro
 
d'exploitation doit traiter une erreur pro
 
venant du lecteur de disquette. ( Lecteur
 
venant du lecteur de disquette. ( Lecteur
ne r‚pond pas... )
+
ne répond pas... )
   
. $408 evt_term (.L) : C'est un vecteur qui est utilis‚ par les
+
. $408 evt_term (.L) : C'est un vecteur qui est utilisé par les
 
fonctions de type _TERM du Gemdos qui ser-
 
fonctions de type _TERM du Gemdos qui ser-
vent à finir l'ex‚cution d'un programme.
+
vent à finir l'exécution d'un programme.
   
. $40C evt_xtra 5*(.L) : 5 L-M y sont r‚serv‚s pour des
+
. $40C evt_xtra 5*(.L) : 5 L-M y sont réservés pour des
 
applications futures...
 
applications futures...
   
. $420 memvalid (.L) : S‚maphore pour une configuration de
+
. $420 memvalid (.L) : Sémaphore pour une configuration de
controleur de m‚moire valide.
+
controleur de mémoire valide.
   
 
. $424 memctrl (.B) : Si memctrl=4 l'ordi est un 520 ST
 
. $424 memctrl (.B) : Si memctrl=4 l'ordi est un 520 ST
Line 67: Line 68:
   
 
. $426 resvalid (.L) : Si il vaut $31415926 (soit PI sans la vir-
 
. $426 resvalid (.L) : Si il vaut $31415926 (soit PI sans la vir-
gule) l'adresse point‚e par resvector sera
+
gule) l'adresse pointée par resvector sera
utilis‚e comme vecteur lors d'un RESET.
+
utilisée comme vecteur lors d'un RESET.
   
. $42A resvector (.L) : Le vecteur utilis‚ par resvalid lors d'un
+
. $42A resvector (.L) : Le vecteur utilisé par resvalid lors d'un
 
RESET.
 
RESET.
   
. $42E phystop (.L) : Adresse de la fin de la m‚moire vid‚o
+
. $42E phystop (.L) : Adresse de la fin de la mémoire vidéo
 
physique.
 
physique.
   
. $432 _membot (.L) : Adresse du d‚but de la zone de la m‚moire
+
. $432 _membot (.L) : Adresse du début de la zone de la mémoire
r‚serv‚e pour le programmeur.(voir organi-
+
réservée pour le programmeur.(voir organi-
sation de la m‚moire plus loin)
+
sation de la mémoire plus loin)
   
 
. $436 _memtop (.L) : Adresse de la fin de cette zone ( $78000
 
. $436 _memtop (.L) : Adresse de la fin de cette zone ( $78000
Line 86: Line 87:
 
memvalid
 
memvalid
   
. $43E flock (.L) : Si flock est diff‚rent de 0, la VBL est
+
. $43E flock (.L) : Si flock est différent de 0, la VBL est
arrêt‚e (Voir plus loin pour VBL)
+
arrêtée (Voir plus loin pour VBL)
   
. $440 seekrate (.W) : Permet de selectionner la vitesse de d‚-
+
. $440 seekrate (.W) : Permet de selectionner la vitesse de -
 
placement de la tête de lecture du lecteur
 
placement de la tête de lecture du lecteur
 
de disquette d'une piste :
 
de disquette d'une piste :
 
0=6 ms,1=12 ms,2=2 ms,3=3 ms
 
0=6 ms,1=12 ms,2=2 ms,3=3 ms
   
. $442 _timer_ms (.W) : Temps ‚coul‚ entre 2 appels du timer, soit
+
. $442 _timer_ms (.W) : Temps écoulé entre 2 appels du timer, soit
 
la vitesse des battements de l'horloge in-
 
la vitesse des battements de l'horloge in-
 
terne. (en millisecondes)
 
terne. (en millisecondes)
Line 100: Line 101:
 
(Voir plus loin pour les TIMERS)
 
(Voir plus loin pour les TIMERS)
   
. $444 _fverify (.W) : Si _fverify est diff‚rent de 0, il y a un
+
. $444 _fverify (.W) : Si _fverify est différent de 0, il y a un
test d'‚criture qui est effectu‚ par le
+
test d'écriture qui est effectué par le
lecteur de disquette:A chaque ‚criture, il
+
lecteur de disquette:A chaque écriture, il
relit l'octet ‚cris et le compare a l'oc-
+
relit l'octet écris et le compare a l'oc-
tet à ‚crire.
+
tet à écrire.
 
En cas d'erreur, on obtient un code
 
En cas d'erreur, on obtient un code
 
d'erreur
 
d'erreur
 
 
. $446 _bootdev (.W) : Contient le num‚ro du lecteur de disquette
+
. $446 _bootdev (.W) : Contient le numéro du lecteur de disquette
qui a charg‚ le système d'‚xploitation.
+
qui a chargé le système d'éxploitation.
   
 
. $448 palmode (.W) : Drapeau qui indique soit que le système se
 
. $448 palmode (.W) : Drapeau qui indique soit que le système se
trouve en mode vid‚o 50 Hz (PAL) si palmo-
+
trouve en mode vidéo 50 Hz (PAL) si palmo-
de est diff‚rent de 0 soit qu'on est en
+
de est différent de 0 soit qu'on est en
mode vid‚o 60 Hz (Standard NTSC)
+
mode vidéo 60 Hz (Standard NTSC)
 
 
. $44A defshiftmd (.W) : Contient la r‚solution de l'‚cran dans la-
+
. $44A defshiftmd (.W) : Contient la résolution de l'écran dans la-
quelle on se trouve si on passe d'un ‚cran
+
quelle on se trouve si on passe d'un écran
Haute r‚solution à un ‚cran Couleur.
+
Haute résolution à un écran Couleur.
 
(0=basse,1=moyenne)
 
(0=basse,1=moyenne)
 
 
. $44C sshiftmd (.W) : Contient la r‚solution de l'‚cran dans la-
+
. $44C sshiftmd (.W) : Contient la résolution de l'écran dans la-
 
quelle on se trouve:0=BASSE,1=MOYENNE,
 
quelle on se trouve:0=BASSE,1=MOYENNE,
 
2=HAUTE
 
2=HAUTE
 
 
. $44E _v_bas_ad (.L) : Contient l'adresse du d‚but de la m‚moire
+
. $44E _v_bas_ad (.L) : Contient l'adresse du début de la mémoire
vid‚o logique.C'est obligatoirement un
+
vidéo logique.C'est obligatoirement un
 
multiple de 256
 
multiple de 256
   
 
. $452 vblsem (.W) : Si cette valeur est nulle, la VBL n'est
 
. $452 vblsem (.W) : Si cette valeur est nulle, la VBL n'est
plus ex‚cut‚e:Voir plus loin pour la VBL
+
plus exécutée:Voir plus loin pour la VBL
   
. $454 nvbls (.W) : Contient le nombre de routines ex‚cut‚es
+
. $454 nvbls (.W) : Contient le nombre de routines exécutées
 
lors du VBL (Logiquement 8)
 
lors du VBL (Logiquement 8)
   
 
. $456 _vblqueue (.L) : Vecteur qui pointe sur les adresses des
 
. $456 _vblqueue (.L) : Vecteur qui pointe sur les adresses des
routines ex‚cut‚es lors du VBL
+
routines exécutées lors du VBL
   
. $45A colorptr (.L) : Si ce L-M est diff‚rent de 0,il est inter-
+
. $45A colorptr (.L) : Si ce L-M est différent de 0,il est inter-
pr‚t‚ comme l'adresse d'une nouvelle
+
prété comme l'adresse d'une nouvelle
 
palette de couleurs.
 
palette de couleurs.
   
. $45E screenpt (.L) : Si ce L-M n'est pas nul, il sera interpr‚-
+
. $45E screenpt (.L) : Si ce L-M n'est pas nul, il sera interpré-
t‚ comme l'adresse de la nouvelle m‚moire
+
comme l'adresse de la nouvelle mémoire
vid‚o physique.
+
vidéo physique.
   
 
. $462 _vbclock (.L) : C'est le compteur d'interruptions de la
 
. $462 _vbclock (.L) : C'est le compteur d'interruptions de la
Line 150: Line 151:
   
 
. $466 _frclock (.L) : Contient le nombre de routines VBL qui ne
 
. $466 _frclock (.L) : Contient le nombre de routines VBL qui ne
sont pas bloqu‚es par vblsem.
+
sont pas bloquées par vblsem.
 
Ce nombre sert aussi à la fonction RANDOM
 
Ce nombre sert aussi à la fonction RANDOM
de l'XBIOS pour obtenir un nombre al‚atoi-
+
de l'XBIOS pour obtenir un nombre aléatoi-
 
re.
 
re.
   
Line 158: Line 159:
 
tialisation du disque dur en $FC0D60
 
tialisation du disque dur en $FC0D60
   
. $46E swv_vec (.L) : Vecteur qui pointe sur la routine ex‚cut‚e
+
. $46E swv_vec (.L) : Vecteur qui pointe sur la routine exécutée
lorsqu'on d‚connecte ou connecte un moni-
+
lorsqu'on déconnecte ou connecte un moni-
 
teur monochrome (en $FC0020).
 
teur monochrome (en $FC0020).
 
 
Line 165: Line 166:
 
(Getbpb)
 
(Getbpb)
   
. $476 hdv_rw (.L) : Vecteur qui pointe sur les routines d'‚cr-
+
. $476 hdv_rw (.L) : Vecteur qui pointe sur les routines d'écr-
iture et de lecture de donn‚es sur disque
+
iture et de lecture de données sur disque
 
dur.
 
dur.
   
Line 176: Line 177:
 
voir MEDIACH de code $4 dans le BIOS)
 
voir MEDIACH de code $4 dans le BIOS)
 
 
. $482 _cmdload (.W) : Si cette variable est diff‚rente de 0, le
+
. $482 _cmdload (.W) : Si cette variable est différente de 0, le
programme nomm‚ 'COMMAND.PRG' sera charg‚
+
programme nommé 'COMMAND.PRG' sera chargé
 
dès que le système d'exploitation est mis
 
dès que le système d'exploitation est mis
 
en place.Cette variable devra ètre modifi-
 
en place.Cette variable devra ètre modifi-
‚e sur le BOOT SECTOR.
+
ée sur le BOOT SECTOR.
 
 
 
. $484 conterm (.B) : C'est un vecteur bit dont les 4 premiers
 
. $484 conterm (.B) : C'est un vecteur bit dont les 4 premiers
bits sont utilis‚s.Si un de ces bits est
+
bits sont utilisés.Si un de ces bits est
actif,la fonction est utils‚e, sinon elle
+
actif,la fonction est utilsée, sinon elle
est d‚connect‚e.
+
est déconnectée.
Bit nr° 0 :BIP à chaque touche enfonc‚e
+
Bit nr° 0 :BIP à chaque touche enfoncée
Bit nr° 1 :R‚p‚tition au clavier
+
Bit nr° 1 :Répétition au clavier
 
Bit nr° 2 :Control+G donne un BIP
 
Bit nr° 2 :Control+G donne un BIP
 
Bit nr° 3 :Permet de règler la fonction
 
Bit nr° 3 :Permet de règler la fonction
 
BCONIN du BIOS.
 
BCONIN du BIOS.
 
 
. $492 themd2 (.L) : Adresse du d‚but de la m‚moire disponible
+
. $492 themd2 (.L) : Adresse du début de la mémoire disponible
 
 
. $496 themd3 (.L) : Adresse de la fin de la m‚moire disponible
+
. $496 themd3 (.L) : Adresse de la fin de la mémoire disponible
 
 
 
. $4A2 savptr (.L) : Adresse ($90C) qui pointe une zone de la
 
. $4A2 savptr (.L) : Adresse ($90C) qui pointe une zone de la
m‚moire utilis‚e pour la sauvegarde des
+
mémoire utilisée pour la sauvegarde des
 
registres par le PROCESSEUR après un appel
 
registres par le PROCESSEUR après un appel
 
à une fonction BIOS ou XBIOS
 
à une fonction BIOS ou XBIOS
   
 
. $4A6 _nflops (.W) : Contient le nombre de lecteurs de
 
. $4A6 _nflops (.W) : Contient le nombre de lecteurs de
disquette connect‚s.
+
disquette connectés.
   
 
. $4A8 con_state (.L) : Vecteur pointant sur les routines de code
 
. $4A8 con_state (.L) : Vecteur pointant sur les routines de code
 
('ESC' + 'valeur') pour les effets des
 
('ESC' + 'valeur') pour les effets des
‚ditions graphiques de texte.
+
éditions graphiques de texte.
   
. $4AC save_row (.W) : M‚moire temporaire de la position du cur-
+
. $4AC save_row (.W) : Mémoire temporaire de la position du cur-
 
seur du texte pour la fonction ESC+'Y'
 
seur du texte pour la fonction ESC+'Y'
   
. $4AE sav_context (.L) : Adresse pointant sur une m‚moire tempo-
+
. $4AE sav_context (.L) : Adresse pointant sur une mémoire tempo-
raire utilis‚e en cas de traitement d'une
+
raire utilisée en cas de traitement d'une
proc‚dure d'exeption.
+
procédure d'exeption.
 
 
. $4BA _hz_200 (.L) : Le timer du système qui est incr‚ment‚
+
. $4BA _hz_200 (.L) : Le timer du système qui est incrémenté
 
200 fois par seconde.
 
200 fois par seconde.
   
. $4BC _the_env (.L) : La chaine de caractère prise par d‚faut ,
+
. $4BC _the_env (.L) : La chaine de caractère prise par défaut ,
positionn‚e sur 4 octets nuls...
+
positionnée sur 4 octets nuls...
 
 
. $4C2 _drvbits (.L) : Vecteur bit repr‚sentant suivant le nr° du
+
. $4C2 _drvbits (.L) : Vecteur bit représentant suivant le nr° du
bits actif le ou les drives connect‚s.
+
bits actif le ou les drives connectés.
 
 
. $4C6 _dskbufp (.L) : Tampon de 1 KO utilis‚ par les op‚rations
+
. $4C6 _dskbufp (.L) : Tampon de 1 KO utilisé par les opérations
 
de disk.
 
de disk.
 
 
 
. $4CE _vbl_list 8*(.L) : Vecteur qui pointe sur les adresses des 8
 
. $4CE _vbl_list 8*(.L) : Vecteur qui pointe sur les adresses des 8
routines qui sont ex‚cut‚es dans la VBL.
+
routines qui sont exécutées dans la VBL.
   
. $4EE _dumpflg 8*(.L) : S‚maphore utilis‚e par la fonction de
+
. $4EE _dumpflg 8*(.L) : Sémaphore utilisée par la fonction de
Hardcopy activ‚e par l'appui de Alternate
+
Hardcopy activée par l'appui de Alternate
 
et Help.
 
et Help.
   
. $4F2 _sysbase (.L) : Adresse du d‚but du système d'exploitation
+
. $4F2 _sysbase (.L) : Adresse du début du système d'exploitation
 
($FC0000 sur les ST avec TOS en ROM)
 
($FC0000 sur les ST avec TOS en ROM)
   
Line 240: Line 241:
 
tion ($A100 sur les ST avec TOS en ROM)
 
tion ($A100 sur les ST avec TOS en ROM)
   
. $4FE exec_os (.L) : Adresse du d‚but de l'AES ($FD91D0)
+
. $4FE exec_os (.L) : Adresse du début de l'AES ($FD91D0)
   
 
. $502 dump_vec (.L) : Vecteur qui pointe sur la routine de
 
. $502 dump_vec (.L) : Vecteur qui pointe sur la routine de
 
hardcopy de la fonction 20 du XBIOS.
 
hardcopy de la fonction 20 du XBIOS.
   
. $506 prt_stat (.L) : S‚maphore pour l'‚tat de l'imprimante
+
. $506 prt_stat (.L) : Sémaphore pour l'état de l'imprimante
   
. $50A prt_vec (.L) : Vecteur pour les fonctions d'‚dition sur
+
. $50A prt_vec (.L) : Vecteur pour les fonctions d'édition sur
 
imprimante
 
imprimante
 
 
. $50E aux_sta (.L) : Vecteur de recherche d'‚tat utilis‚ par
+
. $50E aux_sta (.L) : Vecteur de recherche d'état utilisé par
 
une fonction de Hardcopy
 
une fonction de Hardcopy
   
. $512 aux_vec (.L) : Vecteur de sortie utilis‚ par une fonction
+
. $512 aux_vec (.L) : Vecteur de sortie utilisé par une fonction
 
de Hardcopy
 
de Hardcopy
 
 
   
 
Voilà la liste de ces variables systèmes, pour les modifier, il suffira
 
Voilà la liste de ces variables systèmes, pour les modifier, il suffira
donc de se mettre en MODE SUPERVISEUR et d'y d‚poser la valeur que vous
+
donc de se mettre en MODE SUPERVISEUR et d'y déposer la valeur que vous
voulez...(Vous pouvez bien sur aussi vous contenter de lire les donn‚es
+
voulez...(Vous pouvez bien sur aussi vous contenter de lire les données
qui y sont d‚pos‚es...)
+
qui y sont déposées...)
   
   
Ainsi, si vous voulez connaitre la r‚solution:
+
Ainsi, si vous voulez connaitre la résolution:
Vous ‚crirez:
+
Vous écrirez:
   
 
* ;LECTURE d'une VARIABLE SYSTEME:
 
* ;LECTURE d'une VARIABLE SYSTEME:
Line 271: Line 272:
 
move.w $44C,d0 ;$44C=sshiftmd
 
move.w $44C,d0 ;$44C=sshiftmd
   
et Vous obtenez la r‚solution de l'‚cran dans d0.W !!!
+
et Vous obtenez la résolution de l'écran dans d0.W !!!
   
   
Si vous voulez changer la palette des couleurs, vous ‚crirez:
+
Si vous voulez changer la palette des couleurs, vous écrirez:
   
 
* ;ECRITURE sur une VARIABLE SYSTEME:
 
* ;ECRITURE sur une VARIABLE SYSTEME:
Line 289: Line 290:
   
 
 
Cette m‚thode s'applique à toutes les variables système...
+
Cette méthode s'applique à toutes les variables système...
   
Ces variables pr‚sentent un très grand int‚rêt pour nous car grƒce
+
Ces variables présentent un très grand intérêt pour nous car grƒce
 
à elles, il n'est plus utile d'appeller certaines fonctions du BIOS,
 
à elles, il n'est plus utile d'appeller certaines fonctions du BIOS,
 
de l'XBIOS ou du GEMDOS pour obtenir des effets graphiques de base
 
de l'XBIOS ou du GEMDOS pour obtenir des effets graphiques de base
comme le changement de la palette,obtenir la r‚solution... :
+
comme le changement de la palette,obtenir la résolution... :
 
Voilà qui nous sera vraiment très utile car ces variables systèmes se
 
Voilà qui nous sera vraiment très utile car ces variables systèmes se
laissent très facilement modifier ou lire.Mais le plus grand int‚rêt
+
laissent très facilement modifier ou lire.Mais le plus grand intérêt
qu'on peut en tirer,c'est que modifer une variable système ne n‚cessi-
+
qu'on peut en tirer,c'est que modifer une variable système ne nécessi-
 
te pas l'utilisation de registres (SP ou des valeurs en RETOUR) ,con-
 
te pas l'utilisation de registres (SP ou des valeurs en RETOUR) ,con-
 
trairement aux fonction de BIOS,XBIOS ou GEMDOS...
 
trairement aux fonction de BIOS,XBIOS ou GEMDOS...
Line 309: Line 310:
 
----------------------------------------
 
----------------------------------------
   
- Un programme sous interruption est un programme qui doit ètre ex‚cut‚
+
- Un programme sous interruption est un programme qui doit ètre exécuté
p‚riodiquement, à intervals r‚guliers.
+
périodiquement, à intervals réguliers.
 
Un tel programme sera source d'un TRAITEMENT D'EXCEPTION:
 
Un tel programme sera source d'un TRAITEMENT D'EXCEPTION:
Il sera ex‚cut‚ si une certaine condition est v‚rifi‚e ( En pratique:
+
Il sera exécuté si une certaine condition est vérifiée ( En pratique:
après l'‚coulement d'un certain temps de latence ) et sera interrompu
+
après l'écoulement d'un certain temps de latence ) et sera interrompu
( Dès la rencontre d'instructions pr‚vues à cet effet ) pour n'être à
+
( Dès la rencontre d'instructions prévues à cet effet ) pour n'être à
nouveau appel‚ que lorsque la condition se retrouvera r‚alis‚e.
+
nouveau appelé que lorsque la condition se retrouvera réalisée.
   
 
Un programme sous-interruption n'arrète aucune fonction de l'ordi.:
 
Un programme sous-interruption n'arrète aucune fonction de l'ordi.:
Il est entièrement gèr‚ à part.
+
Il est entièrement gèré à part.
 
Il est tout à fait possible que votre programme principal effectue
 
Il est tout à fait possible que votre programme principal effectue
 
une boucle et qu'EN MEME TEMPS, un programme sous interruption s'e-
 
une boucle et qu'EN MEME TEMPS, un programme sous interruption s'e-
x‚cute sans interrompre le programme principal !!
+
xécute sans interrompre le programme principal !!
C'est d'ailleurs cette propri‚t‚ qui rend les programmes sous inter-
+
C'est d'ailleurs cette propriété qui rend les programmes sous inter-
 
ruption si utiles...
 
ruption si utiles...
 
(Pour ne pas dire indispensable, car il existe toujours des routines
 
(Pour ne pas dire indispensable, car il existe toujours des routines
sous interruption qui sont activ‚es en permanence pour des raisons
+
sous interruption qui sont activées en permanence pour des raisons
 
vitales ...)
 
vitales ...)
Nous ‚tudierons tout cela en d‚tail très bientot, pas de panique !
+
Nous étudierons tout cela en détail très bientot, pas de panique !
 
 
   
- Il existe des ROUTINES D'EXCEPTION qui sont ex‚cut‚es par le système
+
- Il existe des ROUTINES D'EXCEPTION qui sont exécutées par le système
d'exploitation si une certaine condition (sp‚cifique) est v‚rifi‚e.
+
d'exploitation si une certaine condition (spécifique) est vérifiée.
Ce sont des programmes ex‚cut‚s exeptionnelement (d'o— leur nom !),
+
Ce sont des programmes exécutés exeptionnelement (d'o— leur nom !),
c.à.d. si la condition qui les actives se trouve r‚alis‚e.
+
c.à.d. si la condition qui les actives se trouve réalisée.
   
Ces programmes d'exception sont point‚s par une suite de VECTEURS qui
+
Ces programmes d'exception sont pointés par une suite de VECTEURS qui
se situent dans le premier KO de la m‚moire et qui pointent l'adresse
+
se situent dans le premier KO de la mémoire et qui pointent l'adresse
de la ROUTINE D'EXCEPTION conscern‚e.
+
de la ROUTINE D'EXCEPTION conscernée.
 
Ils sont responsables d'un certain nombre de fonctions vitales de
 
Ils sont responsables d'un certain nombre de fonctions vitales de
 
notre MICROPROCESSEUR.
 
notre MICROPROCESSEUR.
Line 346: Line 347:
 
En pratique:
 
En pratique:
   
Vous avez surement d‚jà vu un certain nombre de BOMBES s'afficher à
+
Vous avez surement déjà vu un certain nombre de BOMBES s'afficher à
l'‚cran quand vous avez cr‚‚ un programme qui ne marchait pas corr-
+
l'écran quand vous avez créé un programme qui ne marchait pas corr-
 
ectement.Ces bombes servent à identifier la source de l'erreur pour
 
ectement.Ces bombes servent à identifier la source de l'erreur pour
 
le programmeur (ou l'utilisateur) et proviennent d'un traitement
 
le programmeur (ou l'utilisateur) et proviennent d'un traitement
 
d'exception.
 
d'exception.
 
Il existe 255 VECTEURS D'EXCEPTION et le nombre de bombes qui
 
Il existe 255 VECTEURS D'EXCEPTION et le nombre de bombes qui
s'affichent vous renseigne sur le nr° de l'exception qui a ‚t‚
+
s'affichent vous renseigne sur le nr° de l'exception qui a été
solicit‚.
+
solicité.
   
 
 
Voilà les diff‚rents VECTEURS D'EXECPTION ainsi que leurs emplacements
+
Voilà les différents VECTEURS D'EXECPTION ainsi que leurs emplacements
en m‚moire.
+
en mémoire.
 
Ce sont des L-M car ce sont des ADRESSES qui pointent sur des routines
 
Ce sont des L-M car ce sont des ADRESSES qui pointent sur des routines
sp‚cifiques au VECTEUR conscern‚.
+
spécifiques au VECTEUR conscerné.
   
   
Line 370: Line 371:
 
3 : $00C :ERREUR d'ADRESSE (3 BOMBES)
 
3 : $00C :ERREUR d'ADRESSE (3 BOMBES)
 
4 : $010 :INTRUCTION ILLEGALE (4 BOMBES)
 
4 : $010 :INTRUCTION ILLEGALE (4 BOMBES)
5 : $014 :ERREUR car une DIVISION par ZERO a ‚t‚
+
5 : $014 :ERREUR car une DIVISION par ZERO a été
d‚tect‚e.
+
détectée.
 
(La routine n'est en fait qu'un RTE !)
 
(La routine n'est en fait qu'un RTE !)
6 : $018 :Utilis‚ par CHK
+
6 : $018 :Utilisé par CHK
7 : $01C :Utilis‚ par TRAPV
+
7 : $01C :Utilisé par TRAPV
8 : $020 :VIOLATION DE PRIVILEGE:On a essay‚ de
+
8 : $020 :VIOLATION DE PRIVILEGE:On a essayé de
toucher à des donn‚es uniquement acc-
+
toucher à des données uniquement acc-
‚sibles en MODE SUPERVISEUR
+
ésibles en MODE SUPERVISEUR
9 : $024 :Adresse de la routine ex‚cut‚e après
+
9 : $024 :Adresse de la routine exécutée après
 
chaque instruction en mode TRACE
 
chaque instruction en mode TRACE
10 : $028 :ERREUR d'‚mulation de LINEA
+
10 : $028 :ERREUR d'émulation de LINEA
11 : $02C :ERREUR d'‚mulation de LINEF
+
11 : $02C :ERREUR d'émulation de LINEF
12 à 14 : $030 :R‚serv‚ pour des applications futures
+
12 à 14 : $030 :Réservé pour des applications futures
 
15 : $03C :INTERRUPTION NON INITIALISEE
 
15 : $03C :INTERRUPTION NON INITIALISEE
16 à 23 : $040 :R‚serv‚ pour des applications futures
+
16 à 23 : $040 :Réservé pour des applications futures
 
24 : $060 :INTERRUPTION secondaire
 
24 : $060 :INTERRUPTION secondaire
 
25 : $064 :IPL 1
 
25 : $064 :IPL 1
Line 393: Line 394:
 
30 : $078 :IPL 6
 
30 : $078 :IPL 6
 
31 : $07C :IPL 7
 
31 : $07C :IPL 7
32 : $080 :Utilis‚ par TRAP #0
+
32 : $080 :Utilisé par TRAP #0
33 : $084 :Utilis‚ par TRAP #1 (GEMDOS)
+
33 : $084 :Utilisé par TRAP #1 (GEMDOS)
34 : $088 :Utilis‚ par TRAP #2 (AES/VDI)
+
34 : $088 :Utilisé par TRAP #2 (AES/VDI)
35 : $08C :Utilis‚ par TRAP #3
+
35 : $08C :Utilisé par TRAP #3
36 : $090 :Utilis‚ par TRAP #4
+
36 : $090 :Utilisé par TRAP #4
37 : $094 :Utilis‚ par TRAP #5
+
37 : $094 :Utilisé par TRAP #5
38 : $098 :Utilis‚ par TRAP #6
+
38 : $098 :Utilisé par TRAP #6
39 : $09C :Utilis‚ par TRAP #7
+
39 : $09C :Utilisé par TRAP #7
40 : $0A0 :Utilis‚ par TRAP #8
+
40 : $0A0 :Utilisé par TRAP #8
41 : $0A4 :Utilis‚ par TRAP #9
+
41 : $0A4 :Utilisé par TRAP #9
42 : $0A8 :Utilis‚ par TRAP #10
+
42 : $0A8 :Utilisé par TRAP #10
43 : $0AC :Utilis‚ par TRAP #11
+
43 : $0AC :Utilisé par TRAP #11
44 : $0B0 :Utilis‚ par TRAP #12
+
44 : $0B0 :Utilisé par TRAP #12
45 : $0B4 :Utilis‚ par TRAP #13 (BIOS)
+
45 : $0B4 :Utilisé par TRAP #13 (BIOS)
46 : $0B8 :Utilis‚ par TRAP #14 (XBIOS)
+
46 : $0B8 :Utilisé par TRAP #14 (XBIOS)
47 : $0BC :Utilis‚ par TRAP #15
+
47 : $0BC :Utilisé par TRAP #15
48 à 63 : $0C0 :R‚serv‚
+
48 à 63 : $0C0 :Réservé
 
64 à 255 : $100 :disponibles à l'utilisateur, on y
 
64 à 255 : $100 :disponibles à l'utilisateur, on y
 
trouve notament:
 
trouve notament:
Line 418: Line 419:
 
 
 
 
Le d‚tail viendra plus loin.
+
Le détail viendra plus loin.
 
En pratique, si votre programme affiche 3 BOMBES avant de rendre l'ƒme,
 
En pratique, si votre programme affiche 3 BOMBES avant de rendre l'ƒme,
c'est qu'une erreur d'adresse a ‚t‚ d‚tect‚e, si il en affiche 4,c'est
+
c'est qu'une erreur d'adresse a été détectée, si il en affiche 4,c'est
qu'une instruction ill‚gale a ‚t‚ d‚tect‚e...
+
qu'une instruction illégale a été détectée...
   
   
Voilà maintenant comment l'ordi. s'y prend pour ex‚cuter une ROUTINE
+
Voilà maintenant comment l'ordi. s'y prend pour exécuter une ROUTINE
 
d'EXEPTION:
 
d'EXEPTION:
 
 
Line 435: Line 436:
 
.Chargement dans le PC de l'adresse que contient le VECTEUR d'EXCEPTION
 
.Chargement dans le PC de l'adresse que contient le VECTEUR d'EXCEPTION
 
choisi :Saut à la routine correspondante...
 
choisi :Saut à la routine correspondante...
.Ex‚cution du programme d'exCeption et retour dès la rencontre d'un
+
.Exécution du programme d'exCeption et retour dès la rencontre d'un
 
RTE (Return From Exception)
 
RTE (Return From Exception)
 
.Restauration des registres SR et PC.
 
.Restauration des registres SR et PC.
   
 
Il est tout à fait possible de modifier ces vecteurs, il suffit de
 
Il est tout à fait possible de modifier ces vecteurs, il suffit de
d‚pose l'adresse (L-M) de la nouvelle routine à ex‚cuter à l'adresse
+
dépose l'adresse (L-M) de la nouvelle routine à exécuter à l'adresse
 
du vecteur à modifer. (MOVE.L #NEW,$vecteur)
 
du vecteur à modifer. (MOVE.L #NEW,$vecteur)
Ceci aurra pour effet de d‚tourner l'ex‚cution de la ROUTINE D'EXCEP-
+
Ceci aurra pour effet de détourner l'exécution de la ROUTINE D'EXCEP-
 
TION vers votre propre routine...
 
TION vers votre propre routine...
Nous verrons cela en d‚tail quand je parlerais du mode TRACE.
+
Nous verrons cela en détail quand je parlerais du mode TRACE.
   
   
Line 452: Line 453:
 
,il faudra attribuer un NIVEAU DE PRIORITE à notre programme sous inter-
 
,il faudra attribuer un NIVEAU DE PRIORITE à notre programme sous inter-
 
ruption.
 
ruption.
Plus ce NIVEAU DE PRIORITE sera ‚lev‚, et plus grande sera l'importance
+
Plus ce NIVEAU DE PRIORITE sera élevé, et plus grande sera l'importance
accord‚e à notre programme dans la hi‚rarchie.
+
accordée à notre programme dans la hiérarchie.
   
Le NIVEAU DE PRIORITE de notre programme sera d‚finit par l'‚tat des
+
Le NIVEAU DE PRIORITE de notre programme sera définit par l'état des
 
BITS I1,I2,I3 du REGISTRE D'ETAT 'SR' (Disponible UNIQUEMENT en MODE
 
BITS I1,I2,I3 du REGISTRE D'ETAT 'SR' (Disponible UNIQUEMENT en MODE
 
SUPERVISEUR !!)
 
SUPERVISEUR !!)
   
Ces 3 BITS permettent de d‚finir 8 niveaux de priorit‚.
+
Ces 3 BITS permettent de définir 8 niveaux de priorité.
   
 
BITS I1 I2 I0 = % NIVEAU (ou Interrupt Priority Level)
 
BITS I1 I2 I0 = % NIVEAU (ou Interrupt Priority Level)
Line 476: Line 477:
 
:'IPL') 0 sera donc interrompu par tout autre programme d'IPL ò 1,un
 
:'IPL') 0 sera donc interrompu par tout autre programme d'IPL ò 1,un
 
programme d'IPL 1 ne sera interrompu que par un programme d'IPL ò 2
 
programme d'IPL 1 ne sera interrompu que par un programme d'IPL ò 2
mais restera indiff‚rent à un programme sous interruption d'IPL 0,et
+
mais restera indifférent à un programme sous interruption d'IPL 0,et
celui-ci ne sera donc pas ex‚cut‚ car son IPL est < 1 etc...
+
celui-ci ne sera donc pas exécuté car son IPL est < 1 etc...
   
Le NIVEAU 0 est th‚oriquement celui de votre programme.
+
Le NIVEAU 0 est théoriquement celui de votre programme.
 
(Niveau le plus bas)
 
(Niveau le plus bas)
Le NIVEAU 7 est th‚oriquement le niveau d'IPL qui permettra au prg
+
Le NIVEAU 7 est théoriquement le niveau d'IPL qui permettra au prg
sous interruption qui en est affect‚ qu'aucun autre programme sous
+
sous interruption qui en est affecté qu'aucun autre programme sous
 
interruption ne puisse l'interrompre.
 
interruption ne puisse l'interrompre.
(Il pourrait par exemple s'agir du RESET,qui a une priorit‚ ABSOLUE)
+
(Il pourrait par exemple s'agir du RESET,qui a une priorité ABSOLUE)
 
 
. En pratique, seuls les niveaux 2,4 et 6 sont utilis‚s.
+
. En pratique, seuls les niveaux 2,4 et 6 sont utilisés.
   
l'IPL 2 est utilis‚ par le HBL
+
l'IPL 2 est utilisé par le HBL
l'IPL 4 est utilis‚ par les routines du VBL
+
l'IPL 4 est utilisé par les routines du VBL
l'IPL 6 est utilis‚ par les interruptions du MFP 68901
+
l'IPL 6 est utilisé par les interruptions du MFP 68901
 
 
 
 
 
le HBL: Horizontal BLank
 
le HBL: Horizontal BLank
 
-------
 
-------
Il s'agit en r‚alit‚ d'une routine ex‚cut‚e après que le SHIFTER
+
Il s'agit en réalité d'une routine exécutée après que le SHIFTER
affiche 1 ligne horizontale sur l'‚cran.
+
affiche 1 ligne horizontale sur l'écran.
Suivant le type de moniteur connect‚, la routine est appell‚e toutes
+
Suivant le type de moniteur connecté, la routine est appellée toutes
 
les 50 microsecondes (50Hz) ou toutes le 64 microsecondes (64 Hz)
 
les 50 microsecondes (50Hz) ou toutes le 64 microsecondes (64 Hz)
Un moniteur couleur possède 200 lignes horizontales, l'‚cran est 'ra-
+
Un moniteur couleur possède 200 lignes horizontales, l'écran est 'ra-
 
fraichit' 50 fois par secondes (50 Hz), la routine de l'HBL est donc
 
fraichit' 50 fois par secondes (50 Hz), la routine de l'HBL est donc
appel‚ 10000 fois par seconde dans certaines conditions !
+
appelé 10000 fois par seconde dans certaines conditions !
Cette routine ralentirait ‚norm‚ment l'ordi. ,c'est pourquoi la routine
+
Cette routine ralentirait énormément l'ordi. ,c'est pourquoi la routine
de l'HBL n'est pas ex‚cut‚e. (heuresement pour nous !)
+
de l'HBL n'est pas exécutée. (heuresement pour nous !)
 
En effet, dès son premier appel,la routine positionnera automatiquement
 
En effet, dès son premier appel,la routine positionnera automatiquement
 
l'IPL de notre programme sur un niveau d'IPL 3: la routine ne sera donc
 
l'IPL de notre programme sur un niveau d'IPL 3: la routine ne sera donc
plus appell‚e car elle a un niveau d'IPL 2...
+
plus appellée car elle a un niveau d'IPL 2...
   
NB: Il est possible de d‚tourner cette routine:
+
NB: Il est possible de détourner cette routine:
 
--
 
--
Il suffit de d‚poser l'adresse de votre routine dans le 26°ème
+
Il suffit de déposer l'adresse de votre routine dans le 26°ème
 
VECTEUR d'EXCEPTION qui pointe sur la routine de l'HBL (.L) et
 
VECTEUR d'EXCEPTION qui pointe sur la routine de l'HBL (.L) et
 
de remettre l'IPL du programme à un niveau < 2 ( En modifiant
 
de remettre l'IPL du programme à un niveau < 2 ( En modifiant
les bits I1,I2,I3 du registre d'‚tat )
+
les bits I1,I2,I3 du registre d'état )
 
Votre routine devra aussi se terminer par l'instruction RTE
 
Votre routine devra aussi se terminer par l'instruction RTE
 
(Return From Exception), mais nous en reparlerons bientot...
 
(Return From Exception), mais nous en reparlerons bientot...
Line 523: Line 524:
 
Elles ont un niveau d'interruption 4, elles sont donc prioritaires
 
Elles ont un niveau d'interruption 4, elles sont donc prioritaires
 
vis-à-vis de l'interrution de l'HBL.
 
vis-à-vis de l'interrution de l'HBL.
Ces routines sont ex‚cut‚es après qu'un ‚cran graphique ( 200 ou 400
+
Ces routines sont exécutées après qu'un écran graphique ( 200 ou 400
lignes horizontales suivant la r‚solution) ait ‚t‚ ‚dit‚ en entier sur
+
lignes horizontales suivant la résolution) ait été édité en entier sur
 
le moniteur.
 
le moniteur.
Elles s'ex‚cutent donc 50 fois par seconde (50 Hz).
+
Elles s'exécutent donc 50 fois par seconde (50 Hz).
 
 
 
Les routines de la VBL s'occuppent du changement de la palette des
 
Les routines de la VBL s'occuppent du changement de la palette des
couleurs ( Uniquement après qu'une image a ‚t‚ dessin‚e en entier
+
couleurs ( Uniquement après qu'une image a été dessinée en entier
pour ‚viter de perturber l'image ),elles testent le changement de
+
pour éviter de perturber l'image ),elles testent le changement de
 
disquette ...
 
disquette ...
 
Il y a en tout 8 routines, le nombre de routines disponibles est
 
Il y a en tout 8 routines, le nombre de routines disponibles est
 
contenu dans la variable système NVBLS et il existe un vecteur
 
contenu dans la variable système NVBLS et il existe un vecteur
 
qui pointe sur les 8 adresses de ces routines, en VBLQUEUE.
 
qui pointe sur les 8 adresses de ces routines, en VBLQUEUE.
En r‚alit‚, seule 1 routine est ex‚cut‚e : Les 7 autres nous sont
+
En réalité, seule 1 routine est exécutée : Les 7 autres nous sont
 
donc disponibles...
 
donc disponibles...
 
 
Line 541: Line 542:
 
Les interruptions du MFP 68901 (Multi Fonction Peripheral)
 
Les interruptions du MFP 68901 (Multi Fonction Peripheral)
 
------------------------------
 
------------------------------
Le MFP 68901 g‚re 16 interruptions,elles ont un niveau de priorit‚ 6,
+
Le MFP 68901 gére 16 interruptions,elles ont un niveau de priorité 6,
 
elles sont donc prioritaires vis-à-vis des interruptions VBL et HBL.
 
elles sont donc prioritaires vis-à-vis des interruptions VBL et HBL.
Les 16 interruptions du MFP 68901 ont aussi des niveaux de priorit‚
+
Les 16 interruptions du MFP 68901 ont aussi des niveaux de priorité
diff‚rent entre elles !
+
différent entre elles !
 
Ainsi, une interruption du MFP de niveau 6 ne pourra que ètre inter-
 
Ainsi, une interruption du MFP de niveau 6 ne pourra que ètre inter-
 
rompue par une autre interruption de niveau > 6 etc...
 
rompue par une autre interruption de niveau > 6 etc...
   
Voilà les diff‚rentes interruptions du MFP 68901 , class‚es par
+
Voilà les différentes interruptions du MFP 68901 , classées par
niveau de priorit‚ (not‚ x sur l'ILP 6 du MFP ).
+
niveau de priorité (noté x sur l'ILP 6 du MFP ).
   
   
 
NIVEAU (x/6) : L'interruption
 
NIVEAU (x/6) : L'interruption
 
 
15/6 : D‚tecteur de branchement ou de d‚branchement du moniteur
+
15/6 : Détecteur de branchement ou de débranchement du moniteur
haute r‚solution
+
haute résolution
 
14/6 : Ring indicator de l'interface RS232
 
14/6 : Ring indicator de l'interface RS232
 
13/6 : TIMER A de l'horloge interne
 
13/6 : TIMER A de l'horloge interne
12/6 : Tampon de r‚ception d'1 caractère à parir de la RS232
+
12/6 : Tampon de réception d'1 caractère à parir de la RS232
destin‚ à l'utilisateur
+
destiné à l'utilisateur
11/6 : Erreur de r‚ception d'1 caractère provenant de
+
11/6 : Erreur de réception d'1 caractère provenant de
 
l'interface RS232
 
l'interface RS232
10/6 : Tampon temporaire d'‚mission d'1 caractère à destination
+
10/6 : Tampon temporaire d'émission d'1 caractère à destination
 
de la RS232
 
de la RS232
9/6 : Erreur d'‚mission d'1 caractère provenant de la RS232
+
9/6 : Erreur d'émission d'1 caractère provenant de la RS232
 
8/6 : TIMER B et Compteur de retour à la ligne
 
8/6 : TIMER B et Compteur de retour à la ligne
 
7/6 : Routine de controle des lecteurs de disquette et du DMA
 
7/6 : Routine de controle des lecteurs de disquette et du DMA
 
6/6 : Routines de controle du clavier (ACIAs) et de la prise
 
6/6 : Routines de controle du clavier (ACIAs) et de la prise
MIDI (En entr‚e et sortie)
+
MIDI (En entrée et sortie)
5/6 : TIMER C utilis‚ par le YM-2149 (Son) ,le clavier et le
+
5/6 : TIMER C utilisé par le YM-2149 (Son) ,le clavier et le
 
compteur de synchronisation du système (à 200 Hz)
 
compteur de synchronisation du système (à 200 Hz)
4/6 : TIMER D utilis‚ pour les op‚rations d'‚mission et de
+
4/6 : TIMER D utilisé pour les opérations d'émission et de
r‚ception de la RS232
+
réception de la RS232
3/6 : Inutilis‚
+
3/6 : Inutilisé
 
2/6 : Routine de controle du CTS de la RS232
 
2/6 : Routine de controle du CTS de la RS232
 
1/6 : Routine de controle du DCD de la RS232
 
1/6 : Routine de controle du DCD de la RS232
0/6 : Utilis‚ par le BUSY de l'interface CENTRONICS pour cr‚er
+
0/6 : Utilisé par le BUSY de l'interface CENTRONICS pour créer
 
un spooler d'imprimante.
 
un spooler d'imprimante.
   
   
Les termes ci dessus ne seront pas expliqu‚s, vous n'aurez pas à vous
+
Les termes ci dessus ne seront pas expliqués, vous n'aurez pas à vous
 
en servir de toute manière, alors pourquoi compliquer ce qui n'est pas
 
en servir de toute manière, alors pourquoi compliquer ce qui n'est pas
d‚jà si simple ?
+
déjà si simple ?
   
Nous allons tout de mème d‚tailler et expliquer les modes de fonction-
+
Nous allons tout de mème détailler et expliquer les modes de fonction-
 
nement des TIMERS, car c'est leur programmation qui va nous permettre
 
nement des TIMERS, car c'est leur programmation qui va nous permettre
de r‚aliser nos programmes sous interruption.
+
de réaliser nos programmes sous interruption.
   
 
Les TIMERS:
 
Les TIMERS:
Line 595: Line 596:
   
 
. Le TIMER A est entièremet disponible au programmeur et a un niveau
 
. Le TIMER A est entièremet disponible au programmeur et a un niveau
de priorit‚ 13 au sein du MFP (‚lev‚!)
+
de priorité 13 au sein du MFP (élevé!)
. Le TIMER B est utilis‚ comme compteur de retour à la ligne mais vous
+
. Le TIMER B est utilisé comme compteur de retour à la ligne mais vous
pourrez très facilement le d‚tourner.Il a un niveau de priorit‚ 8 au
+
pourrez très facilement le détourner.Il a un niveau de priorité 8 au
 
sein du MFP ( IPL < à l'IPL du TIMER A)
 
sein du MFP ( IPL < à l'IPL du TIMER A)
 
. Les TIMERs C et D sont responsables d'un certain nombre de fonctions
 
. Les TIMERs C et D sont responsables d'un certain nombre de fonctions
importantes (gestion du son,du clavier ...), les d‚tourner peut donc
+
importantes (gestion du son,du clavier ...), les détourner peut donc
 
poser beaucoup de problèmes...
 
poser beaucoup de problèmes...
De plus, ils ont un niveau de priorit‚ BAS au sein du MFP, c'est
+
De plus, ils ont un niveau de priorité BAS au sein du MFP, c'est
 
pourquoi nous ne les utiliseront pas pour installer nos program-
 
pourquoi nous ne les utiliseront pas pour installer nos program-
 
mes sous interrupton.
 
mes sous interrupton.
Line 614: Line 615:
 
---------------------------
 
---------------------------
 
On trouve 24 registres d'une taille d'1 OCTET chacun :
 
On trouve 24 registres d'une taille d'1 OCTET chacun :
Ces registres se situent en m‚moire à partir de l'adresse $FFFA01
+
Ces registres se situent en mémoire à partir de l'adresse $FFFA01
 
sur des adresses IMPAIRES.
 
sur des adresses IMPAIRES.
 
 
Ces registres font partie int‚grante de la m‚moire de notre ST.
+
Ces registres font partie intégrante de la mémoire de notre ST.
 
On peut atteindre tous ces registres en MODE SUPERVISEUR, il
 
On peut atteindre tous ces registres en MODE SUPERVISEUR, il
suffira de d‚poser la nouvelle valeur du registre à l'adresse
+
suffira de déposer la nouvelle valeur du registre à l'adresse
 
correspondante.(Comme avec les variables système)
 
correspondante.(Comme avec les variables système)
   
Line 628: Line 629:
 
NR°) NOM :Indications (ADRESSE)
 
NR°) NOM :Indications (ADRESSE)
 
-------------------------------
 
-------------------------------
1) GPIP:Drapeau de lecture ou d'‚criture par le port parallèle
+
1) GPIP:Drapeau de lecture ou d'écriture par le port parallèle
 
($FFFA01)
 
($FFFA01)
   
Line 635: Line 636:
 
($FFFA03)
 
($FFFA03)
   
3) DDR :Affecte un sens de transmission (entr‚e ou sortie) aux bits
+
3) DDR :Affecte un sens de transmission (entrée ou sortie) aux bits
 
du GPIP
 
du GPIP
 
($FFFA05)
 
($FFFA05)
   
4) IERA:Vecteur bit d‚finissant le niveau d'IPL du MFP à bloquer:
+
4) IERA:Vecteur bit définissant le niveau d'IPL du MFP à bloquer:
 
IPLs de 15 à 8, Voir les interruptions du MFP plus haut
 
IPLs de 15 à 8, Voir les interruptions du MFP plus haut
 
($FFFA07)
 
($FFFA07)
Line 652: Line 653:
 
Bit 0: niveau 8
 
Bit 0: niveau 8
   
5) IERB:Vecteur bit d‚finissant le niveau d'IPL du MFP à bloquer:
+
5) IERB:Vecteur bit définissant le niveau d'IPL du MFP à bloquer:
 
IPLs de 8 à 0, Voir les interruptions du MFP plus haut
 
IPLs de 8 à 0, Voir les interruptions du MFP plus haut
 
($FFFA09)
 
($FFFA09)
Line 665: Line 666:
 
Bit 0: niveau 0
 
Bit 0: niveau 0
 
 
6) IPRA:Vecteur bit enclench‚ automatiquement qui marque l'IPL au
+
6) IPRA:Vecteur bit enclenché automatiquement qui marque l'IPL au
sein du MFP (bit à 1 = IPL actif) qui est activ‚,Voir les
+
sein du MFP (bit à 1 = IPL actif) qui est activé,Voir les
interruptions du MFP pour les d‚tails sur les IPLs.
+
interruptions du MFP pour les détails sur les IPLs.
 
($FFFA0B)
 
($FFFA0B)
 
 
Line 680: Line 681:
 
 
 
 
7) IPRB:Vecteur bit enclench‚ automatiquement qui marque l'IPL au
+
7) IPRB:Vecteur bit enclenché automatiquement qui marque l'IPL au
sein du MFP (bit à 1 = IPL actif) qui est activ‚,Voir les
+
sein du MFP (bit à 1 = IPL actif) qui est activé,Voir les
interruptions du MFP pour les d‚tails sur les IPLs.
+
interruptions du MFP pour les détails sur les IPLs.
 
($FFFA0D)
 
($FFFA0D)
 
 
Line 758: Line 759:
 
TIMERs plus loin, pas de panique !)
 
TIMERs plus loin, pas de panique !)
 
. Bits nr°4 à 7, permet de modifier le nr° du VECTEUR qui sera
 
. Bits nr°4 à 7, permet de modifier le nr° du VECTEUR qui sera
ex‚cut‚
+
exécuté
   
 
($FFFA17)
 
($FFFA17)
Line 764: Line 765:
 
13) TACR:Vecteur bit qui controle le TIMER A:
 
13) TACR:Vecteur bit qui controle le TIMER A:
 
ATTENTION, seuls les bits 0 à 3 du Registre TACR sont
 
ATTENTION, seuls les bits 0 à 3 du Registre TACR sont
utilis‚s !!!
+
utilisés !!!
 
($FFFA19)
 
($FFFA19)
 
 
Line 799: Line 800:
 
- Le MFP 68901 travaille avec une horloge interne de 24,576 Mhz
 
- Le MFP 68901 travaille avec une horloge interne de 24,576 Mhz
   
- Le TIMER A est essentiellement compos‚ d'un REGISTRE DE CONTROLE et
+
- Le TIMER A est essentiellement composé d'un REGISTRE DE CONTROLE et
 
d'un REGISTRE DE DONNEE. --------------------
 
d'un REGISTRE DE DONNEE. --------------------
 
------------------
 
------------------
 
Le REGISTRE DE CONTROLE indique le mode de fonctionnement du TIMER,
 
Le REGISTRE DE CONTROLE indique le mode de fonctionnement du TIMER,
il s'agit du registre d‚crit ci-dessus, le registre TACR.
+
il s'agit du registre décrit ci-dessus, le registre TACR.
C'est en positionnant le registre TACR sur les diff‚rentes valeurs
+
C'est en positionnant le registre TACR sur les différentes valeurs
accept‚es (Voir le tableau), qu'on obtient les diff‚rents modes de
+
acceptées (Voir le tableau), qu'on obtient les différents modes de
 
fonctionnement du TIMER:
 
fonctionnement du TIMER:
 
 
les diff‚rents MODES DE FONCTIONNEMENT DU TIMER A sont:
+
les différents MODES DE FONCTIONNEMENT DU TIMER A sont:
 
-------------------------------------------------------
 
-------------------------------------------------------
 
. Le DELAY MODE:
 
. Le DELAY MODE:
 
--------------
 
--------------
Le REGISTRE DE DONNEE du TIMER est d‚cr‚ment‚ à intervals r‚guliers
+
Le REGISTRE DE DONNEE du TIMER est décrémenté à intervals réguliers
 
(à chaque battement de l'horloge interne contenue dans le diviseur)
 
(à chaque battement de l'horloge interne contenue dans le diviseur)
seur)et quand ce registre vaudra 1 ,une interruption sera g‚n‚r‚e.
+
seur)et quand ce registre vaudra 1 ,une interruption sera générée.
   
 
NB: Le registre de DONNEE devra ètre une valeur comprise entre 1
 
NB: Le registre de DONNEE devra ètre une valeur comprise entre 1
Line 823: Line 824:
 
-------
 
-------
 
On est en MODE DELAY (voir Tableau)
 
On est en MODE DELAY (voir Tableau)
Le registre de controle TACR vaut %11 et le pr‚diviseur vaut 16
+
Le registre de controle TACR vaut %11 et le prédiviseur vaut 16
 
(Regardez le Tableau) ------------- -------------------
 
(Regardez le Tableau) ------------- -------------------
Si on positionne le registre de donn‚e sur 200 par exemple, notre
+
Si on positionne le registre de donnée sur 200 par exemple, notre
programme sous interruption sera appel‚: ---------------
+
programme sous interruption sera appelé: ---------------
   
 
245760/16/200=76,8 fois par secondes ...
 
245760/16/200=76,8 fois par secondes ...
Line 835: Line 836:
   
 
Autre Exemple:TACR=%0010 (voir Tableau)
 
Autre Exemple:TACR=%0010 (voir Tableau)
Le registre de control TACR vaut %10 et le pr‚diviseur vaut 10
+
Le registre de control TACR vaut %10 et le prédiviseur vaut 10
 
(Regardez le Tableau) ------------- -------------------
 
(Regardez le Tableau) ------------- -------------------
Si on positionne le registre de donn‚e sur 32 par exemple, notre
+
Si on positionne le registre de donnée sur 32 par exemple, notre
programme sous interruption sera appel‚: --------------
+
programme sous interruption sera appelé: --------------
   
 
245760/10/32=768 fois par secondes ...
 
245760/10/32=768 fois par secondes ...
Line 846: Line 847:
 
+-----------------------------------+
 
+-----------------------------------+
 
 
J'y reviendrai quand nous ‚crirons nos premiers programmes...
+
J'y reviendrai quand nous écrirons nos premiers programmes...
 
 
   
Line 856: Line 857:
 
. Le MODE MESURE DE LARGEUR D'IMPULSION:
 
. Le MODE MESURE DE LARGEUR D'IMPULSION:
 
--------------------------------------
 
--------------------------------------
Identique au DELAY MODE, mais il peut être annul‚ par une actvit‚
+
Identique au DELAY MODE, mais il peut être annulé par une actvité
des broches d'entr‚e ou sortie du MFP.
+
des broches d'entrée ou sortie du MFP.
   
   
Line 863: Line 864:
 
Nous utiliseront surtout le DELAY MODE ...
 
Nous utiliseront surtout le DELAY MODE ...
   
Relisez attentivement ce qui a ‚t‚ dit ici, car c'est vraiment très
+
Relisez attentivement ce qui a été dit ici, car c'est vraiment très
 
important...
 
important...
   

Latest revision as of 21:04, 17 December 2023


                         ------------------------
                         Les INTERRUPTIONS et les

                            VARIABLES  SYSTEME

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


 Avant de commencer à vous parler des programmes sous interruption, nous
 allons étudier:

                        *** LES VARIABLES SYSTEME ***
                        -----------------------------

- Les VARIABLES SYSTEME sont diverses informations qui nous sont dispo-
  nibles en lecture et en écriture et qui se situent au début du second
  KO de la RAM de notre ST. (L'emplacement en RAM varie si vous possèdez
  un MEGA ST au un ST dont le système d'exploitation (le TOS) n'est pas
  en ROM, mais il ne varie pas entre les différentes versions de ROM)
  
- Pour atteindre ces variables, il faudra d'abord se positonner en MODE
  SUPERVISEUR, sinon attention au plantage...(Erreur de BUS:2 bombes !)
  Les variables systèmes sont soit des OCTETS soit des MOTS soit des L-M.

- Nous allons nous servir de certaines de ces VARIABLES SYSTEME, elles
  influences grandement le fonctionnement du ST:

  Voilà les adresses ou se situent ces différentes variables ainsi que
  leurs noms , leurs tailles et leurs utilité:

  Les noms ci-dessous sont les noms standard donnés par ATARI à ces
  variables ,les adresses qui leur sont attribuées sont uniquement
  valables pour les ST avec le TOS en RAM.


  
  ADRESSE |  NOM    + TAILLE  |  UTILITE      

  . $400   evt_timer    (.L)  : C'est un vecteur qui pointe sur l'adresse
                                $FCA648 ( Je donne les adresses valables 
                                pour les ST avec TOS en ROM ) et qui per-
                                met l'exécution des fonctions périodiques
                                du GEM.    

  . $404   evt_critic   (.W)  : C'est un vecteur qui pointe sur l'adresse
                                $2A156 et qui est utilisé quand le système
                                d'exploitation doit traiter une erreur pro
                                venant du lecteur de disquette. ( Lecteur
                                ne répond pas... )   

  . $408   evt_term     (.L)  : C'est un vecteur qui est utilisé par les
                                fonctions de type _TERM du Gemdos qui ser-
                                vent à finir l'exécution d'un programme.

  . $40C   evt_xtra   5*(.L)  : 5 L-M y sont réservés pour des 
                                applications futures...

  . $420   memvalid     (.L)  : Sémaphore pour une configuration de
                                controleur de mémoire valide.

  . $424   memctrl      (.B)  : Si memctrl=4 l'ordi est un 520  ST
                                Si memctrl=5 l'ordi est un 1040 ST   
                                Si memctrl=10 c'est un MEGA ST
                                Si memctrl=0 c'est un 128 ST

  . $426   resvalid     (.L)  : Si il vaut $31415926 (soit PI sans la vir-
                                gule) l'adresse pointée par resvector sera
                                utilisée comme vecteur lors d'un RESET.

  . $42A   resvector    (.L)  : Le vecteur utilisé par resvalid lors d'un
                                RESET.

  . $42E   phystop      (.L)  : Adresse de la fin de la mémoire vidéo 
                                physique.

  . $432   _membot      (.L)  : Adresse du début de la zone de la mémoire
                                réservée pour le programmeur.(voir organi-
                                sation de la mémoire plus loin)

  . $436   _memtop      (.L)  : Adresse de la fin de cette zone ( $78000
                                pour un 520 ST ou $F8000 pour un 1040 ST)

  . $43A   memval2      (.L)  : Si memval2=$237698AA, le L-M confirme
                                memvalid

  . $43E   flock        (.L)  : Si flock est différent de 0, la VBL est
                                arrêtée (Voir plus loin pour VBL)

  . $440   seekrate     (.W)  : Permet de selectionner la vitesse de dé-
                                placement de la tête de lecture du lecteur
                                de disquette d'une piste :
                                0=6 ms,1=12 ms,2=2 ms,3=3 ms

  . $442  _timer_ms     (.W)  : Temps écoulé entre 2 appels du timer, soit
                                la vitesse des battements de l'horloge in-
                                terne. (en millisecondes)
                                Vous y trouverez toujours 20 ms soit 50 Hz
                                (Voir plus loin pour les TIMERS)

  . $444  _fverify      (.W)  : Si _fverify est différent de 0, il y a un
                                test d'écriture qui est effectué par le 
                                lecteur de disquette:A chaque écriture, il
                                relit l'octet écris et le compare a l'oc-
                                tet à écrire.
                                En cas d'erreur, on obtient un code 
                                d'erreur  
  
  . $446  _bootdev      (.W)  : Contient le numéro du lecteur de disquette
                                qui a chargé le système d'éxploitation.

  . $448  palmode       (.W)  : Drapeau qui indique soit que le système se
                                trouve en mode vidéo 50 Hz (PAL) si palmo-
                                de est différent de 0 soit qu'on est en 
                                mode vidéo 60 Hz (Standard NTSC) 
  
  . $44A  defshiftmd    (.W)  : Contient la résolution de l'écran dans la-
                                quelle on se trouve si on passe d'un écran
                                Haute résolution à un écran Couleur.
                                (0=basse,1=moyenne)
  
  . $44C  sshiftmd      (.W)  : Contient la résolution de l'écran dans la-
                                quelle on se trouve:0=BASSE,1=MOYENNE,
                                2=HAUTE
 
  . $44E  _v_bas_ad     (.L)  : Contient l'adresse du début de la mémoire
                                vidéo logique.C'est obligatoirement un
                                multiple de 256

  . $452  vblsem        (.W)  : Si cette valeur est nulle, la VBL n'est
                                plus exécutée:Voir plus loin pour la VBL

  . $454  nvbls         (.W)  : Contient le nombre de routines exécutées
                                lors du VBL (Logiquement 8)

  . $456  _vblqueue     (.L)  : Vecteur qui pointe sur les adresses des
                                routines exécutées lors du VBL

  . $45A  colorptr      (.L)  : Si ce L-M est différent de 0,il est inter-
                                prété comme l'adresse d'une nouvelle 
                                palette de couleurs.

  . $45E  screenpt      (.L)  : Si ce L-M n'est pas nul, il sera interpré-
                                té comme l'adresse de la nouvelle mémoire 
                                vidéo physique.

  . $462  _vbclock      (.L)  : C'est le compteur d'interruptions de la
                                VBL (Voir le chapitre suivant)

  . $466  _frclock      (.L)  : Contient le nombre de routines VBL qui ne 
                                sont pas bloquées par vblsem.
                                Ce nombre sert aussi à la fonction RANDOM
                                de l'XBIOS pour obtenir un nombre aléatoi-
                                re.

  . $46A  hdv_init      (.L)  : Vecteur qui pointe sur la routine d'ini-
                                tialisation du disque dur en $FC0D60

  . $46E  swv_vec       (.L)  : Vecteur qui pointe sur la routine exécutée
                                lorsqu'on déconnecte ou connecte un moni-
                                teur monochrome (en $FC0020).
   
  . $472  hdv_bpb       (.L)  : Voir la fonction de code $7 du BIOS
                                (Getbpb)

  . $476  hdv_rw        (.L)  : Vecteur qui pointe sur les routines d'écr-
                                iture et de lecture de données sur disque
                                dur.

  . $47A  hdv_boot      (.L)  : Vecteur qui pointe sur la routine de
                                lancement (BOOT) du disque dur

  . $47E  hdv_mediach   (.L)  : Vecteur pour la routine MEDIACH du disque
                                dur (Pour tester si on change le disque :
                                voir MEDIACH de code $4 dans le BIOS)
  
  . $482  _cmdload      (.W)  : Si cette variable est différente de 0, le
                                programme nommé 'COMMAND.PRG' sera chargé 
                                dès que le système d'exploitation est mis
                                en place.Cette variable devra ètre modifi-
                                ée sur le BOOT SECTOR.
  
  . $484  conterm        (.B) : C'est un vecteur bit dont les 4 premiers
                                bits sont utilisés.Si un de ces bits est
                                actif,la fonction est utilsée, sinon elle
                                est déconnectée.
                                Bit nr° 0 :BIP à chaque touche enfoncée
                                Bit nr° 1 :Répétition au clavier
                                Bit nr° 2 :Control+G donne un BIP
                                Bit nr° 3 :Permet de règler la fonction
                                           BCONIN du BIOS.
   
  . $492  themd2         (.L) : Adresse du début de la mémoire disponible
     
  . $496  themd3         (.L) : Adresse de la fin de la mémoire disponible   
 
  . $4A2  savptr         (.L) : Adresse ($90C) qui pointe une zone de la
                                mémoire utilisée pour la sauvegarde des
                                registres par le PROCESSEUR après un appel
                                à une fonction BIOS ou XBIOS

  . $4A6  _nflops        (.W) : Contient le nombre de lecteurs de 
                                disquette connectés.

  . $4A8  con_state      (.L) : Vecteur pointant sur les routines de code
                                ('ESC' + 'valeur') pour les effets des 
                                éditions graphiques de texte.

  . $4AC  save_row       (.W) : Mémoire temporaire de la position du cur-
                                seur du texte pour la fonction ESC+'Y'

  . $4AE  sav_context    (.L) : Adresse pointant sur une mémoire tempo-
                                raire utilisée en cas de traitement d'une
                                procédure d'exeption. 
  
  . $4BA  _hz_200        (.L) : Le timer du système qui est incrémenté
                                200 fois par seconde.

  . $4BC  _the_env       (.L) : La chaine de caractère prise par défaut ,
                                positionnée sur 4 octets nuls...
   
  . $4C2  _drvbits       (.L) : Vecteur bit représentant suivant le nr° du
                                bits actif le ou les drives connectés.
  
  . $4C6  _dskbufp       (.L) : Tampon de 1 KO utilisé par les opérations
                                de disk.
  
  . $4CE  _vbl_list    8*(.L) : Vecteur qui pointe sur les adresses des 8
                                routines qui sont exécutées dans la VBL.

  . $4EE  _dumpflg     8*(.L) : Sémaphore utilisée par la fonction de
                                Hardcopy activée par l'appui de Alternate
                                et Help.

  . $4F2  _sysbase       (.L) : Adresse du début du système d'exploitation
                                ($FC0000 sur les ST avec TOS en ROM)

  . $4FA  _end_tos       (.L) : Adresse de la fin du système d'exploita-
                                tion ($A100 sur les ST avec TOS en ROM)   

  . $4FE  exec_os        (.L) : Adresse du début de l'AES ($FD91D0)

  . $502  dump_vec       (.L) : Vecteur qui pointe sur la routine de
                                hardcopy de la fonction 20 du XBIOS.

  . $506  prt_stat       (.L) : Sémaphore pour l'état de l'imprimante

  . $50A  prt_vec        (.L) : Vecteur pour les fonctions d'édition sur
                                imprimante
  
  . $50E  aux_sta        (.L) : Vecteur de recherche d'état utilisé par
                                une fonction de Hardcopy

  . $512  aux_vec        (.L) : Vecteur de sortie utilisé par une fonction
                                de Hardcopy
  

  Voilà la liste de ces variables systèmes, pour les modifier, il suffira
  donc de se mettre en MODE SUPERVISEUR et d'y déposer la valeur que vous
  voulez...(Vous pouvez bien sur aussi vous contenter de lire les données
  qui y sont déposées...) 


  Ainsi, si vous voulez connaitre la résolution:
  Vous écrirez:

 *  ;LECTURE d'une VARIABLE SYSTEME:
 
       SUPER               ;MACRO de passage en MODE SUPERVISEUR
       move.w   $44C,d0    ;$44C=sshiftmd

  et Vous obtenez la résolution de l'écran dans d0.W !!!


  Si vous voulez changer la palette des couleurs, vous écrirez:   

 *  ;ECRITURE sur une VARIABLE SYSTEME:

       SUPER                ;MACRO de passage en MODE SUPERVISEUR
       move.l  #PAL,$45A    ;adresse de 'PAL' en $45A=colorptr

       DATA

  PAL  DC.W    $777,$007,$700,$070,$777,$777,$777,$777  ;les 16 couleurs
       DC.W    $777,$777,$777,$000,$000,$123,$456,$789    

   et Vous changez la palette des couleurs !!!

  
  Cette méthode s'applique à toutes les variables système...

  Ces variables présentent un très grand intérêt pour nous car grƒce
  à elles, il n'est plus utile d'appeller certaines fonctions du BIOS, 
  de l'XBIOS ou du GEMDOS pour obtenir des effets graphiques de base 
  comme le changement de la palette,obtenir la résolution... :
  Voilà qui nous sera vraiment très utile car ces variables systèmes se
  laissent très facilement modifier ou lire.Mais le plus grand intérêt
  qu'on peut en tirer,c'est que modifer une variable système ne nécessi-
  te pas l'utilisation de registres (SP ou des valeurs en RETOUR) ,con-
  trairement aux fonction de BIOS,XBIOS ou GEMDOS...
  Cela nous sera vraiment très utile quand nous ferons nos premiers 
  programmes sous interruption...




                *** LES PROGRAMMES SOUS-INTERRUPTION ***
                ----------------------------------------

- Un programme sous interruption est un programme qui doit ètre exécuté
  périodiquement, à intervals réguliers.
  Un tel programme sera source d'un TRAITEMENT D'EXCEPTION:
  Il sera exécuté si une certaine condition est vérifiée ( En pratique:
  après l'écoulement d'un certain temps de latence ) et sera interrompu 
  ( Dès la rencontre d'instructions prévues à cet effet ) pour n'être à
  nouveau appelé que lorsque la condition se retrouvera réalisée.

  Un programme sous-interruption n'arrète aucune fonction de l'ordi.:
  Il est entièrement gèré à part.
  Il est tout à fait possible que votre programme principal effectue 
  une boucle et qu'EN MEME TEMPS, un programme sous interruption s'e-
  xécute sans interrompre le programme principal !!
  C'est d'ailleurs cette propriété qui rend les programmes sous inter-
  ruption si utiles...
  (Pour ne pas dire indispensable, car il existe toujours des routines
  sous interruption qui sont activées en permanence pour des raisons
  vitales ...) 
  Nous étudierons tout cela en détail très bientot, pas de panique !
  

- Il existe des ROUTINES D'EXCEPTION qui sont exécutées par le système
  d'exploitation si une certaine condition (spécifique) est vérifiée.
  Ce sont des programmes exécutés exeptionnelement (d'o— leur nom !),
  c.à.d. si la condition qui les actives se trouve réalisée.

  Ces programmes d'exception sont pointés par une suite de VECTEURS qui
  se situent dans le premier KO de la mémoire et qui pointent l'adresse
  de la ROUTINE D'EXCEPTION conscernée.
  Ils sont responsables d'un certain nombre de fonctions vitales de  
  notre MICROPROCESSEUR.

  On peut considèrer que les programmes sous interruption sont des
  programmes d'exception.

  En pratique:

  Vous avez surement déjà vu un certain nombre de BOMBES s'afficher à
  l'écran quand vous avez créé un programme qui ne marchait pas corr-
  ectement.Ces bombes servent à identifier la source de l'erreur pour
  le programmeur (ou l'utilisateur) et proviennent d'un traitement
  d'exception.
  Il existe 255 VECTEURS D'EXCEPTION et le  nombre de bombes qui 
  s'affichent vous renseigne sur le nr° de l'exception qui a été 
  solicité.

   
  Voilà les différents VECTEURS D'EXECPTION ainsi que leurs emplacements
  en mémoire.
  Ce sont des L-M car ce sont des ADRESSES qui pointent sur des routines
  spécifiques au VECTEUR conscerné.


  NR° DU VECTEUR  :  ADRESSE  DU  :  ROUTINE et UTILISATION
                       VECTEUR

     0            :     $000      :SP après un RESET (.L)
     1            :     $004      :PC après un RESET (.L)
     2            :     $008      :ERREUR de BUS (2 BOMBES)
     3            :     $00C      :ERREUR d'ADRESSE (3 BOMBES)
     4            :     $010      :INTRUCTION ILLEGALE (4 BOMBES)
     5            :     $014      :ERREUR car une DIVISION par ZERO a été
                                   détectée. 
                                   (La routine n'est en fait qu'un RTE !)  
     6            :     $018      :Utilisé par CHK
     7            :     $01C      :Utilisé par TRAPV
     8            :     $020      :VIOLATION DE PRIVILEGE:On a essayé de
                                   toucher à des données uniquement acc-
                                   ésibles en MODE SUPERVISEUR
     9            :     $024      :Adresse de la routine exécutée après
                                   chaque instruction en mode TRACE
    10            :     $028      :ERREUR d'émulation de LINEA
    11            :     $02C      :ERREUR d'émulation de LINEF
    12 à 14       :     $030      :Réservé pour des applications futures
    15            :     $03C      :INTERRUPTION NON INITIALISEE
    16 à 23       :     $040      :Réservé pour des applications futures
    24            :     $060      :INTERRUPTION secondaire
    25            :     $064      :IPL 1
    26            :     $068      :IPL 2
    27            :     $06C      :IPL 3
    28            :     $070      :IPL 4
    29            :     $074      :IPL 5
    30            :     $078      :IPL 6
    31            :     $07C      :IPL 7
    32            :     $080      :Utilisé par TRAP #0
    33            :     $084      :Utilisé par TRAP #1 (GEMDOS)
    34            :     $088      :Utilisé par TRAP #2 (AES/VDI) 
    35            :     $08C      :Utilisé par TRAP #3
    36            :     $090      :Utilisé par TRAP #4
    37            :     $094      :Utilisé par TRAP #5
    38            :     $098      :Utilisé par TRAP #6
    39            :     $09C      :Utilisé par TRAP #7
    40            :     $0A0      :Utilisé par TRAP #8
    41            :     $0A4      :Utilisé par TRAP #9
    42            :     $0A8      :Utilisé par TRAP #10
    43            :     $0AC      :Utilisé par TRAP #11
    44            :     $0B0      :Utilisé par TRAP #12
    45            :     $0B4      :Utilisé par TRAP #13 (BIOS)
    46            :     $0B8      :Utilisé par TRAP #14 (XBIOS)
    47            :     $0BC      :Utilisé par TRAP #15
    48 à 63       :     $0C0      :Réservé
    64 à 255      :     $100      :disponibles à l'utilisateur, on y
                                   trouve notament:
    68            :     $110      :Interruption du TIMER D
    69            :     $114      :Interruption du TIMER C
    72            :     $120      :Interruption du TIMER B
    77            :     $134      :Interruption du TIMER A
      
   
  Le détail viendra plus loin.
  En pratique, si votre programme affiche 3 BOMBES avant de rendre l'ƒme,
  c'est qu'une erreur d'adresse a été détectée, si il en affiche 4,c'est
  qu'une instruction illégale a été détectée...


  Voilà maintenant comment l'ordi. s'y prend pour exécuter une ROUTINE
  d'EXEPTION:
  
  .Sauvegarde de SR dans un registre interne.
  .Passage en mode SUPERVISEUR par activation du bit S de SR.
  .Anulation du mode TRACE par extinction du bit T du SR (Explications
   sur le Mode TRACE plus loin).
  .Recherche du vecteur d'exeption à utiliser.
  .Empilement du PC et du SR dans la pile système.
  .Chargement dans le PC de l'adresse que contient le VECTEUR d'EXCEPTION
   choisi :Saut à la routine correspondante...
  .Exécution du programme d'exCeption et retour dès la rencontre d'un
   RTE (Return From Exception)
  .Restauration des registres SR et PC.   

   Il est tout à fait possible de modifier ces vecteurs, il suffit de
   dépose l'adresse (L-M) de la nouvelle routine à exécuter à l'adresse
   du vecteur à modifer. (MOVE.L  #NEW,$vecteur)
   Ceci aurra pour effet de détourner l'exécution de la ROUTINE D'EXCEP-
   TION vers votre propre routine...
   Nous verrons cela en détail quand je parlerais du mode TRACE.


  Mais revenons à nos programmes sous interruption.

  Pour pouvoir gèrer plusieurs programmes sous interruption en même temps
  ,il faudra attribuer un NIVEAU DE PRIORITE à notre programme sous inter-
  ruption.
  Plus ce NIVEAU DE PRIORITE sera élevé, et plus grande sera l'importance
  accordée à notre programme dans la hiérarchie.

  Le NIVEAU DE PRIORITE de notre programme sera définit par l'état des
  BITS I1,I2,I3 du REGISTRE D'ETAT 'SR' (Disponible UNIQUEMENT en MODE
  SUPERVISEUR !!)

  Ces 3 BITS permettent de définir 8 niveaux de priorité.

  BITS    I1   I2   I0  =  % NIVEAU  (ou Interrupt Priority Level)

   %      1    1    1         7  
   %      1    1    0         6
   %      1    0    1         5
   %      1    0    0         4
   %      0    1    1         3
   %      0    1    0         2
   %      0    0    1         1
   %      0    0    0         0

   
   Un programme de NIVEAU D'INTERRUPTION (ou d'Interrupt Priority Level
   :'IPL') 0 sera donc interrompu par tout autre programme d'IPL ò 1,un
   programme d'IPL 1 ne sera interrompu que par un programme d'IPL ò 2
   mais restera indifférent à un programme sous interruption d'IPL 0,et
   celui-ci ne sera donc pas exécuté car son IPL est < 1 etc...

   Le NIVEAU 0 est théoriquement celui de votre programme.
   (Niveau le plus bas)
   Le NIVEAU 7 est théoriquement le niveau d'IPL qui permettra au prg
   sous interruption qui en est affecté qu'aucun autre programme sous
   interruption ne puisse l'interrompre.
   (Il pourrait par exemple s'agir du RESET,qui a une priorité ABSOLUE)
   
   . En pratique, seuls les niveaux 2,4 et 6 sont utilisés.

          l'IPL 2 est utilisé par le HBL
          l'IPL 4 est utilisé par les routines du VBL
          l'IPL 6 est utilisé par les interruptions du MFP 68901
      
  
   le HBL: Horizontal BLank
   -------
   Il s'agit en réalité d'une routine exécutée après que le SHIFTER 
   affiche 1 ligne horizontale sur l'écran.
   Suivant le type de moniteur connecté, la routine est appellée toutes
   les 50 microsecondes (50Hz) ou toutes le 64 microsecondes (64 Hz) 
   Un moniteur couleur possède 200 lignes horizontales, l'écran est 'ra-
   fraichit' 50 fois par secondes (50 Hz), la routine de l'HBL est donc
   appelé 10000 fois par seconde dans certaines conditions !
   Cette routine ralentirait énormément l'ordi. ,c'est pourquoi la routine
   de l'HBL n'est pas exécutée. (heuresement pour nous !)
   En effet, dès son premier appel,la routine positionnera automatiquement
   l'IPL de notre programme sur un niveau d'IPL 3: la routine ne sera donc
   plus appellée car elle a un niveau d'IPL 2...

   NB: Il est possible de détourner cette routine:
   --
       Il suffit de déposer l'adresse de votre routine dans le 26°ème 
       VECTEUR d'EXCEPTION qui pointe sur la routine de l'HBL (.L) et
       de remettre l'IPL du programme à un niveau < 2 ( En modifiant  
       les bits I1,I2,I3 du registre d'état )
       Votre routine devra aussi se terminer par l'instruction RTE 
       (Return From Exception), mais nous en reparlerons bientot...
       (Le tout en mode SUPERVISEUR, ne l'oubliez pas !)


  les routines du VBL :Vertical BLank
  -------------------
  Elles ont un niveau d'interruption 4, elles sont donc prioritaires
  vis-à-vis de l'interrution de l'HBL.
  Ces routines sont exécutées après qu'un écran graphique ( 200 ou 400 
  lignes horizontales suivant la résolution) ait été édité en entier sur
  le moniteur.
  Elles s'exécutent donc 50 fois par seconde (50 Hz).
   
  Les routines de la VBL s'occuppent du changement de la palette des
  couleurs ( Uniquement après qu'une image a été dessinée en entier 
  pour éviter de perturber l'image ),elles testent le changement de 
  disquette ...
  Il y a en tout 8 routines, le nombre de routines disponibles est
  contenu dans la variable système NVBLS et il existe un vecteur 
  qui pointe sur les 8 adresses de ces routines, en VBLQUEUE.
  En réalité, seule 1 routine est exécutée : Les 7 autres nous sont
  donc disponibles... 
  
    
  Les interruptions du MFP 68901 (Multi Fonction Peripheral)
  ------------------------------
  Le MFP 68901 gére 16 interruptions,elles ont un niveau de priorité 6,
  elles sont donc prioritaires vis-à-vis des interruptions VBL et HBL.
  Les 16 interruptions du MFP 68901 ont aussi des niveaux de priorité
  différent entre elles !
  Ainsi, une interruption du MFP de niveau 6 ne pourra que ètre inter-
  rompue par une autre interruption de niveau > 6      etc...  

  Voilà les différentes interruptions du MFP 68901 , classées par
  niveau de priorité (noté x sur l'ILP 6 du MFP ).


  NIVEAU (x/6) : L'interruption
               
     15/6      : Détecteur de branchement ou de débranchement du moniteur
                 haute résolution
     14/6      : Ring indicator de l'interface RS232
     13/6      : TIMER A de l'horloge interne
     12/6      : Tampon de réception d'1 caractère à parir de la RS232
                 destiné à l'utilisateur
     11/6      : Erreur de réception d'1 caractère provenant de 
                 l'interface RS232
     10/6      : Tampon temporaire d'émission d'1 caractère à destination
                 de la RS232
      9/6      : Erreur d'émission d'1 caractère provenant de la RS232
      8/6      : TIMER B et Compteur de retour à la ligne
      7/6      : Routine de controle des lecteurs de disquette et du DMA
      6/6      : Routines de controle du clavier (ACIAs) et de la prise
                 MIDI (En entrée et sortie)
      5/6      : TIMER C utilisé par le YM-2149 (Son) ,le clavier et le
                 compteur de synchronisation du système (à 200 Hz)
      4/6      : TIMER D utilisé pour les opérations d'émission et de
                 réception de la RS232
      3/6      : Inutilisé
      2/6      : Routine de controle du CTS de la RS232
      1/6      : Routine de controle du DCD de la RS232
      0/6      : Utilisé par le BUSY de l'interface CENTRONICS pour créer
                 un spooler d'imprimante.


  Les termes ci dessus ne seront pas expliqués, vous n'aurez pas à vous
  en servir de toute manière, alors pourquoi compliquer ce qui n'est pas
  déjà si simple ?

  Nous allons tout de mème détailler et expliquer les modes de fonction-
  nement des TIMERS, car c'est leur programmation qui va nous permettre
  de réaliser nos programmes sous interruption.

  Les TIMERS:

  Comme vous avez pu le constater, il existe 4 TIMERS:

  Le TIMER A, le TIMER B, le TIMER C, le TIMER D.

  . Le TIMER A est entièremet disponible au programmeur et a un niveau
    de priorité 13 au sein du MFP (élevé!)
  . Le TIMER B est utilisé comme compteur de retour à la ligne mais vous  
    pourrez très facilement le détourner.Il a un niveau de priorité 8 au
    sein du MFP ( IPL < à l'IPL du TIMER A)
  . Les TIMERs C et D sont responsables d'un certain nombre de fonctions 
    importantes (gestion du son,du clavier ...), les détourner peut donc
    poser beaucoup de problèmes...
    De plus, ils ont un niveau de priorité BAS au sein du MFP, c'est 
    pourquoi nous ne les utiliseront pas pour installer nos program-
    mes sous interrupton.
 
    La programmation des TIMERS se fait d'une manière très particu-
    lière:
    Il faudra programmer directement les registres du CO-PROCESSEUR MFP
    68901 !!

    Les REGISTRES DU MFP 68901:
    ---------------------------
    On trouve 24 registres d'une taille d'1 OCTET chacun :
    Ces registres se situent en mémoire à partir de l'adresse $FFFA01
    sur des adresses IMPAIRES.
    
    Ces registres font partie intégrante de la mémoire de notre ST.
    On peut atteindre tous ces registres en MODE SUPERVISEUR, il
    suffira de déposer la nouvelle valeur du registre à l'adresse
    correspondante.(Comme avec les variables système) 

    Nous n'utiliserons qu'une petite partie de ces registres, les
    voici:


  NR°) NOM :Indications (ADRESSE)
  -------------------------------
    1) GPIP:Drapeau de lecture ou d'écriture par le port parallèle
            ($FFFA01)

    2) AER :Donne des information sur le mode de fonctionnement de
            l'interruption 
            ($FFFA03)

    3) DDR :Affecte un sens de transmission (entrée ou sortie) aux bits
            du GPIP
            ($FFFA05)     

    4) IERA:Vecteur bit définissant le niveau d'IPL du MFP à bloquer:
            IPLs de 15 à 8, Voir les interruptions du MFP plus haut
            ($FFFA07)
   
            Bit 7: niveau 15
            Bit 6: niveau 14
            Bit 5: niveau 13
            Bit 4: niveau 12
            Bit 3: niveau 11
            Bit 2: niveau 10
            Bit 1: niveau  9
            Bit 0: niveau  8

     5) IERB:Vecteur bit définissant le niveau d'IPL du MFP à bloquer:
             IPLs de 8 à 0, Voir les interruptions du MFP plus haut
             ($FFFA09)
   
            Bit 7: niveau 7
            Bit 6: niveau 6
            Bit 5: niveau 5
            Bit 4: niveau 4
            Bit 3: niveau 3
            Bit 2: niveau 2
            Bit 1: niveau 1
            Bit 0: niveau 0
            
     6) IPRA:Vecteur bit enclenché automatiquement qui marque l'IPL au
             sein du MFP (bit à 1 = IPL actif) qui est activé,Voir les
             interruptions du MFP pour les détails sur les IPLs.
             ($FFFA0B)
  
            Bit 7: niveau 15
            Bit 6: niveau 14
            Bit 5: niveau 13
            Bit 4: niveau 12
            Bit 3: niveau 11
            Bit 2: niveau 10
            Bit 1: niveau  9
            Bit 0: niveau  8
  
          
     7) IPRB:Vecteur bit enclenché automatiquement qui marque l'IPL au
             sein du MFP (bit à 1 = IPL actif) qui est activé,Voir les
             interruptions du MFP pour les détails sur les IPLs.
             ($FFFA0D)
     
            Bit 7: niveau 7
            Bit 6: niveau 6
            Bit 5: niveau 5
            Bit 4: niveau 4
            Bit 3: niveau 3
            Bit 2: niveau 2
            Bit 1: niveau 1
            Bit 0: niveau 0
  
     8) ISRA:Vecteur bit qui donne les interruptions actives.
             Voir les interruptions du MFP plus haut pour les equiva-
             lences des niveaux d'IPLs.
             ($FFFA0F)               

            Bit 7: niveau 15
            Bit 6: niveau 14
            Bit 5: niveau 13
            Bit 4: niveau 12
            Bit 3: niveau 11
            Bit 2: niveau 10
            Bit 1: niveau  9
            Bit 0: niveau  8
                                 
  
     9) ISRB:Vecteur bit qui donne les interruptions actives.
             Voir les interruptions du MFP...
             ($FFFA11)               
     
            Bit 7: niveau 7
            Bit 6: niveau 6
            Bit 5: niveau 5
            Bit 4: niveau 4
            Bit 3: niveau 3
            Bit 2: niveau 2
            Bit 1: niveau 1
            Bit 0: niveau 0

    10) IMRA:Vecteur bit dans lequel on doit indiquer (par un 1),le niveau
             d'IPL qu'on utilise.( bit nr° 5=IPL 13 si on utilise le TIMER
             A etc...)  
             ($FFFA13)  

            Bit 7: niveau 15
            Bit 6: niveau 14
            Bit 5: niveau 13
            Bit 4: niveau 12
            Bit 3: niveau 11
            Bit 2: niveau 10
            Bit 1: niveau  9
            Bit 0: niveau  8
 

    11) IMRB:Vecteur bit dans lequel on doit indiquer (par un 1),le niveau
             d'IPL qu'on utilise.( bit nr° 5=IPL 5 si on utilise le TIMER
             C etc...)  
             ($FFFA15)
  
            Bit 7: niveau 7
            Bit 6: niveau 6
            Bit 5: niveau 5
            Bit 4: niveau 4
            Bit 3: niveau 3
            Bit 2: niveau 2
            Bit 1: niveau 1
            Bit 0: niveau 0

    12) VR  :Vecteur bit: 

            . Bit nr°3 permet d'obtenir le mode AUTOMATIC END OF INTERRUPT
              ,dans ce cas (bit nr°3 à 1), il ne sera plus utile de modi-
              fier les registres IPR,ISR,IMR ( Voir la programmation des
              TIMERs plus loin, pas de panique !)
            . Bits nr°4 à 7, permet de modifier le nr° du VECTEUR qui sera
              exécuté    

              ($FFFA17)

     13) TACR:Vecteur bit qui controle le TIMER A:
              ATTENTION, seuls les bits 0 à 3 du Registre TACR sont
              utilisés !!!
              ($FFFA19) 
               

              .Nr° des bits 
               du  registre    ACTION sur le TIMER A et PREDIVISEUR
              
                |76543210|                                         |
                +--------+-----------------------------------------+

                 ****0000     STOPPE le TIMER A               
                 ****0001     DELAY MODE, /4
                 ****0010     DELAY MODE, /10
                 ****0011     DELAY MODE, /16
                 ****0100     DELAY MODE, /50
                 ****0101     DELAY MODE, /64
                 ****0110     DELAY MODE, /100
                 ****0111     DELAY MODE, /200
                 ****1000     EVENT COUNT MODE
                 ****1001     MODE MESURE D'IMPULSIONS, /4
                 ****1010     MODE MESURE D'IMPULSIONS, /10
                 ****1011     MODE MESURE D'IMPULSIONS, /16
                 ****1100     MODE MESURE D'IMPULSIONS, /50
                 ****1101     MODE MESURE D'IMPULSIONS, /64
                 ****1110     MODE MESURE D'IMPULSIONS, /100
                 ****1111     MODE MESURE D'IMPULSIONS, /200

    C'est le registre TACR qui permet de coder la FREQUENCE D'APPEL du
    TIMER A.

    EXPLICATIONS:
    -------------      

 -  Le MFP 68901 travaille avec une horloge interne de 24,576 Mhz

 -  Le TIMER A est essentiellement composé d'un REGISTRE DE CONTROLE et
    d'un REGISTRE DE DONNEE.                    --------------------
         ------------------ 
    Le REGISTRE DE CONTROLE indique le mode de fonctionnement du TIMER,
    il s'agit du registre décrit ci-dessus, le registre TACR.
    C'est en positionnant le registre TACR sur les différentes valeurs 
    acceptées (Voir le tableau), qu'on obtient les différents modes de
    fonctionnement du TIMER:
   
      les différents MODES DE FONCTIONNEMENT DU TIMER A sont:
      -------------------------------------------------------
   . Le DELAY MODE:
     --------------
     Le REGISTRE DE DONNEE du TIMER est décrémenté à intervals réguliers
     (à chaque battement de l'horloge interne contenue dans le diviseur)
     seur)et quand ce registre vaudra 1 ,une interruption sera générée.

     NB:  Le registre de DONNEE devra ètre une valeur comprise entre 1 
     ---  et 255


     Exemple:TACR=%0011 
     -------
     On est en MODE DELAY (voir Tableau)
     Le registre de controle TACR vaut %11 et le prédiviseur vaut 16 
     (Regardez le Tableau)   -------------       ------------------- 
     Si on positionne le registre de donnée sur 200 par exemple, notre
     programme sous interruption sera appelé:   ---------------

     245760/16/200=76,8 fois par secondes ...
     -------------
           +-----------------------------------+    
     Soit: |FREQUENCE DU MFP/PREDIVISEUR/DONNEE|
           +-----------------------------------+

     Autre Exemple:TACR=%0010 (voir Tableau)
     Le registre de control TACR vaut %10 et le prédiviseur vaut 10
     (Regardez le Tableau)  -------------       -------------------       
     Si on positionne le registre de donnée sur 32 par exemple, notre
     programme sous interruption sera appelé:   --------------

     245760/10/32=768 fois par secondes ...
     ------------
           +-----------------------------------+    
     Soit: |FREQUENCE DU MFP/PREDIVISEUR/DONNEE|
           +-----------------------------------+
 
     J'y reviendrai quand nous écrirons nos premiers programmes...
        

    . EVENT COUNT MODE:
      -----------------    
      C'est pareil, sauf qu'ici Le MFP ne tient plus compte 
      du PREDIVISEUR...

    . Le MODE MESURE DE LARGEUR D'IMPULSION:
      --------------------------------------
      Identique au DELAY MODE, mais il peut être annulé par une actvité
      des broches d'entrée ou sortie du MFP.


    
    Nous utiliseront surtout le DELAY MODE ...

    Relisez attentivement ce qui a été dit ici, car c'est vraiment très
    important...




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


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

                   

Back to ASM_Tutorial