What's new
On a side note: At the moment I do not own a PC steering wheel. If there was enough interest and a general consensus on which wheel is best, I'd be willing to work on a translator for that for both NAMCO and MIDI games so those of us without dedicated driving cab with MIDI FFB can enjoy these games more. I would likely need a wheel to be donated to me, though.

I'm not committing to this at the moment, and am nowhere close to being ready to take on that project, but throwing it out there as something I'd potentially be willing to do in the future.
 
Guess who has a working Namco to MIDI FFB translator!

So it wasn't a timing issue at all. I just wasn't handling ACKs to POWER changes correctly.

It's all totally doable with a single MEGA 2560.

I want to make a few changes to the handling of the translations to MIDI commands, but otherwise I'm pretty happy with the results.

The reason I want to make some changes is that some of the jerking left/right commands are pretty quickly overpowered by a centering command to the point where the effect isn't felt as well as I would want it to be, so I need to delay centering.

I eventually want to have this board sit in between the stock MIDI wiring so that it can take over for NAMCO or non-FFB games or pass-through for MIDI games, so I've got some work to do to figure that out.

I also need to do some WMMT tests, making sure to change the baudrate for those games. I'm optimistic it will work without any other changes needed, but we'll see.

At this point I'm very happy with the progress I have made. It makes these games totally different being able to play them with FFB.
That is seriously awesome. Wanted to add that the amount of information in this thread is astonishing and hats off to you and everyone who has contributed knowledge. Looking forward to the day when we can have a multi-brand sega driving cab!
 
Guess who has a working Namco to MIDI FFB translator!

So it wasn't a timing issue at all. I just wasn't handling ACKs to POWER changes correctly.

It's all totally doable with a single MEGA 2560.

I want to make a few changes to the handling of the translations to MIDI commands, but otherwise I'm pretty happy with the results.

The reason I want to make some changes is that some of the jerking left/right commands are pretty quickly overpowered by a centering command to the point where the effect isn't felt as well as I would want it to be, so I need to delay centering.

I eventually want to have this board sit in between the stock MIDI wiring so that it can take over for NAMCO or non-FFB games or pass-through for MIDI games, so I've got some work to do to figure that out.

I also need to do some WMMT tests, making sure to change the baudrate for those games. I'm optimistic it will work without any other changes needed, but we'll see.

At this point I'm very happy with the progress I have made. It makes these games totally different being able to play them with FFB.
@winteriscoming can you maybe post some videos or pics about current status. I'm sure it will make a lot of us happy ;)
 
I'm waiting for your final prototype!
If I can have FFB in my OR2 twin cab with MK2, it would be amazing.
 
I also need to do some WMMT tests, making sure to change the baudrate for those games. I'm optimistic it will work without any other changes needed, but we'll see.
And... WMMT2 works completely differently.

Whereas MKGP2 sends a constant stream of commands that I can use as a pulse to keep things going, WMMT2 only sends commands when it wants something to happen... so my established code for the translator that relies on frequent commands doesn't work with WMMT2.

I would think if I retool this to work with WMMT2, that it would still work with MKGP2.
 
I know it's easier to say than to do it, but the more [functions] the merrier :)
 
I know it's easier to say than to do it, but the more [functions] the merrier :)
I'll get it working with all the NAMCO games I have access to.

I made a lot of progress getting the translator to work in WMMT2, and it's mostly working, but I've got some holding force issues I need to work out. The same issues may be present in MKGP2, but I hadn't noticed. Basically I'm tracking holding force changes from the NAMCO protocol and updating MIDI when needed, but I'm running into issues where the MIDI holding force isn't actually changing even though I can see that I've issued the command. I might have to go back and test valid holding force values to see if they're more strict than I had thought.

The translations are mostly a matter of scaling the NAMCO value to the MIDI value. My assumption at the moment is that I'm sending a value for MIDI that doesn't actually amount to a valid holding force, so it stays with the previous force.
 
I might have to go back and test valid holding force values to see if they're more strict than I had thought.

The translations are mostly a matter of scaling the NAMCO value to the MIDI value. My assumption at the moment is that I'm sending a value for MIDI that doesn't actually amount to a valid holding force, so it stays with the previous force.
When I tested valid holding force ranges for MIDI FFB previously, I was just incrementing/decrementing a value that I sent in the holding force command, making note of the lowest value with noticeable holding force and driving it up to the max, making sure I got an ACK from the FFB board. I had this recorded as a range from 0x30 to 0xFF. What had not occurred to me to test was toggling back and forth between no holding force and the test value to ensure that it was valid. I have now discovered that while the values are accepted by the board and an ACK comes back, anything above 80 has no impact on holding force and it keeps the previously sent valid force.

My translations, as mentioned earlier, are done with scaling the NAMCO ranges to the MIDI ranges. In the case of WMMT2 where it goes from no holding force to a very high value (compared to MKGP2) on the selection screens, it was getting translated to a value of over 0x80 and therefore the previous value (0x00) was being kept and never picked back up until a lower valid value came in... :rolleyes:

This will likley impact MKGP2 because there are times when I'm hit with an item and don't notice any changes making me think some of the FFB effects are lame... I bet they were supposed to be raising the holding force. 8o
 
I've got the translator working for both WMMT2 and MKGP2!

I haven't tested the WMMT1 or MKGP1, and probably should... but hopefully they both behave like their sequels.

As I suspected a solution for WMMT2 that does not rely on a constant stream of commands still works for MKGP2.

