Using PS1/PC Densha de Go! controller SLPH-00051/TCPP-20001/DGOC-44U on PS4/Switch Densha de Go!!

Items needed

A Densha de Go! controller (PS1 original version SLPH-00051, the one-handle version TCPP-20001, or the USB PC version DGOC-44U)

A Titan Two

A few micro USB cables

A PlayStation 4 with controller/A Nintendo Switch with a USB controller

A PlayStation 4/Nintendo Switch Densha de GO!! game

[Required for SLPH-00051 and TCPP-20001 only]:

Either

  • Arduino Leonardo (or equivalent). Note that it has to have at least one 3.3V power output
  • 6 male-to-female jumper cables

or

Adding a USB interface for the PS1 Densha de Go! controller

Do this if you are using PS1 Densha de Go! controller.

Arduino approach

Cabling

Using the jumper cable, connect the Densha de Go! controller with the Arduino Leonardo.

PlayStation 1 controller pin numbers

---------------------

\ 1 2 3 4 5 6 7 8 9 /

 -------------------

Connection to Arduino Leonardo

* PlayStation 1 controller pin 1 (DATA) --> Arduino Leonardo digital port 12

 * PlayStation 1 controller pin 2 (CMD) --> Arduino Leonardo digital port 11

 * PlayStation 1 controller pin 4 (GND) --> Arduino Leonardo port GND

 * PlayStation 1 controller pin 5 (VCC) --> Arduino Leonardo port 3.3V

 * PlayStation 1 controller pin 6 (ATT) --> Arduino Leonardo digital port 5

 * PlayStation 1 controller pin 7 (CLK) --> Arduino Leonardo digital port 4

Set up Arduino IDE

Install the IDE is available at https://www.arduino.cc/en/Main/Software.

Note that you may need to fix the avrdude install in the Arduino IDE. To do this, download its latest version at its official site https://www.nongnu.org/avrdude/. Replace arduino-1.8.6\hardware\tools\avr\bin\avrdude.exe and arduino-1.8.6\hardware\tools\avr\etc\avrdude.conf with the ones that you find in the download.

Download and install the following Arduino libraries. They are in the form of zip files.

Program the Arduino Leonardo

In your Arduino IDE, create a text file with content shown at https://github.com/tylau0/DenGo/blob/main/PSX2USB_mod4.ino. It is modified from the PSX2USB.ino example at https://github.com/SukkoPera/PsxNewLib/blob/master/examples/PSX2USB/PSX2USB.ino. The changes are the Arduino Leonardo ports to use (to match my cabling), the Joystick type (so it could be detected by the PC as a typical gamepad device) and most importantly the registration of the D-pad components as buttons rather than axes (so the simultaneous presses of opposite directions could be detected which is crucial for the detection of the controller as a Densha de Go controller by the respective games), and the use of the PsxLibrary which could support both controller types.

Compile and upload the program to the Arduino Leonardo. 

Mayflash approach

Simply plug the Densha de Go! controller to the Mayflash adapter.

Set up Titan Two to convert the signals of the Densha de Go! controller to the ones that the game expects

Create two gpc files

Install Gtuner IV available at https://www.consoletuner.com/downloads/

Start Gtuner IV.

Connect the Arduino Leonardo to Titan Two USB port Input A via a micro-USB cable.

Use a micro-USB cable to connect the Titan Two PROG port to a USB port of your computer.

From the main menu, select View. Make sure "Device Monitor", "Device memory slots" and "Device Configuration" are checked.

At bottom right, select the "Device Configuration" tab. Under "Device Options", check "Disable memory slot selection using the controller". Then select the "Device Memory Slots" tab. Drag the gpc script file you create at the beginning of this section to a memory slot. Right click on the loaded memory slot and select "Load memory slot".

Configure the game to use the controller

In the game options, make sure you configure the game to do standard levels (not simplified levels) for the accelerator and brake, and require the player to hold his analogue stick push to persist the acceleration and brake. 

