ZuperIndex
SOMMAIRE
ZuperIndex

Où manger
PRECEDENTE
ZuperIndex

ZuperIndex
LE REGISTRE DE STATUS
Interruptions auto-vectorisées Fonction TI-92 Introduction
Fonction TI-92 Niveau de priorité
Fonction TI-92 Vecteurs en RAM
Fonction TI-92 Comment marchent-elles ? Barre

Page précédente

Monter Descendre Retour Introduction

puce Les interruptions automatiques (auto-int en anglais), aussi appelées interruptions masquables ou interruptions matérielles, sont des interruptions (au nombre de sept) demandant automatiquement l'exécution de sous-programmes spécifiques lors d'événements matériels définis par les concepteurs de la TI-92.

Interruptions dites masquables car l'utilisateur peut les désactiver temporairement s'il le désire, ainsi toute exécution du code associé à l'auto-int est prohibée.

Interruptions dites matérielles car pour chacune d'entre elles c'est un événement matériel (hardware) qui va les déclencher l'exécution du code associé.


Barre



Monter Descendre Retour Niveau de priorité

puce Au nombre de sept, elles possèdent chacune un niveau de priorité, ce niveau est codé sur 3 bits appelés I3, I2 et I1 (formant le masque d'interruption), dans la partie système du registre de statut (bits 10, 9 et 8 de SR).

puce Il permet de créer une hiérarchie entre les auto-int car nous ne pouvons les désactiver qu'en partant de la fin, ainsi vous ne pouvez pas désactiver l'auto-int 3 sans désactiver les auto-int 2, et 1. De même l'auto-int 7 sera désactivée à la condition que toutes les autres auto-int le soit également, cette dernière ayant le niveau le plus élevé (7).

puce Pour résumer le tout, le microprocesseur ne déclenchera l'exécution du code associé à une auto-int que dans le cas où le niveau de priorité de cette dernière serait strictement supérieur au masque d'interruption. Pour désactiver les auto-int 1, 2, 3 et 4 il suffit de donner la valeur 4 au masque d'interruption.

puce Voici un récapitulatif utile :

Auto-int activéesAuto-int désactivéesValeur du masque d'interruption (bits I3, I2, I1)
aucune1, 2, 3, 4, 5, 6, 77
71, 2, 3, 4, 5, 66
7, 61, 2, 3, 4, 55
7, 6, 51, 2, 3, 44
7, 6, 5, 41, 2, 33
7, 6, 5, 4, 31, 22
7, 6, 5, 4, 3, 211
7, 6, 5, 4, 3, 2, 1aucune0


Barre



Monter Descendre Retour Vecteurs en RAM

puce Il y autant de routines différentes à exécuter et surtout à identifier en mémoire que d'auto-int,
ceci est réalisé par une liste de sept pointeurs (appelés vecteurs pour les interruptions) contenue de l'adresse $000064 à l'adresse $00007C (un pointeur est une adresse donc est de type double mot soit 4 octets) :

$000060 ... $000064 vecteur de l'auto-int 1
$000068 vecteur de l'auto-int 2 $00006C vecteur de l'auto-int 3
$000070 vecteur de l'auto-int 4 $000074 vecteur de l'auto-int 5
$000078 vecteur de l'auto-int 6 $00007C vecteur de l'auto-int 7

puce Ces routines que nous pouvons littéralement définir comme des sous-programmes (mais spéciaux comme vous le verrez un peu plus loin), sont chargés d'effectuer des tâches bien précises, en prenant en compte (comme c'est parfois le cas) des informations retournées par d'autres interruptions automatiques, c'est par exemple le cas pour l'auto-int 1 qui va prendre en compte l'auto-int 2 (clavier).

puce Qui dit pointeurs dans la RAM dit… pointeur modifiable et c'est effectivement le cas !
Il devient alors possible de détourner ces interruptions mais dans des conditions restreintes.

Il faudra tout de même désactiver la protection de la mémoire en désarmant le bit 2 à l'adresse $600001, en effet toute écriture dans la mémoire inférieure à l'adresse $000120 n'est autorisée que sous cette condition, n'oubliez pas de réactiver la protection de la mémoire après avoir fini (la réciproque étant l'armement du bit 1 à m'adresse $600001).

puce Notez que ces vecteurs étaient tous prévus pour pointer des routines en ROM, Fargo modifie touefois quelques-uns de ces vecteurs (auto-int 1 et auto-int 6) pour fonctionner.

puce Voici une capture d'écran du logiciel Hexview 2.5 de Benoît Scherrer, celle-ci montre les vecteurs des interruptions automatiques de la TI-92II (les vecteurs sont différents selon les TI) :

puce

Barre



Monter Descendre Retour Comment marchent-elles ?

puce Et bien considérons qu'aucune interruption n'est masquée et intéressons-nous à l'auto-int 2,déclenchée quand une touche différente de [ON] est appuyée.

puce Le microprocesseur prend connaissance de la demande faites de la part du périphérique lié à l'auto-int 2 (le clavier sur les TI-92), fini l'exécution de l'instruction courante et va déposer successivement sur la pile le registre de pointeur d'instruction PC (pour revenir au programme que nous allons quitter) puis le registre de statut SR, soit 4 puis 2 octets.

L'exécution se poursuit à l'adresse elle-même contenue à l'adresse associée à l'auto-int 2 soit $000068.

La routine exécute alors la tâche qui lui incombe et va se terminer non pas par l'instruction RTS (qui restaure seulement PC) mais par l'instruction RTE (ReTurn from Exception) qui va, elle, restaurer PC et SR.

puce Le programme interrompu par l'auto-int poursuit son exécution comme si de rien n'était.


Barre



 

 

Lisez la section sur les droits d'auteur et la licence d'utilisation avant de distribuer Zguide.

Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés