VOGONS


First post, by mkarcher

User metadata
Rank l33t
Rank
l33t

I recently set up a AMD K6-2 machine on an MVP3 mainboard. I used a ATI Radeon 9250SE card I just happened to have (of course I did not spend a lot of money on that low-end card...). I installed Windows 2000, SP4 with current updates, the VIA 4in1 driver and installed the latest AMD/ATI Catalyst driver with Windows 2000 support, i.e. Catalyst 6.2. No luck with 3D accelleration with DirectX 6, as included with Windows 2000. This did not really bother me, and I installed DirectX 8. After that, dxdiag told me that DirectDraw and Direct3D accelleration is available, but as soon as I clicked the "Test Direct3D" button, the system crashed with a blue screen even on "software rendering".

The Bluescreen error code is 0000001E (C000001D F4EFF7B9 00000000 FE52A008) in ATI3DUAG.DLL, which indicates an unhandled exception in Kernel Mode. Even more precise: The unhandled exception is an invalid opcode exception. As it turns out, this DLL uses the PREFETCHNTA instruction, with is available in SSE (Pentium 3 onwards) as well as in Extended 3D!Now (Athlon onwards) in code paths without processor checks. After patching all those PREFETCHNTA instructions out and recalculating the checksum of ATI3DUAG.DLL using EDITBIN /RELEASE (editbin is part of the Windows Platform SDK, or whatever Microsoft calls it these days), I could sucessfully run 3DMark 2001 (although the CPU bound tests show atrociously bad results, to no one's surprise).

I patched the following areas (by overwriting them with NOP instructions, i.e. 0x90 bytes):

023F48: 3 bytes
0267BD: 3 bytes
0548A2: 3 bytes
0899D5: 3 bytes
0EFF5E: 7 bytes
0F1A36: 7 bytes
0F1ED9: 7 bytes
0F1F09: 7 bytes
0F2227: 7 bytes
0F27B9: 7 bytes
0F2A36: 7 bytes
0F2D10: 7 bytes
0F4D9E: 3 bytes
0F5623: 7 bytes
0F6442: 7 bytes
0F9040: 7 bytes
0FAB84: 7 bytes
0FE7FB: 7 bytes
0FE983: 7 bytes
100012: 3 bytes
1004C0: 3 bytes
100B03: 3 bytes
100E59: 3 bytes
103B9A: 7 bytes
10A7CD: 7 bytes
10A80F: 7 bytes
10ADA9: 7 bytes
10ADC6: 7 bytes
10AE38: 7 bytes
10AE55: 7 bytes
10AF1B: 8(!) bytes
10AF41: 7 bytes
11A9E3: 3 bytes

All 3-byte-areas look like 0F 18 0x where x is one of 0,1,2,3,6 or 7. All 7-byte-areas look like 0F 18 0x 0F 58 4x 40, and the one 8-byte-area looks like 0F 18 45 00 0F 18 45 40.

The image checksum is at offset 000148. If you don't want to install the Windows SDK, you can also patch it from DF D0 27 00 to 16 F3 27 00 by hand. If the checksum is wrong, Windows fails to load the accelleration driver, and DxDiag shows DirectDraw and Direct3D accelleration to be "not available".