10-15-4 Boucle de temporisation

 

Pendant l’explosion ou pendant l’affichage de message, on a recours à une temporisation. Et il est toujours plus agréable de pouvoir en contrôler la durée, en secondes par exemple. Ici la temporisation se fait par 50èmes de secondes, mais en fait la base de temps utilisée est le 300ème de seconde. C’est le rythme auquel le système rétablit certains paramètres par interruption de programme. C’est pour cette raison que l’on désactive les interruptions en début de jeu, d’autant que ce dernier n’en utilise pas vraiment. Ainsi on gagne quelques cycles machine supplémentaires. Pour la temporisation il faut toutefois les réactiver, ce que l’on fait avec l’instruction EI (Enable Interruptions). L’instruction DI (Desable Interruptions) permet ensuite de les désactiver à nouveau. L’attente des 300èmes de secondes se fait avec l’instruction HALT qui s’arrête jusqu’à la prochaine interruption. Et comme il n’y a que l’interruption système qui a lieu, on se base donc dessus. On établit ensuite un premier rebouclage pour les 50èmes de secondes, puis pour la durée indiquée dans A.

 

TEMPO    PUSH BC

         EI                     ; Réautorise les interruptions

 

TEMPO1   LD B,5                 ; Nombre de boucles pour 1/50ème de seconde

TEMPO2   HALT                   ; Attente d'interruption 1/300ème

         DJNZ TEMPO2            ; Rebouclage pour 1/50ème

         DEC A        

         JR NZ,TEMPO1           ; Rebouclage pour A x 1/50ème de secondes

 

         DI                     ; Désactive à nouveau les interruptions

         POP BC

         RET

 

Le registre A étant limité à 255, on ne peut donc pas dépasser 5.1 secondes. Pour obtenir plus, il faut passer par un rebouclage 16 bits, comme expliqué dans la partie 8.

 

 

<< RETOUR  ---  SUITE : Les dialogues >>