How every single solitary arcade ff device that I've ever looked at works is this. Limit switches are just that, switches. i.e. either an optical gate or plain old cherry switch that gets tripped when the motor/wheel, ect goes to far and physically passes through it. In other words, it's just an input, like a pushbutton or anything else. It isn't built into the motor/piston or anything, it is a stand-alone switch. If youa re doing anything other than hooking up the limits switch bits to inputs then you are hacking it.
Your problem is you are trying to equate directx force feedback and how it operates with how the arcade hardware operates. They don't operate in the same way at all, so somewhere there has to be a hack. It can't be in mame, so we do it on our end. Directx ff devices don't have the same kind of limit switches. They have fail safe switches in case something goes crazy wrong, but in general the limit is determined in software by the pot value.
I think you are confused about limit switches. There is the limit (holy crap we are at the end, turn it off!) and there is a motor/ram position. Motor/ram positions are inputs as well, we hook those up to an analog input port. We don't bind them to the wheel position though, it is a seperate input. This gives the user the freedom to do any kind of force feedback arrangment possible and more importantly, hook up the original arcade hardware as intended.
For an end user to use a ff wheel (which let's face it, is a gross hack) they would do the following:
Bind the steering wheel's axis to the wheel axis in mame.
Also bind the steering wheel's axis to the motor position value in mame.
Allow some middleware app (probably mamehooker) to trigger any limit switches via code whenever the wheel's axis is at it's limit OR when the pot hooked up to track the motor is at it's limit OR skip all of it and simply have physical limit switches already binded inside mame.
I don't need the position of the motors vai outputs in mamehooker because on a dx ff wheel, the position of the motor is the position of the wheel. And if it's the arcade hardware or some sort of custom rig, the motor will be hooke up to a pot to track position, and I simply read that value instead. Also you are forgetting, The motor position in mame is the virtual one. Since I read the joystick anyway (how do you think I make it rumble?
) I can simply read any analog value there.