Let me start by saying that I am very new to mame, and currently only have an analog joystick, so what I am saying may be old news and/or may not apply to those with 8 way joysticks.
For those who may not be familiar, Mame maps an analog joystick (maybe all joysticks) into a 9x9 map. A typical 8 way map would look like
777888999
777888999
777888999
444555666
444555666
444555666
111222333
111222333
111222333
Where 7 is the direction up-left, 8 is up, 9 is up-right, etc. and 5 is neutral. This map is basically fine for 8 way.
However, for 4-way games the default "sticky" map is
s8888888s
4s88888s6
44s888s66
444555666
444555666
444555666
44s222s66
4s22222s4
s2222222s
With the sticky map, when the joystick hits an "s" direction, it retains the previous direction in which it was pointed. For example, if the joystick was pointed all the way up at an "8" in the top row, and then moved all the way to the upper right corner to the "s", the sticky default would be for you to continue moving up. This, IMHO, is the primary difficulty in playing 4 way with a non 4-way joystick. In my personal experience, if I am playing a 4 way game, and have the joystck in the "8" direction, and then move it to the upper-right corner, my intention is actually to change direction to "6", not continue moving towards "8"
That being said, I have made a minor mod to the input.c routine in mame to allow for an additional "direction" in the joystick_map. This direction is "c" for change, and it behaves exactly the opposite of "s". Currently, "c" can only go in the 4 corners of the map, and causes a change of direction when the joystick hits that position as described below:
Corner the "c" is in Previous Direction New Direction Upper Left Up Left
Upper Left Left Up
Upper Right Up Right
Upper Right Right Up
Lower Left Down Left
Lower Left Left Down
Lower Right Down Right
Lower Right Right Down
If "c" is found anywhere other than the 4 corners, it will behave as a sticky "s" direction.
To use this, you need to download the mame development environment (really easy) here
http://mamedev.org/tools/ and the source code here
http://mamedev.org/release.html then replace src\emu\input.c with the one attached (note, you must rename input.txt to input.c) and follow these compile directions from mamedev.org/tools
Open up a command-line window. First, ensure that the mingw/bin directory is part of your search path. Do that by typing:
set path=%PATH%;mingw\bin
Next, switch to the directory where the MAME sources live:
cd mame-source-path
And then execute mingw32-make to build it:
mingw32-make
Wait a while, and you will have a fully built MAME executable.
To use the change directions, run "mame -joystick -joystick_map c8888888c.4488.4448.4445"
Please let me know if it is helpful and/or you have any problems with it