Dolphin, the GameCube and Wii emulator - Forums

Full Version: Tales Of Symphonia - DotNW (New Game loop)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
When you try to play a new game in tales it asks you if you want to load gamecube data from the previous game, but even if you choose "no" it still checks for a gamecube memory card, and there's no possible way to bypass it! The menu loops around this question. I checked the bug out in the Google code site of Dolphin, and the developers know about the bug, but when are they gonna fix it??? Huh
not anytime soon, I think. lol
Dunno if that is so hard to fix, since it is about floating point.
Use r3109 or older if you want, or compile Dolphin yourself and replace the problem file with older one.
I've already tried using 3089 and it has the exact same bug, and if I use a really old revision it might work but it will have serious graphic glitches...
Oops... sorry. I was using 32bit, so dunno about 64bit. I track the problem on 32bit, but the problem should be the same. Are you sure that is 3089? Because I test the game with r3095 and it still fine.
No logs or anything?
A noob question, where I can get the logs? from the logwindow there was nothing special, as well as the console.
If it is from debugger, which one should I log? Symbol map?
Yeah i was talking about log window Tongue
Odd how nothing shows up there either.
from /trunk/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp

void fcmpu(UGeckoInstruction _inst)
{


/*
float fa = static_cast<float>(rPS0(_inst.FA));
float fb = static_cast<float>(rPS0(_inst.FB));
// normalize
if (((*(u32*)&fa) & 0x7f800000UL) == 0) (*(u32*)&fa) &= 0x80000000UL;
if (((*(u32*)&fb) & 0x7f800000UL) == 0) (*(u32*)&fb) &= 0x80000000UL;
*/

// normalize if conversion to float gives denormalized number
if ((riPS0(_inst.FA) & 0x7ff0000000000000ULL) < 0x3800000000000000ULL)
riPS0(_inst.FA) &= 0x8000000000000000ULL;

if ((riPS0(_inst.FB) & 0x7ff0000000000000ULL) < 0x3800000000000000ULL)
riPS0(_inst.FB) &= 0x8000000000000000ULL;
double fa = rPS0(_inst.FA);
double fb = rPS0(_inst.FB);

u32 compareResult;
if (IsNAN(fa) || IsNAN(fb)) compareResult = 1;
else if (fa < fb) compareResult = 8;
else if (fa > fb) compareResult = 4;
else compareResult = 2;

FPSCR.FPRF = compareResult;
SetCRField(_inst.CRFD, compareResult);

/* missing part
if ((frA) is an SNaN or (frB) is an SNaN)
then VXSNAN ¬ 1 */
}

If I delete the codes I bold, the game can actually pass the loop.
Any ideas?
I have no idea about that code, I don't know much c++... But what I know is that the bug is still there, even in the very latest build!!! Sad
if ((riPS0(_inst.FA) & 0x7ff0000000000000ULL) < 0x3800000000000000ULL)
riPS0(_inst.FA) &= 0x8000000000000000ULL;

Was a fix to a problem....
Pages: 1 2