Hmm j'ai retrouvé ça dans le code de
mon émulateur en C# here...
goto HandleBreakpoints;
}
, apparemment j'utilisais 20 cycles: // Check for pending interrupts
if (ime && (temp = bus.EnabledInterrupts & bus.RequestedInterrupts) != 0)
{
// Push PC on the stack
bus.WriteByte(--sp, (byte)(pc >> 8));
bus.WriteByte(--sp, (byte)pc);
// Disable interrupts
ime = false;
// Set PC to new value acording to requested interrupts
if ((temp & 0x01) != 0)
{
bus.InterruptHandled(0x01);
pc = 0x0040;
}
else if ((temp & 0x02) != 0)
{
bus.InterruptHandled(0x02);
pc = 0x0048;
}
else if ((temp & 0x04) != 0)
{
bus.InterruptHandled(0x04);
pc = 0x0050;
}
else if ((temp & 0x08) != 0)
{
bus.InterruptHandled(0x08);
pc = 0x0058;
}
else if ((temp & 0x10) != 0)
{
bus.InterruptHandled(0x10);
pc = 0x0060;
}
cycleCount = 20; // I don't know the exact interrupt timing but I read somewhere it is 20, so instead of 4 i put 20
Je sais plus si l'approximation est entièrement exacte, mais ça donnait des résultats plutôt corrects en général (ceci dit j'avais quelques rares problèmes de timing a certains moments mais j'ai jamais trop réussi à trouver la source après avoir vérifié le code en long en large et en travers ^^)
Egalement ça peut t'intéresser (même si c beaucoup moins utile

on// It seems the CPU used in GB hardware is Sharp LR35902 (aka GB-Z80)
) mais j'avais trouvé le vrai nom du CPU en complétant ma documentati