In my brief testing on both games, I have found that the effects warrant translation tweaks unique to each game, so that's how I'm handling it. While I am scaling the holding force values from NAMCO to MIDI, I get the impression that even the strongest force in NAMCO is very weak compared to what the MIDI board is capable of, and WMMT2 drives it up pretty high. So I have it scaled back a little there, resulting in what would be too weak of holding force in MKGP2. :P


This will likley impact MKGP2 because there are times when I'm hit with an item and don't notice any changes making me think some of the FFB effects are lame... I bet they were supposed to be raising the holding force.
I'm happy to discover that this was the case. As an example: if you get hit with the Boo item, the holding force goes up pretty high, simulating Boo making your wheel heavier. Previously I wasn't getting that effect because it was resulting in too high of a holding force value to be valid.

I'll try to get some pics/video of the translator in action.
 
I have made an exciting discovery!

I also want this translator to work for Lindbergh games that use the RS422 FFB board, which I neither own nor have access to at the moment, making the prospect of translating kind of difficult. :(

The RS422 board is very similar looking to the MIDI one and interfaces with the same motor. What are the chances that the protocol is the same? Would they have bothered changing what works?

I decided to boot up my Lindbergh Multi with ID4 and see what FFB commands it's sending on COM 1 in the test force feedback test menu.

Being that the MIDI board uses the MIDI baudrate of 31250 I went ahead and started there, getting some data that didn't look too good. That isn't a common baudrate used outside of MIDI, I figured they probably aren't using that for RS422 and I went with the closest common baudrate of 38400.

What I'm seeing looks pretty familiar when compared to my MIDI initialization logs! 8o

Code:
Started!
80 0 0 0  
80 0 0 0  
FF 0 0 7F  
FA 0 10 6A  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
FD 0 0 7D  
81 30 40 71  
82 7F 54 29  
FC 0 3F 43  
FD 0 0 7D  
80 0 1 1  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
84 1 0 5  
F0 0 0 70  
80 0 0 0  
FA 0 1F 65  
86 0 0 6  
85 0 0 5
I don't think any translation is going to be needed other than moving the data back and forth between the game and the MIDI board at the necessary baudrates. I should be able to code for that and test pretty quickly.
 
So the Lindbergh can communicate directly with the MIDI board through a baudrate signal converter, but there appears to be one factor missing or handled differently and that's holding force.

In my MIDI experiments, and indeed in the way I am driving the MIDI board with the NAMCO translator, I have 83 commands as holding force. In my MIDI logs I can see that holding force is established during the initialization sequence. In the LINDY log above, I'm not see that happen, so the realworld result is that the wheel goes through it's automatic init sequence where it turns a quarter circle to the left (I assume under some self-directed holding force) and then stays there in spite of commands to move due to holding force being too weak.

Perhaps the RS422 board has a higher default holding force, making it so that holding force does not have to be established during initialization.

As it is, without establishing a holding force, the MIDI wheel will fail initialization because it does not re-center. I can manually re-center the wheel at the correct time and pass, and even get some FFB effects in game. ID4 and 5 seem mostly to keep the wheel centered. I wasn't noticing much jerking back and forth when hitting walls or the rival car. Hummer seems to mostly center and rumble ALL-THE-TIME, so not sure what to make of that one. Rtuned passed init, but I never felt any effects, not even self-centering. Sega Race TV mostly self-centered. OR2SP in standard mode would not boot, giving an error that some board is not plugged up. I saw a few FFB commands issued over COM1 before the error, but not sure what to make of that.

At any rate, those were all just quick tests with the Arduino passing along the CMDs and ACKs without any intervention. I will probably start by focusing on one game and look at logs closer to see what's happening.

For sure the MIDI board seems to be giving ACKs for every command coming from the LINDY, so it doesn't appear that there's an updated protocol. It may just be operating under some different assumptions that the where the MIDI board has different defaults than the RS422 board.

Also interesting is that one of the games, not sure off hand, sent a command that resulted in 4-byte ACKs (normally they're just one byte) that seemed to be changing based on wheel position... which is pretty interesting. I hadn't been able to figure out how to get positional data outside of monitoring the wheel pot.

Anyway, I'm thinking I can inject a holding force after init and see if it behaves better. I know when self-init is happening because the ACKs are always 0x44 during and then go to 0x00 after. So if I see 0x44 I know it's initializing and when I start seeing 0x00 I can send a command for holding force.
 
I'm going to take a break from the Lindbergh stuff for now. It has gotten to the point of being kind of boring booting the games and staring at the stream of commands. :P
So far I haven't been able to figure anything out to get it working better than I'm seeing. I'm calling it kind of compatible as-is. Being that I don't know the full effects present in stock hardware with the RS422 board, I can't say for sure whether or not the effects I'm seeing are what I should be expecting. I'll come back to this at some point and research further.
 
I'm going to take a break from the Lindbergh stuff for now. It has gotten to the point of being kind of boring booting the games and staring at the stream of commands. :P
So far I haven't been able to figure anything out to get it working better than I'm seeing. I'm calling it kind of compatible as-is. Being that I don't know the full effects present in stock hardware with the RS422 board, I can't say for sure whether or not the effects I'm seeing are what I should be expecting. I'll come back to this at some point and research further.
Do you have a FFB board for lindbergh???
 
No, I don't have the FFB board for Lindbergh and I don't currently want to invest any money into it.
 
What if I send you one? ;)
That would be appreciated, but I wouldn't want to put you out. Lindbergh is the system I'm the least enthusiastic about for drivers.

Wouldn't shipping to the US from EU end up being pricey?
 
Back
Top