GeForce 4 Hackintosh Guide: NV25, NV28, and MX Compatibility

A practical guide to getting GeForce 4 Ti and MX cards working in Hackintosh builds from Tiger to Snow Leopard, covering device ID injection, framebuffer config, and known limitations.

The GeForce 4 series—NV25 and NV28—is one of those cards that either works perfectly or drives you crazy, depending on the variant and macOS version. These cards were contemporary with the PowerPC G4 and early Intel Macs, and they appear in many vintage builds running Mac OS X Tiger (10.4) through Snow Leopard (10.6). However, their compatibility is far from universal. A GeForce 4 Ti 4600 may boot to a gray screen on a 10.5.8 system if the wrong framebuffer is injected, while a lowly GeForce 4 MX 440 works flawlessly with no kext modifications. Knowing exactly where each variant lands on the compatibility map saves hours of debugging.

Architecture Overview: NV25 vs. NV28 vs. NV17

NVIDIA released multiple chips under the GeForce 4 branding, but they are not all equal from macOS’s perspective. The high-end GeForce 4 Ti series uses the NV25 or NV28 core, which includes a hardware vertex shader and dual pixel pipelines. The budget GeForce 4 MX series is based on the older NV17 core, essentially a rebranded GeForce 2 with improved memory controller. macOS drivers treat these two families differently because the MX series lacks the fragment shader capabilities required by Core Image in later versions.

If you are building a Hackintosh for Mac OS X 10.4 Tiger, both the Ti and MX cards work out of the box with Apple’s stock NVDANV10Hal.kext and NVDAResman.kext. The trouble begins with 10.5 Leopard and especially 10.6 Snow Leopard, where Apple dropped support for the NV17 in favor of the GeForce 6 and 7 series. A GeForce 4 MX 440 will still produce a picture in Leopard, but Quartz Extreme and Core Image remain disabled—the system reverts to software rendering. The Ti models retain full acceleration through 10.6.8, but only if the correct device ID is present in the Info.plist.

Device ID Injection and Kext Patching

The stock NVDANV10Hal.kext in Snow Leopard (10.6.3 and later) includes the following device IDs for the GeForce 4 series:

  • 0x0251 – GeForce 4 Ti 4600 (NV25)
  • 0x0253 – GeForce 4 Ti 4800 (NV28)
  • 0x0258 – GeForce 4 Ti 4200 (NV25)
  • 0x0259 – GeForce 4 Ti 4400 (NV25)
  • 0x0171 – GeForce 4 MX 440 (NV17)
  • 0x0178 – GeForce 4 MX 420 (NV17)
  • 0x0179 – GeForce 4 MX 460 (NV17)
  • 0x0181 – GeForce 4 MX 4000 (NV18)

If your card’s device ID is missing—common with OEM variants like the GeForce 4 MX 440 SE (0x0172) or the dual-DVI Ti 4800 SE (0x0252)—you must add it manually. Open /System/Library/Extensions/NVDANV10Hal.kext/Contents/Info.plist as root, locate the IOPCIMatch key under IOKitPersonalities, and append your device ID in hex format, separated by a space. For example, to add the MX 440 SE, change the string to include 0x017210de. Rebuild kext cache with sudo kextcache -system-caches and reboot. This is a safe operation as long as you keep a backup of the original Info.plist.

Framebuffer Configuration in Chameleon and Clover

GeForce 4 cards do not use the same framebuffer personalities as GeForce 6 or 7. For Chameleon 2.0 RC5 and later, set GraphicsEnabler=Yes and let the bootloader detect the card. This usually works for Ti models. If you get a black screen or distorted output, force a specific framebuffer by adding device-properties to your boot plist. The correct framebuffer for NV25 is NVPM (internal name: NVDA, 0x0251). For NV28, use NVPH. MX cards should use NVCAP injection with a value of 04000000 00000001 00000000 00000000 00000000.

Under Clover, the situation is simpler: disable InjectNvidia and rely on the NvidiaGeneric option in the config.plist under SystemParameters. Clover’s automatic detection works reliably for Ti cards but sometimes misidentifies MX variants as GeForce 2, causing a kernel panic on 10.6. If you see a panic at NVDANV10Hal load, switch to manual injection via the DeviceProperties section and add @0,compatible with value NVDA,NVMac.

