7Fermer9
GoldenCrystalLe 16/10/2009 à 05:47
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 grinon// 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