First post, by mkarcher
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 bytes0267BD: 3 bytes0548A2: 3 bytes0899D5: 3 bytes0EFF5E: 7 bytes0F1A36: 7 bytes0F1ED9: 7 bytes0F1F09: 7 bytes0F2227: 7 bytes0F27B9: 7 bytes0F2A36: 7 bytes0F2D10: 7 bytes0F4D9E: 3 bytes0F5623: 7 bytes0F6442: 7 bytes0F9040: 7 bytes0FAB84: 7 bytes0FE7FB: 7 bytes0FE983: 7 bytes100012: 3 bytes1004C0: 3 bytes100B03: 3 bytes100E59: 3 bytes103B9A: 7 bytes10A7CD: 7 bytes10A80F: 7 bytes10ADA9: 7 bytes10ADC6: 7 bytes10AE38: 7 bytes10AE55: 7 bytes10AF1B: 8(!) bytes10AF41: 7 bytes11A9E3: 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".