Comment
Author: Admin | 2025-04-28
1 EI DMA Son 1 Bit 5 de DCSR à 1 EI DMA Son 0 Bit 6 de DCSR à 1 EI Si vous êtes bien au fait du fonctionnement des interruptions, l'avantage de l'acquittement spécifique ne vous aura pas échappé : dans ce mode le Z80 ne peut pas rater d'interruption puisque le périphérique maintient sa requête jusqu'à ce qu'elle soit explicitement validée. En revanche, en aquittement universel, si le Z80 était sous DI lors que l'interruption, celle-ci est perdue à jamais… ce qui peut parfois se révéler critique.Outre cet inconvénient de perte potentielle d'interruptions, en mode d'acquittement universel, les bits 4, 5 6 et 7 du registre ASIC DCSR sont alors gelés… Cela ne devrait en principe pas poser de problème vu qu'en mode vectorisé on n'a pas à se soucier du périphérique qui a généré l'interruption puisque le saut se fait automatiquement à la bonne adresse…Le bug DMA 0 vs PRIOui mais voilà, c'était trop beau, les ingénieurs qui ont pondu les CPC plus n'ont pas pu résister à l'envie d'introduire un bug ! Executez le petit programme que je vous ai préparé et vous comprendrez tout de suite. Normalement, puisqu'on n'utilise pas les DMA son et encore moins leur générateur d'interruptions, seul le Gate Array (émulé par l'ASIC) fait des requêtes d'interruption tous les 300ème de secondes ; donc notre programme devrait sauter en ”Raster” régulièrement… De ce fait on devrait retrouver un 255 en &0000. Tapez simplement la ligne suivante sous BASIC après avoir exécuté le programme assembleur :WHILE 1:? PEEK(0);:WENDHorreur ! On a à peu près 70% de 0 et 30% de 255 ! Le Z80 confond les interruptions Gate Array et les interruptions DMA Son 0. J'ai fait tout un tas d'essais, il confond de même les interruptions DMA 0 et les interruptions Gate Array (une interruption DMA 0 saute de temps en temps en ”Raster” également). Je me suis alors dit, mettons nous en mode “Raster Interrupt” (valeur non nulle pour le registre PRI de l'ASIC) ; eh bien on observe exactement les mêmes phénomènes que l'on soit en mode “Raster Interrupt” ou en mode émulation Gate Array…Le mode d'acquittement spécifique devient dès lors un incontournable. Outre le fait qu'il empêche qu'on puisse rater des interruptions, il offre également la possibilité de consulter les bits 4, 5, 6 et 7 du registre DCSR. Or, en les testant, on peut rediriger une interruption qui aurait pris le mauvais chemin en tout début des routines d'interruption ”Raster” et ”Son0”. Certes ça rajoute un peu de lourdeur, mais ça reste somme toute parfaitement gérable.Enfin, n'oublions pas qu'à côté de ça, on peut placer notre vecteur d'interruption où on veut et que les interruptions des DMA
Add Comment