Originally Posted by byuu
I've mostly cracked Speedy Gonzales. It seems that under certain circumstances, it's possible to glitch the S-CPU MDR to feed back 0x00 instead of the actual MDR. Speedy gets stuck in a loop for several hundred iterations fetching $1818, until eventually it gets $1800 and breaks out (by extreme luck and through multiple nested convolutions. This was definitely a bug in the game and not intentional.)

Logged hardware results and test source code here:

So, you guys are the most pedantic about emulation authenticity (not a bad thing!) ... we can't emulate this. The glitch occurs completely randomly and unpredictably. The closest we can do is simulate it with a pseudo-random number generator, eg:

uint8_t CPU::getMDR() const {
  return (prng() % 255) ? regs.mdr : 0x00;

What would, or rather, what are, you guys going to do for this case? smirk

I find it hard to believe that it would be truly random (or random all the time). I'd expect there to be some special case that's triggering this.

Is the test done using the same screen parameters (possibly even contents) as the place of the bug? Or maybe sound? Are irqs enabled?

(fyi, I know nothing about snes hardware)