★ CODING ★ AVEC THOR ★ |
Bidouilles ACPC n°47 - Les vecteurs system (5/6) |
Qui ne connait pas ce dieu, si bien remis au goût du jour par les Marvels Comics? Ce brave médecin, qui d'un coup de canne sur le sol se transforme en dieu arme d'un marteau aux pouvoirs foudroyants. Mais j'y songe, nous aussi nous avons des vecteurs qui nous rendent marteau... La dernière fois, nous en étions restes aux vecteurs permettant la gestion des RSX. Malheureusement. il nous manquait encore quelques-uns de ces fantastiques outils pour mener à bien notre inquisition au sein du système. Cela n'est plus, car, dans ces pages, vous trouverez quelques informations complémentaires qui vont vous éclairer les points encore obscurs. Les RSX, c'est bien pratique, mais c'est mieux si on peut aussi utiliser les interruptions qui nous permettent de faire tant de jolies choses. Vous savez bien, ces trucs qui sont appelés tout seul 50 ou 300 fois par seconde. De quoi faire de belles choses résidentes et indépendantes du programme principal. L'AVENEMENT DES ÉVÉNEMENTS Avant tout. nous devons savoir que les vecteurs qui vont suivre utilisent des blocs d'événement qui permettent au système de travailler avec diverses routines d'interruption fonctionnant a diverses vitesses. Prenons le cas d'un bloc d'événement comme vous en verrez de nombreux si vous utilisez cette forme de programmation. En voici la structure réduite a son plus simple effet :
A ces blocs d'évènement viennent se souder des blocs de contra le qui permettent au système de partager le temps d'interruption entre toutes les routines installées, ceci sans trop ralentir le programme principal. Il en existe de deux sortes : une pour les interruptions rapides et l'autre pour les interruptions « lentes ». LENT, TERNE ET CLAIR Quoi que 300 ou 50 fois par seconde, on ne peut pas dire que ce soit franchement escargotesque, mais bon... Si vous avez a utiliser les interruptions rapides, soit celles émises par le CRT tous les 1/300' de seconde, il vous sera possible de retrouver un bloc de contrôle d'interruption dont la structure est simple. Les premiers composants en sont un pointeur système sur deux octets, suivis d'un bloc d'évènement de la même structure que celui que nous avons décompose dans le paragraphe precedent . Si vous vous posez les mêmes questions que moL vous verrez que deux pointeurs systèmes se suivent. Va savoir a quoi ((a sert tant de redondance. M'enfin, ils doivent bien savoir ce qu'ils en font
Puis suit le bloc d'événement dont nous n'avons cesse de parler df3puis le début PRECAUTIONS D' UTI LISATION Un conseil, ne perdez jamais l'adresse d'un bloc de contrôle, car vous pourrez en avoir besoin a maintes reprises. Il est aussi très intéressant de travailler sur les valeurs utilisées par ces blocs de manière a forcer la priorité de telle ou telle action. Il est de plus tellement pratique de savoir exactement ou se trouvent les trucs qui influencent nos programmes. Notez aussi que, parfois, la routine d'interruption n'est pas forcement sur le plan de ROM sélectionne. Dans ce cas, il arrive que le système décide de ne pas lancer votre petit programme en attendant de meilleures conditions pour le faire. Il vaut mieux, alors, déplacer la routine d'interruption dans les 32 Ko de mémoire centrale, ce qui permet de la voir lancée presque a tous les coups, si le niveau de priorité est bien entendu assez fort Analysez bien les blocs de contrôle. Dans la majeure partie des cas, il est possible de réinitialiser les valeurs de contrôle, ainsi que celles de priorité, pour permettre le lancement systématique de son programme. A vous de tripoter... VECTORISEZ Comme pour les mois précédents, nous vous donnons 4 indications par vecteur passe en revue:
En voiture Thor, et sans tarder. . BCD7 : initialisation et déposé d'un bloc d'événement dans la liste de ceux a activer lors d'une interruption en provenance du CRT . . BCDA: déposé d'un bloc d'événement dans la liste de ceux a activer lors d'une interruption en provenance du CRT . BCDD : enlève un bloc d'événement de la liste de ceux a activer lors d'une interruption en provenance du CRT . BCE0 : initialisation et dépose d'un bloc d'événement dans la liste de ceux a activer lors d'une interruption rapide (tous les 1/300' seconde) . BCE3 : pose d'un bloc d'événement dans la liste de ceux a activer lors d'une interruption rapide . BCE6 : enlevé un bloc d'événement de la liste de ceux à activer lors d'une interruption rapide . BCE9 : dépose simple d'un bloc d'événement dans la liste de ceux il activer lors d'une interruption normale (tous les 1/50' seconde) . BCEC : enlevé un bloc d'événement dans la liste de ceux à activer lors d'une interruption normale. . BCEF : initialise un bloc d'événement de manière à ce qu'il soit gérable par les deux vecteurs precedents . BCF2 : actionne un bloc d'événement .BCF5 : fait le ménage dans toutes les files d'attente d'événements temporises . BCF8 : détruit un événement en l'enlevant physiquement de la file d'attente . BCFB: recherche de l'événement suivant a traiter . BCFE : traite un bloc d'événement . BD01 : termine le traitement d'un événement . BD04 : interdiction des événements temporises normaux . BD07 : réautorise les événements temporises conventionnels Quand on a utilise le vecteur précèdent. On peut inverser l'action avec celui-ci. . BD0A : interdit un événement . BD0D : donne le temps écoule en 1/300' de seconde depuis l'allumage du CPC Voila, il ne nous reste plus qu'a passer en revue l'interfaçage avec le matériel. Et c'en est fini des interruptions. Notez que pour posséder ces dernières, rien ne vaut le fait de les utiliser a fond et de les analyser au microscope. En attendant je m'interromps... Sined le Barbare tabac, ACPC n°47, avril 93, p38, 39
|