Hey, so, I've tracked down the problem with Chocobo races under NT/2000/XP. The problem looks to me like a NULL pointer dereference. Specifically, they are doing:
mov ecx, dword ptr [0e626d8h]
mov dx, word ptr [eax + ecx + 0186b8h]
There are no other accesses to the variable at 0e626d8h, which essentially, since it is in the uninitialized data segment, means that it is a NULL pointer. Under Windows 95/98, for no apparent reason, the pages corresponding to the addresses from 0x10000-0x20000 are mapped to something which looks to me like 16-bit code. So, since the offset puts it safely into that region, it doesn't crash. Now, it look like maybe this means that it has a bug under Windows 9x, but since I don't know how this value should be set, I couldn't fix it to correctly set this value. But, under the assumption that the values that are getting pulled in are just garbage (which again, appears to hold under Windows 9x), I did the next best thing. I changed the 0x186b8 to a value that puts it inside the FF7 executable itself, so that it still has some values there to read.
I'm not sure of the best way to distribute information on this patch, but if anybody cares to make this change on their own and try it out, the following instructions should suffice:
First off, copy ff7.exe to ff7.bak or whatever.
Now, I'm using an unpatched FF7 executable plucked from the Eidos Platinum Collection version of FF7. The file size is 5820416, crc32 is E79D5195, and md5 sum is e1a6875b37540d616d34f14102d9c2fc. If you have the same executable that I do, the change you need to make is at offset 3641e6, otherwise, you'll have to search for the right bytes to change. So, now, open up ff7.exe in your favorite hex editor, and find the bytes b8 86 01 00
. Again, if you have the same version of the executable that I do, you will find these bytes at 0x3641e6 from the beginning of the file. Change them to 00 00 50 00
. That is sufficient to get the chocobo races working on my machine. (Note that there may be other difficulties associated with running FF7 under Windows NT/2K/XP, though many of those are solved by the Application Compatibility Toolkit from Microsoft.)