If that is the Xin-Mo controller then the recent Raspbian kernel has an update to make it more HID compliant which means ignoring out of range values. From what I can make out the Xin Mo reports that it will return a -1 lower value but actually returns -2. Clamping rather than ignoring would have worked, but for my use I commented out the new code in hid-input.c and recompiled the kernel, and it works fine for me with 0.6 beta 5 (look for the 'Ignore out-of-range values as per HID specification' comment). Note that recompiling on the pi itself took about 8 hours - I'll do a cross compile on OSX next time, apparently it is something like 15 mins. Note also that I only needed to point the pi startup config at my new kernel image, I didn't replace modules etc.
It was the Xin-Mo controller yeah. Thanks for your comments, helped me get to the bottom of the issue. In the end I went with a mini-pac, just easier to work with and manage.
I've been wrestling with the Xin-Mo problems for a while now. Finally got it working using a combination of beta 2 (thanks nicktones) AND modifying the advmame.rc file, updating "device_joystick auto" to "device_joystick raw" (thanks Liam's Attic). I can finally fit the screen into the cabinet for the last time and start playing games!