Known Limitations by macOS Version

macOS Version GeForce 4 Ti (NV25/28) GeForce 4 MX (NV17/18)
10.4 Tiger Full acceleration Full acceleration
10.5 Leopard Full acceleration VESA only (no QE/CI)
10.6 Snow Leopard Full acceleration (32-bit kernel) VESA only

Note that Snow Leopard’s 64-bit kernel does not load the NVDANV10Hal kext at all. If you boot with arch=x86_64, any GeForce 4 card will fall back to VESA framebuffer at 1024×768. To maintain acceleration, force the 32-bit kernel by adding arch=i386 to your boot flags. This is not a problem on 10.4 or 10.5, as those versions lack a 64-bit kernel option on Hackintosh hardware.

Display Outputs and Dual-Link DVI

GeForce 4 Ti cards typically include one DVI-I and one VGA connector. The DVI port is single-link only, meaning maximum resolution over DVI is 1920×1200 at 60 Hz. Dual-link DVI—required for 2560×1440 or 2560×1600 monitors—is not supported by the NV25 or NV28 TMDS transmitter. If you need higher resolution, use the VGA port with an active adapter, or switch to a GeForce 6 series card. MX cards often lack DVI entirely; they use a DMS-59 connector that requires a splitter cable for dual VGA output. macOS recognizes both heads on the MX 440 with DMS-59, but mirror mode may glitch in Leopard.

Power and Thermal Considerations

The GeForce 4 Ti 4600 draws approximately 45 W under load and requires a single Molex power connector. Older power supplies with 20-pin ATX connectors can handle this, but the 12 V rail must supply at least 15 A. MX cards draw under 25 W and often run passively cooled. In a Hackintosh context, ensure your motherboard’s AGP slot (if using an AGP card) provides adequate voltage. Many late-model Socket 775 boards with AGP slots only supply 1.5 V signaling, while some GeForce 4 AGP cards require 3.3 V. Check the card’s keying: universal AGP cards have two notches and work in both 3.3 V and 1.5 V slots. If your card is 3.3 V only, it will not seat in a 1.5 V slot without damage.

Practical Build Example: Tiger on an AGP Pentium 4

For a 10.4.11 installation on an Intel D865GLC motherboard with a Pentium 4 3.0 GHz, a GeForce 4 Ti 4200 works with zero patching. Use Chameleon 2.0 RC5 with GraphicsEnabler=Yes. The card outputs 1920×1200 over DVI with Quartz Extreme enabled. Sleep wakes correctly because the NV25 driver handles AGP bus power management. The only caveat is OpenGL performance: the Ti 4200 scores about 150 FPS in Xbench’s Quartz test, which is adequate for UI compositing but insufficient for modern 3D applications. If you plan to run Final Cut Pro 6, a GeForce 6600 or 7300 GT yields noticeably better real-time playback.

For readers building a similar system, verifying the PCI device list before installation can prevent surprises. Our guide on Reading a 2014 Hackintosh PCI Device List: What Every Entry Means explains how to interpret the output of lspci -nn from a Linux live USB, which is the safest way to confirm your GPU’s device ID before booting macOS.

Diagnosing Failed Acceleration

If your GeForce 4 Ti boots but menus are translucent and the dock does not animate, Core Image is not loading. Run kextstat | grep NVD in Terminal. A healthy system shows NVDANV10Hal, NVDAResman, and NVDAStartup. If only NVDAStartup appears, the kext failed to match your device ID. Double-check the Info.plist edit and rebuild caches. Another symptom: the login window appears at native resolution but the desktop is stuck at 1024×768 after login. This indicates the graphics driver loaded in VESA mode. Force 32-bit kernel mode and ensure no other graphics kexts (like NVDANV40Hal from a GeForce 6) are loaded simultaneously—they conflict and cause the system to fall back.

Final Note on Data Safety

Before modifying any kext, create a bootable backup of your macOS installation. A misconfigured NVDANV10Hal.kext can prevent the system from reaching the login window, and recovery mode on 10.4–10.6 does not include a terminal for reverting changes. Use a separate volume with a known-good installation or a Linux live USB to restore the original file. The same caution applies to bootloader configuration: keep a copy of your working boot plist or config.plist on a FAT32 partition that any OS can read.