6Fermer8
BrunniLe 15/10/2009 à 23:17
Nan mais j'ai vérifié, c'est *probablement* à l'utilisateur de les sauver, parce que les jeux ont du code comme ça:

0040  jp $0469    ; VBLANK INT handler
0469  push af
[...]
0572  pop af
0573  reti        ; retour d'interruption (enable interrupts + return)

En fait quand une interruption se produit, seul le PC est sauvé sur la pile, et il prend la valeur du vecteur correspondant (40, 48, ... suivant l'interruption), les interruptions sont désactivées, le halt éventuellement levé et là quelques cycles sont consommés (je cherche justement à savoir combien wink).

Peut être qu'un code C te sera plus parlant, même si j'en doute grin
// Interruptions en attente?
if ((IME || halted) && (REG(IF) & REG(IE))) {
	unsigned i;
	// Teste les bits actifs
	for (i = 0; i < INT_LAST; i++) {
		if (REG(IF) & REG(IE) & BIT(i)) {
			// Désactive les interruptions pour éviter les IRQ multiples,
			// désactive le flag dans IF et saute à l'interruption
			REG(IF) &= ~BIT(i);
			IME = 0;
			call(0x40 + 8 * i);
			halted = 0;
			return 4;	// cycles consommés
		}
	}
}