Use procedure

Start the game without connecting the Titan Two.

When you are in the game, first connect the Arduino Leonardo to Titan Two USB port Input A via a micro-USB cable. Then use another micro-USB cable to connect a PS4 controller to Titan Two Input B port. Finally use a micro-USB cable to connect Titan Two OUTPUT port to a USB port of your PS4 console.

Use the UP and DOWN button of Titan Two to select the gpc script that we just upload. Use the *Typical.gpc version typically, except when you are driving the 103 series with which you should choose the *103.gpc one.

Control mapping

Accelerator and brake - trivial

SELECT -> Triangle

A -> Square

B -> Cross

C -> Circle

Extra

You could add a foot pedal to horn and an ultrasound sensor for detecting finger pointing confirmation.

  • Set up a foot pedal on-off circuit which outputs 5V to pin 6 when the pedal is NOT pressed, and 0V when the pedal is pressed.
  • Connect the trigger pin of an Arduino ultrasound sensor to pin 2 of the Arduino, and the echo pin to pin 3. Connect the 5V and GND pins of the sensor appropriately as well. 


Circuit diagram for the pedal connection
If you are using emakefun PS2 controller shield, the mapping would be as follows:
  • #define ultrasoundTriggerPin A2
  • #define ultrasoundEchoPin A3
  • #define dataPin 12
  • #define cmndPin 11
  • #define attPin 10
  • #define clockPin 13
  • #define pedalPin SCL


Comments

  1. Hi, I'm the author of PsxNewLib. I'm curious to know why you took an example from my library and adapted it to PS2X instead of using my library as a whole. I guess that's because it doesn't work, but then I'd be happy to collaborate in order to get this controller fully supported in PsxNewLib out of the box. If you are interested, please open an issue on the GitHub page detailing what needs to be changed.

    ReplyDelete
    Replies
    1. Hi SukkoPera, thanks for writing to me. At the beginning I used your PsxNewLib and example and it did work with PS1 train controller original version SLPH-00051. Some time later I tried the same code the one-handle version TCPP-20001 but the code didn't work in this case. That was why I switched my code to use the PSXLib which worked on both controller. I didn't look into the root cause at that time. When I have time, I could revisit the issue and let you know my finding.

      Delete
  2. Hi there, I saw your video over youtube and I was wondering if the cronusmax will work on there too or just the titan two? I would like to try that but I am yet to buy a USB converter. Also, is building an adapter (with arduino) better than buying one instead? thank you.

    ReplyDelete
    Replies
    1. I haven't tried cronus zen but it seems to be very similar to Titan Two in terms of functionality. You may wish to try it out, but be prepared to modify the gpc script to fit your cronusmax. Personally I would suggest building the adapter with Arduino as I have yet found any commercial adapter that maps each throttle level to a unique key combination. With some two throttle levels mapped to the same key combination, you wouldn't be able to differentiate between these two throttle levels if you move from the same previous throttle level.

      Delete
  3. Hi, thanks for your work! Do you have an idea if the Densha de Go! Controller Type 2 for the PS2 (TCPP-20009) is working with one of the scripts? This one has a USB port and is easy to connect to the Titan 2. Thank you!

    ReplyDelete
    Replies
    1. I don't have that controller so can't try it out on my side. You may need to work out your own Titan 2 script. To start with, connect your Densha de Go! controller Type 2 through the Titan 2 to a PC, and then open the Gtuner software. See if each brake/acceleration setting maps to a unique output. If so, you may try to modify the if conditions in https://github.com/tylau0/DenGo/blob/main/DenshaDeGoDGOC44UTypical.gpc and https://github.com/tylau0/DenGo/blob/main/DenshaDeGoDGOC44U103.gpc accordingly to get the script to work.

      Delete
  4. This comment has been removed by the author.

    ReplyDelete

Post a Comment

Popular posts from this blog

Using PlayStation 1 Densha de Go controller on emulators

Play octoshape stream on windows with VLC player