I can probably answer this one.
Here's what the four bytes they changed at
6084 do:
Code:
08006084 F1C1F8BC bl 81C7200h
This instruction hooks into a function that is called on every screen transition to do... something. If we follow it to its destination we find the following function that was added to the ROM at
1C7200:
Code:
081C7200 4650 mov r0,r10
081C7202 213C mov r1,3Ch
081C7204 B430 push r4,r5
081C7206 4C06 ldr r4,=2002944h
081C7208 8824 ldrh r4,[r4]
081C720A 2C00 cmp r4,0h
081C720C D003 beq 81C7216h
081C720E 2400 mov r4,0h
081C7210 2500 mov r5,0h
081C7212 E825 ????
081C7214 E002 b 81C721Ch
081C7216 2400 mov r4,0h
081C7218 2501 mov r5,1h
081C721A E825 ????
081C721C BC30 pop r4,r5
081C721E 46F7 mov r15,r14
081C7220 02002944
The first two lines just perform the same function as the instructions that were originally at
6084. After that, the game loads a halfword from
02002944 -- which appears to be the values for the current area and sub area -- and compares them to 0x0000, which happens to be the ACDC Town overworld map. It then loads 0 into r4 and either 0 or 1 into r5 depending on whether you are in the ACDC Town map, and executes the instruction encoded as 0xE825. However, this is actually an invalid CPU instruction (hence the ????) so the emulator doesn't know what to do with it and crashes.
It just so happens that the Virtual Console version of MMBN5 applies a motion blur/frame blending effect to the screen when you are in the ACDC Town map. I have no idea why they did that, my best guess would be because of the flickering helicopter shadow sprite that shows up near the end of the game. Virtual Console versions of games tend to patch out certain effects that could possibly be seizure inducing.
In any case, since 0xE825 is not a valid instruction I'd wager a guess that it actually tells the Virtual Console emulator how to apply the motion blur effect (with r4 and r5 being the parameters). Ideally I suppose the GBA emulator would replicate this effect or simply ignore the instruction, but either way we can simply patch it out.
So to make the game function correctly in conventional emulators, write two bytes
00 00 to
1C7212 as well as to
1C721A.
Now if you don't mind, I'll go ahead and add this patch to the topic that was linked in the first post.