Mouse Ballistics

Microsoft’s ‘excellent’ article and Windows’ mouse handling (when Enhance Pointer Precision is enabled) actually contain a large conceptual error.

The error is this: the ‘mickey’ value in the Vmouse formula is (should be) a different mickey value than the one in the Vpointer formula, BUT in the actual implementation (the mouse driver) they are assumed to be the same.
This error has the effect that the mouse sensitivity depends upon the screen refresh rate, which doesn’t make any sense.

Try this:

  • Enable Enhance Pointer Precision.

  • Set your display’s refresh rate to the lowest usable value (warning: one older equipment, setting refresh rate outside the bounds of your monitor can damage the monitor…)

  • VERY SLOWLY, move the mouse a defined distance on the MOUSE PAD.

  • NOTE how far the pointer moves on the screen.

  • Set your display’s refresh rate to the highest usable value.

  • VERY SLOWLY, move the mouse the same defined distance on the MOUSE PAD.

  • NOTE how far the pointer moves on the screen.

(What happens is that the higher the screen refresh rate, the further (and faster) the pointer on the screen moves.)

Now WHY should the distance moved by the pointer on the screen be different for the two different screen refresh rates?
If your refresh rate is higher, do you want the mouse to move further and faster for a given mouse input?
NO you don’t: it doesn’t make sense. It’s a bug caused by the conceptual error.

Gamers know about this, and create workarounds to remove the effect:
http://www.gotfrag.com/cs/forums/thread/346432/ (post #5)

Jeff, you have repeated the conceptual error with your 3 mickeys example: In the context of polling the mouse, the mouse says: I have moved 3 mickeys since I was last polled.
If we know the mouse is polled 500 times a second, and the 3 mickeys of movement happened in 1/500th of a second, then in one second, we expect 3 * 500 mickeys.
What of the screen refresh rate? 3 mickeys of movement during one screen refresh? In 1/60th of a second, we saw 3 mickeys of movement, so then in one second we will see 3 * 60?
NO. Why would there be 3 mickeys of movement in 1/60th of a second when the mouse tells us it has seen 3 mickeys in 1/500th of a second?
We would expect MICKEYpointer to be ~25 in 1/60th of a second.

There is a larger conceptual problem: Why introduce screen resolution and refresh rate at all?
Could not / should not the problem of mouse acceleration be stated within, and solved within, the realm of mickeys and Vmouse alone?
Windows 2000 and earlier managed to handle mouse input and acceleration without having to reference display parameters in the equation (1 mickey == 1 pixel + acceleration as configured).

Clarification: The Enable pointer precision behaviour I describe above applies to the built-in Wndows XP mouse drivers.
It may or may not apply to the built-in Windows Vista mouse drivers and probably does not apply when Logitech Mouseware or MS Intellipoint drivers or other drivers that implement their own acceleration are used.

I’ve disassembled the Windows XP (32-bit) and Vista (32-bit) code that handles the ‘Enhance pointer precision’ feature and can see the conceptual error as actually implemented in code (and found another error in the process).

I’ve written a blog article about XP & Vista ‘Enhance pointer precision’ mouse handling:
http://donewmouseaccel.blogspot.com/2009/06/out-of-sync-and-upside-down-windows.html
… which details the errors I mentioned above, which can be summarised as:
The “Enhance pointer precision” code uses a calculation that should have included:
× ScreenResolution(DPI) ÷ MouseBusUpdateRate.
The Microsoft XP Mouse Ballistics page would use:
× ScreenResolution(DPI) ÷ ScreenRefreshRate.
The (incorrect) calculation actually used is:
× ScreenRefreshRate ÷ ScreenResolution(DPI).

Horizontal scrolling support is pretty useless, it’s true. And that’s why the Logitech mice that support side scrolling are better than their MS equivalents. The side wheel flicking is an intuitive and effective way of navigating forward and back while web browsing, and it’s easy to remap it this way with the Logitech software. There is NO support for remapping these functions in Microsoft’s drivers.

Since we’re talking about mouse configs, has anybody tried configuring their outer buttons or left/right wheel click (for the Logitechers) to copy/paste? I’ve done this and my programming/browsing/misc productivity has shot through the roof!

As a sidenote, I’m using a trackball for my desktop, but have fallen in love with the Logitech VX Nano that I bought for my wife’s new laptop. Heck I might even get it for my desktop!

Are there any controllermate users around that could possibly send me configurations that mimic windows 7 with enhanced pointer precision checked/ticked?