« Programmation Assembleur Z80/Jeu d instructions » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎RETI : correction de comportement de l'instruction
→‎RETI : Avec explications détaillées du fonctionnement.
Ligne 728 :
Cette instruction boucle en continu jusqu'au déclenchement d'une interruption. On se sert du HALT pour se synchroniser de façon précise sur une interruption. Quand on n'utilise pas de HALT, le saut à l'interruption ne peut se faire qu'après la fin de l'exécution de l'instruction en cours. Si cette instruction est longue, le déclenchement de l'interruption est retardé de quelques cycles d'horloge, ce qui peut être rédhibitoire si on a besoin d'une grande précision (typiquement programmation au vol de la puce vidéo).
==== RETI ====
 
Cette instruction sert à acquitter les interruptions à des périphériques hardware en fin de routine. Il est indispensable de précéder l'instruction avec EI pour que les interruptions puissent se déclencher à nouveau, sinon l'interruption de la carte matérielle restera masquée jusqu'au prochain EI.
Cette instruction sert à acquitter les interruptions à des périphériques hardware en fin de routine.
 
Cette instruction sert à acquitter les interruptions à des périphériques hardware en fin de routine. Il est indispensable de précéder l'instruction avec EI pour que les interruptions puissent se déclencher à nouveau, sinon l'interruption de la carte matérielle restera masquée jusqu'au prochain EI.
 
En effet, le déclenchement d'une interruption (exceptée NMI) met le flag à 0 (les deux copies internes IFF1 et IFF2 du processeur), comme un appel explicite à l'instruction DI.
 
Un appel explicite à EI remet les deux copies IFF1 et IFF2 à 1, mais le processeur ne permettra une interruption qu'après l'instruction suivante (RETI dans ce cas) afin qu'une interruption n'empêche pas son exécution.
 
Dans le cas d'une NMI (Non Maskable Interrupt), seul le flag IFF1 est mis à 0.
La routine de traitement de cette interruption n'est pas obligée d'utilisée l'instruction EI, car les instructions RETN et RETI copie la valeur de IFF2 dans IFF1.
 
==== RETN ====