TulioAdriano
Student
Been a long time dream to have a proper Model 2 Daytona USA board. Before I was finally able to bring it home, I set up my "poor man's Daytona USA" using a dedicated PC that boots straight to the game and a Logitech G29.
I knew that the real thing though, would be much more complicated to get up and running, first due to the wiring nightmare related to a racing cabinet, and second due to the complexity of the real force feedback controllers that the real cabinet uses.
This board came with graphical glitches, which I repaired by replacing the texture RAMs. I can write a repair log if anyone is interested in that kind of thing. Once the glitches were fixed, I focused my attention on the schematics (very hard to find ones that are high resolution and clear to read) and how the controllers are wired. I could have saved sometime by just goggling it, but still, it was fun to figure things out. Basically the controls are nothing more than 5K linear potentiometers, both for the accel/brake and for the steering. After having some fun driving the game with potentiometers, that gave me the idea that I could potentially operate the game using a PS4 controller, and taking advantage of the analog triggers for accel/brake and the analog stick for steering.
So I built a proof of concept on a breadboard with an Arduino Uno and a USB host shield for the proof of concept:
It worked great, though it had a bit too much sensitivity, so I read the ranges that the emulator detected from the G29 steering wheel and implemented a bit of an exponential curve to smooth out the driving with the analog stick.
Once I was satisfied with that, I decided to turn my attention to what it would take to bring the G29 into the mix. Being a PS3/PS4 controller I figured I'd be able to read its inputs with the same method I was reading the PS4 controller... which sort of worked but only partially. I could not get the accelerator/brake axis reads and couldn't get the shifter position either. To work around, I started reading the G29 as a HID device, which, with some decoding work I was able to figure out the button mask. I had all the inputs from the stick and axis now, but still nothing from the shifter. So that was time to figure out how to read the shifter directly. Luckily someone did a nice SimRacing library to interact with the shifter so after confirming that it worked, I prepared some code to translate the shifter position to the input combination used by the Model 2 shifter switches.
I took a week off during Christmas and New Year and went working on a PCB to host all the stuff. I could have went the route of pulling all the chips from the host shield along with the microcontroller to the board, but I figured that for a first prototype having a direct interface with the Arduino would save me some time and potential errors that would require board revisions. So I went for it. Since the Uno I/O pins are quite limited I added the second microcontroller to the board which is dedicated to reading and translating the shifter. Then added a switch to the board to tell the main MCU which device method to use (since each controller is read in a different manner), and it was ready to manufacture.
A week and a half later, my newest creation came to greet me in all of it's green mask glory:
The SEGA logo and the inscriptions are made to match the other peripheral boards used by the Model 2 such as the Audio and Drive boards, and keep the consistency in the design.
I'm glad I decided to use the host shield and the Arduino Uno in the mix. With 3 layers, the assembled board has a bit of resemblance to the actual Model 2 and it's 4 board stack. Quite charming.
I used a short 50 pin and 26 pin IDC flat cables which fits perfectly with the I/O connectors in the filter board (after sanding the key notch). The red LED was an afterthought. At first I figured the power LED on the Uno would be enough to tell me the system was up, but all Model 2 boards have those red LEDs so I added it as a bodge. Since the legs and resistor run on the under side, it looks clean. Not fancy but not ghetto either. It blends in well.
And there you have it, in all of it's 24" CRT glory connected through the OSSC. This is no Daytona Cabinet, but an upgrade to a "less poor man's Daytona USA". It suits my needs. The G29 stick powers with spring tension so, while that's not the real force feedback like I'd get from the emulator, it still provides a good arcade feel to driving the game. I don't have a Drive Board yet, once I get one, I'll try to reverse engineer the signals and figure out what the game is doing in terms of requesting force feedback, hopefully I can update the firmware later to support sending those commands to the steering wheel. Let's go away! Gonna fly sky high now!
Due the requirement of minimum 5 PCBs, I ended up with 4 extras, but that's fine. I have no plans of getting any more Model 2s though, that's for sure. Long easy right, maybe? I don't think so.
Thanks for reading.
I knew that the real thing though, would be much more complicated to get up and running, first due to the wiring nightmare related to a racing cabinet, and second due to the complexity of the real force feedback controllers that the real cabinet uses.
This board came with graphical glitches, which I repaired by replacing the texture RAMs. I can write a repair log if anyone is interested in that kind of thing. Once the glitches were fixed, I focused my attention on the schematics (very hard to find ones that are high resolution and clear to read) and how the controllers are wired. I could have saved sometime by just goggling it, but still, it was fun to figure things out. Basically the controls are nothing more than 5K linear potentiometers, both for the accel/brake and for the steering. After having some fun driving the game with potentiometers, that gave me the idea that I could potentially operate the game using a PS4 controller, and taking advantage of the analog triggers for accel/brake and the analog stick for steering.
So I built a proof of concept on a breadboard with an Arduino Uno and a USB host shield for the proof of concept:
It worked great, though it had a bit too much sensitivity, so I read the ranges that the emulator detected from the G29 steering wheel and implemented a bit of an exponential curve to smooth out the driving with the analog stick.
Once I was satisfied with that, I decided to turn my attention to what it would take to bring the G29 into the mix. Being a PS3/PS4 controller I figured I'd be able to read its inputs with the same method I was reading the PS4 controller... which sort of worked but only partially. I could not get the accelerator/brake axis reads and couldn't get the shifter position either. To work around, I started reading the G29 as a HID device, which, with some decoding work I was able to figure out the button mask. I had all the inputs from the stick and axis now, but still nothing from the shifter. So that was time to figure out how to read the shifter directly. Luckily someone did a nice SimRacing library to interact with the shifter so after confirming that it worked, I prepared some code to translate the shifter position to the input combination used by the Model 2 shifter switches.
I took a week off during Christmas and New Year and went working on a PCB to host all the stuff. I could have went the route of pulling all the chips from the host shield along with the microcontroller to the board, but I figured that for a first prototype having a direct interface with the Arduino would save me some time and potential errors that would require board revisions. So I went for it. Since the Uno I/O pins are quite limited I added the second microcontroller to the board which is dedicated to reading and translating the shifter. Then added a switch to the board to tell the main MCU which device method to use (since each controller is read in a different manner), and it was ready to manufacture.
A week and a half later, my newest creation came to greet me in all of it's green mask glory:
The SEGA logo and the inscriptions are made to match the other peripheral boards used by the Model 2 such as the Audio and Drive boards, and keep the consistency in the design.
I'm glad I decided to use the host shield and the Arduino Uno in the mix. With 3 layers, the assembled board has a bit of resemblance to the actual Model 2 and it's 4 board stack. Quite charming.
I used a short 50 pin and 26 pin IDC flat cables which fits perfectly with the I/O connectors in the filter board (after sanding the key notch). The red LED was an afterthought. At first I figured the power LED on the Uno would be enough to tell me the system was up, but all Model 2 boards have those red LEDs so I added it as a bodge. Since the legs and resistor run on the under side, it looks clean. Not fancy but not ghetto either. It blends in well.
And there you have it, in all of it's 24" CRT glory connected through the OSSC. This is no Daytona Cabinet, but an upgrade to a "less poor man's Daytona USA". It suits my needs. The G29 stick powers with spring tension so, while that's not the real force feedback like I'd get from the emulator, it still provides a good arcade feel to driving the game. I don't have a Drive Board yet, once I get one, I'll try to reverse engineer the signals and figure out what the game is doing in terms of requesting force feedback, hopefully I can update the firmware later to support sending those commands to the steering wheel. Let's go away! Gonna fly sky high now!
Due the requirement of minimum 5 PCBs, I ended up with 4 extras, but that's fine. I have no plans of getting any more Model 2s though, that's for sure. Long easy right, maybe? I don't think so.
Thanks for reading.