In ZSNES, those barrels won't stop to spin; it should spin manually.

Moderator: ZSNES Mods
I remember this bug was reported ~3 years back, and if I'm not mistaken, Overload said it was because we're not accessing a certain register correctly.pagefault wrote:This bug sucks. Mainly because I have no idea what could be causing it. Has it ever worked properly before?
Off-topic, use this and enable the LCD colors filter, your eyes will thank you for it. (And it's handy to disable with games that were made before developers started compensating for the display's color range.)JAPPsmash wrote:I have been playing with the Gameboy Advance version on this game and I have notice that the barrel rotation controls has a bug in the SNES version. I tried with Snes9X and it worked fine...
In ZSNES, those barrels won't stop to spin; it should spin manually.
sith-smasher: READ DAMNIT!anomie wrote:pagefault knows this already (from IRC), but for the rest of you...
The problem is that the game reads an open bus register, at $2000-$2001, and expects certain bits to be set in the result. It only works on the real SNES accidentally, while zsnes returns 0 for these unmapped registers and breaks the game.
A quick fix would be to return 0x20 from both registers, since they're most likely to be accessed as "LDX $2000" (rather than say "LDA $002000" or "PEA $2000 / PLD / LDX $00"). A real fix would involve implementing open bus, at least for the commonest case of data reads like this (opcode fetch from open bus is much more involved and much less common).
BTW, history: This worked for a long time in snes9x due to an uninitialized stack variable. Then we started initializing it (to 0, like zsnes), and the game broke. Then we hacked it much as above, then we fixed it...
Code: Select all
<jmr> bsnes has the most accurate wiki page but it takes forever to load (or something)