| ★ CODING ★ LA BIBLE DU CPC 6128 ★ |
| Bible6128 2 - 04 |
2.4 Le traitement des interruptions dans le système d'exploitation La possibilité la plus rapide et la plus puissante de réagir à l'intérieur du système d'exploitation à certains événements est sans doute la technique des interruptions. Une interruption est en général un événement d'ordre électronique qui informe un programme en train de tourner qu'il vient de se produire. En fonction de cet événement, le logiciel doit entreprendre des actions correspondantes et ce, le plus vite possible, suivant le niveau d'urgence. Une telle action sera par exemple le scrolling de l'écran pendant la phase sombre du rayon électronique, de façon à ce que l'image soit le plus nette possible. Il est maintenant temps d'introduire quelques concepts que vous rencontrerez souvent à partir de maintenant, y compris dans le commentaire de la ROM. 1 EVENT signifie tout simplement événement. Comprenez qu'il s'agit d'une sorte d'interruption commandée par logiciel. 2. FRAME FLYBACK n'est rien d'autre que le retour déjà évoqué du rayon de l'écran, ce qui se produit tous les SOèmes de seconde. 3. TICKER est un multiple du fast ticker qui apparaît également tous les 50èmes de seconde. Le tout est traité de façon à ce que le programmeur, donc éventuellement vous même, puisse définir quelles routines de son programme devront être appelées automatiquement, sans aucune intervention supplémentaire, et avec quelle fréquence elles devront être appelées au moment du flyback, ticker ou même fast ticker. Comme préparation, il suffit, outre quelques petits détails, de communiquer une fois l'adresse de cette ou de ces routines. Cette information à préparer s'appelle EVENT BLOCK. Ici est indiqué avec quelle fréquence et quant la routine doit être appelée, si elle est ou non prioritaire par rapport à d'autres routines, etc.. A l'entrée du Ticker, Fast Ticker ou Frame Fly, le système d'exploitation regarde s'il y a des Event blocks correspondants. Si oui, ils sont appelés, en fonction de leur degré de priorité. Certains event blocks existent en permanence, comme par exemple l'action qui consiste à alimenter le registre de couleur au moment du Frame Fly. Les blocs affectés à un événement déterminé sont également reliés ensemble par le pointeur, de sorte que le système d'exploitation peut osciller de l'un à l'autre. Il est donc sans importance de savoir à quelle adresse figure un tel bloc, tant qu'il se trouve dans les 32K centraux de la RAM. Cette petite réserve doit être faite car cette zone est la seule à laquelle il soit possible d'accéder en permanence, indépendamment de la configuration de la ROM. Si un tel bloc doit être exécuté, il est rangé dans ce qu'on appelle Pending Queue. Ce procédé est appelé Kicking. La Pending Queue est traitée à la fin de la routine d'interruption propre du système. Vous vous dites certainement qu'un bloc existant doit naturellement être exécuté. Pourquoi faut-il donc le ranger dans une queue? En fait, les choses ne sont pas aussi simples car vous avez tout à fait la possibilité de suspendre le traitement d'un bloc pour un certain temps, sans que vous ayez à l'extraire de la queue primaire; ceci est d'ailleurs très facile à réaliser avec les event blocks de la ticker queue. A propos: ne croyez pas qu'il n'y ait que cette interruption dans l'ordinateur. Les fanas de l'électronique ont tout à fait la possibilité de produire une interruption à travers le bus d'extension (asynchron), mais il faut bien sûr qu'il y ait une routine correspondante qui puisse 'kicker' l'event block correspondant. Devenons plus concret. Que faut-il faire lorsque vous voulez utiliser ce mécanisme? Octets 0+1 adresse de chaîne pour la pending queue. Ce champ ne doit être alimenté que par le système d'exploitation!
Les six octets pour le Ticker ont la signification suivante:Après donc que vous ayez alimenté votre bloc avec ces valeurs, pour autant que vous les connaissiez, (ce devraient être les 5 derniers octets (event count=0) de la partie commune et, pour le ticker, également les compteurs), vous n'avez plus qu'à charger l'adresse de début de votre bloc dans hl, puis, suivant le cas, à appeler la routine KL ADD TICKER, KL ADD FAST TICKER ou KL ADD FRAME FLY. Pour extraire le bloc de la liste, utilisez les routines KL DEL TICKER, etc.. hl devant cette fois également contenir l'adresse du bloc à retirer. Essayez et observez comment le système d'exploitation procède, car les procédures qui reviennent sans cesse sont également traitées à travers le mécanisme des événements. |
| ![]() |
| Page précedente : Codingbook Bible6128 2 - 03 |
Page créée en 005 millisecondes et consultée 95 fois |






