OK, I was able to reproduce the bug. Hopefully these notes will help you out some.
http://setsuna.the2d.com/files/edf_notes.zip
Included is some of the game disassembly, as well as a patch that fixes the game in ZSNES v1.42 and above, demonstrating that I have the correct problem area. If you don't want to use xkas, just use a hex editor and go to 0x0000a1 (0x0002a1 with header, 0x0080a1 ROM memory location) and overwrite 0xf0 0x51 with 0xea 0xea.
Essentially, it is in fact clearing WRAM thats breaking the game. More specifically, the following happens at the start of the game:
It starts at code location $00:8012 by clearing $7e:1f32 to 0x00. It then reads from $7e:1f34 and up to see if WRAM contains the string 'JALECO-SFX' or not. If it does, then nothing happens. Otherwise, the string is copied letter by letter from ROM at $00:8037 to that WRAM location, and $7e:1f32 is OR'ed with each letter in the string. So the end result is that at system power-up, $7e:1f32 equals the bitwise OR of the entire string 'JALECO-SFX', or $7e:1f32 = $6f. While the purpose of OR'ing the letters may seem strange, it basically makes $7e:1f32 non-zero if even one letter at $7e:1f34[...] doesn't match the test string. It's essentially a test to see if the SNES was just powered on, or reset.
This changes the way the game initializes later on in the code, specifically at code location $00:809e.
Code: Select all
00809E LDA $1F32 [001F32] A:FFFF X:FFFF Y:0000 S:1FFD DB:00 D:0000 P:06 e
0080A1 BEQ $80F4 [0080F4] A:0000 X:FFFF Y:0000 S:1FFD DB:00 D:0000 P:06 e
Upon power-on, the code will end up going to $00:80a3. After reset, the code will go to $00:80f4. Unfortunately, the code is
wildly different, and spans several pages. I don't have a clue what it's trying to do. My
guess is that it handles WRAM initialization differently in an effort to save the high score list, and like grinvader said when he started the post; it initializes the SPC700 differently, which would explain why the sound breaks.
So basically, I don't know what's wrong; but it's very unlikely to be the fault of just clearing WRAM. The quick fix would be to just add a hack that patches ROM $00:80a1 with { 0xea, 0xea }, the proper fix would be delving through the different routines at $00:80a3 and $00:80f4, finding out the differences, and fixing whatever is wrong; which is likely another difference between powering on the SNES and resetting it.
---
Unrelated: It would seem ZSNES 1.42 still clears WRAM to 0x55 upon power-on. I guess BS games are special cased to reset WRAM to 0xff? I don't care either way, just wanted to correct my error above.