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.