- Analogue Stick Control -

Experimentation with the PSX analogue pad shows that although the analogue stick resolution is high, it does not accurately revert to home position.

Where the movement vector is between -128 and +127, there may be as much as a +/- 40 point discrepancy around the home position. To compensate for this in your programs, you may reduce the stick resolution or clip the analogue value.

Reducing the Stick Resolution
To reduce the stick resolution, you divide the returned analogue value (to produce an integer). The smallest acceptible division would in this case be by 40 and would give you an effective analogue resolution of +/- 4.

Clipping the Analogue Value (Thresholding)
To clip the analogue value, you could choose to ignore any value between -40 and +40
(so -42=-2, -41=-1, -40=0, -39=0, ..., +39=0, +40=0, +41=1, +42=2, etc...)
This would give you an effective resolution of -88/+87.

Since the returned analogue value seems accurate apart from the home position, I would suggest that you use the clipping method. Such a change would probably not be perceived by users of your software.
You may also want to remove the slight directional bias (if you make the clipping limits -41 and +40, the effective resolution will be +/- 87 instead of -88/+87).

Be aware that this +/-40 discrepancy was deduced from experimentation with just one analogue controller and discrepancies in the manufacturing process, temperature fluctuations (and numerous other miscellaneous effects) may produce inaccuracies even larger than this in individual cases. I have also not tested any other type of analogue controller, but I presume that similar inaccuracies will occur with them all.

http://www.netyaroze-europe.com/~mrfrosty