One more vote for Ultrasticks, as i use 3 of them for a long time. I wanted a joystick to play all kind of games: Analog, 8/4 way, diagonal for QBert.
I use a thick spring and a round restrictor. The stick is set to analog mode and i limit the directions by just creating a <game>.ini file, adding a joystick_map and placing it into the Mame INI folder.
For Crushroller, Pacman, Lady Bug and other 4-way joystick games -> joystick_map s8.4s8.44s8.4445
QBert diagonals -> joystick_map 4444s8888..444458888.444555888.ss5.222555666.222256666.2222s6666.2222s6666
Qix, Frogger 4-way tight control -> joystick_map 888888888.488888886.448888866.444555666.444555666.444555666.442222266.422222226.222222222.
You can also create horizontal/vertical limits or leave it in analog mode for Space Harrier. They all work perfectly!