From 4cfecb9d65d13b65da627bed667dbc614ad44127 Mon Sep 17 00:00:00 2001 From: Marc Riera Date: Thu, 12 Oct 2023 15:02:55 +0200 Subject: [PATCH] Add technical details for the MTC --- content/controllers/usb/cotm02001/_index.md | 46 +++++++++++++- content/controllers/usb/sotp031201/_index.md | 66 +++++++++++++++++++- content/controllers/usb/tcpp20011/_index.md | 10 +-- 3 files changed, 115 insertions(+), 7 deletions(-) diff --git a/content/controllers/usb/cotm02001/_index.md b/content/controllers/usb/cotm02001/_index.md index 0f24e7b..aae054d 100644 --- a/content/controllers/usb/cotm02001/_index.md +++ b/content/controllers/usb/cotm02001/_index.md @@ -4,4 +4,48 @@ title: "Train Mascon (Sony PlayStation 2)" {{% controller-page "cotm02001" %}} -No details are available regarding internal functioning. +This controller has one handle (5 power notches and 8+emergency brake notches), a D-Pad and 7 buttons (Select, Start, A, B, C, Close, ATS). The A button can distinguish between "soft" and "hard" presses. In addition, the controller has four lamps: doors, ATS, 45 and 15. + +Internally, it is a HID device with a vendor-specific class. The reported data depends on the notch cartridge inserted. + +| | | +|-----------------------------|-------------------------------------------| +| **Product name** | *Unavailable* | +| **Manufacturer** | *Unavailable* | +| **Vendor ID** | 0x1C06 | +| **Product ID** | 0x77A7 | +| **Serial number** | *Unavailable* | +| **USB standard descriptor** | *Unavailable* | +| **HID report descriptor** | Not provided | + +### Input + +The controller sends reports to the host (PS2) formed by 4 bytes: + +| Byte 1 | Byte 2 | Byte 3 | Byte 4 | +|:------:|:---------------:|:---------:|:---------:| +| 0x01 | Reverser+handle | Buttons 1 | Buttons 2 | + +The reverser+handle byte combines two values representing the state of the reverser and the power/brake handle. The handle notch is represented sequentially starting from **0x1** (Emergency), brake notches from highest to lowest, *N* and power notches from lowest to highest. + +| Forward | Neutral | Backwards | +|:-------:|:-------:|:---------:| +| 0x2X | 0x0X | 0x1X | + +The first button byte uses six bits to represent the state of the physical buttons. **0** means that the button is released and **1** that it is pressed. A bitmask can be used to retrieve the buttons. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| ATS | Close | A (soft) | A (hard) | B | C | + +The second button byte also uses six bits to represent the state of the physical buttons. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| START | SELECT | UP | DOWN | LEFT | RIGHT | + +### Output + +No details are known regarding internal functioning. + + diff --git a/content/controllers/usb/sotp031201/_index.md b/content/controllers/usb/sotp031201/_index.md index ac1621a..20eec39 100644 --- a/content/controllers/usb/sotp031201/_index.md +++ b/content/controllers/usb/sotp031201/_index.md @@ -4,4 +4,68 @@ title: "Multi Train Controller (Sony PlayStation 2)" {{% controller-page "sotp031201" %}} -No details are available regarding internal functioning. +This controller has one handle with variable notches, a D-Pad and 7 buttons (Select, Start, A, B, C, D, ATS). The A button can distinguish between "soft" and "hard" presses. In addition, the controller has four lamps. + +Internally, it is a HID device with a vendor-specific class. The reported data depends on the notch cartridge inserted. + +| | | +|-----------------------------|-------------------------------------------| +| **Product name** | *None* | +| **Manufacturer** | *None* | +| **Vendor ID** | 0x0AE4
0x1C06 (P5/B5) | +| **Product ID** | 0x0101
0x77A7 (P5/B5)
0x0004 (P5/B8) | +| **Serial number** | *None* | +| **USB standard descriptor** | [P4/B7](/controllers/usb/descriptors/sotp031201-P4B7_standard-descriptor.txt)
[P4/B7 (without B1)](/controllers/usb/descriptors/sotp031201-P4B1B7_standard-descriptor.txt)
[P5/B5](/controllers/usb/descriptors/sotp031201-P5B5_standard-descriptor.txt)
[P5/B7](/controllers/usb/descriptors/sotp031201-P5B7_standard-descriptor.txt)
[P5/B8](/controllers/usb/descriptors/sotp031201-P5B8_standard-descriptor.txt)
[P13/B7](/controllers/usb/descriptors/sotp031201-P13B7_standard-descriptor.txt) | +| **HID report descriptor** | Not provided | + +### P5/B5 cartridge + +When this cartridge is inserted, the controller emulates the [Train Mascon](/controllers/usb/cotm02001). The buttons are mapped 1:1 except the **D** button, which is mapped to the **Close** (**閉**) button. + +The lamps are used as follows, from top to bottom: doors, ATS, 45 and 15. + +### P5/B8 cartridge + +When this cartridge is inserted, the controller emulates the [Two handle controller "Type 2"](/controllers/usb/tcpp20009). The buttons are mapped 1:1 and **ATS** is mapped to **START**. The reverser is mapped to the D-pad **UP** and **DOWN** buttons. + +Only the top lamp is used, for the doors. + +### P4/B7, P4/B2-B7, P5/B7, P13/B7 cartridges + +When any of these cartridges is inserted, the controller functions similarly to the P5/B5 mode and data changes depending on the amount of notches. The specific cartridge in use can be detected by looking at the *bcdDevice* value from the standard USB descriptor: + +| P4/B7 | P4/B2-B7 | P5/B7 |P13/B7 | +|:------:|:--------:|:------:|:------:| +| 0x0300 | 0x0400 | 0x0800 | 0x0A00 | + +#### Input + +The controller sends reports to the host (PS2) formed by 4 bytes: + +| Byte 1 | Byte 2 | Byte 3 | Byte 4 | +|:------:|:---------------:|:---------:|:---------:| +| 0x01 | Reverser+handle | Buttons 1 | Buttons 2 | + +The reverser+handle byte combines two values representing the state of the reverser and the power/brake handle. The handle notch is represented sequentially starting from **0x1** (Emergency), brake notches from highest to lowest, *N* and power notches from lowest to highest. + +| Forward | Neutral | Backwards | +|:-------:|:-------:|:---------:| +| 0x8X | 0x0X | 0x4X | + +**Note:** the P5/B7 and P13/B7 cartridges do not make use of the reverser and use both nibbles for the handle notch. + +The first button byte uses six bits to represent the state of the physical buttons. **0** means that the button is released and **1** that it is pressed. A bitmask can be used to retrieve the buttons. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| ATS | D | A (soft) | A (hard) | B | C | + +The second button byte also uses six bits to represent the state of the physical buttons. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| START | SELECT | UP | DOWN | LEFT | RIGHT | + +#### Output + +No details are known regarding internal functioning. diff --git a/content/controllers/usb/tcpp20011/_index.md b/content/controllers/usb/tcpp20011/_index.md index 32e5654..2146fb1 100644 --- a/content/controllers/usb/tcpp20011/_index.md +++ b/content/controllers/usb/tcpp20011/_index.md @@ -22,9 +22,9 @@ Internally, it is a HID device with a vendor-specific class. The controller sends reports to the host (PS2) formed by 6 bytes: -| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | -|:------:|:------:|:------:|:------:|:-------:|:------:| -| Brake | Power | Pedal | D-Pad | Buttons | Null | +| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | +|:------:|:------:|:------:|:------:|:-------:|:--------:| +| Brake | Power | Pedal | D-Pad | Buttons | *Unused* | The values for the brake notch byte are the following. @@ -71,8 +71,8 @@ The data sent to the controller follows the structure below. | Left rumble | Right rumble| Door lamp + Limit approach | Speed gauge | Speedometer | ATC limit | * **Left/right rumble:** **0x00** is **Off**, **0x01** is **On**. -* **Door lamp:** **0x0?** is **Off**, **0x8?** is **On**. -* **Limit approach:** values between **0x?0** and **0x?A** representing the number of LEDs lit above the speedometer. In-game, these mark the 10 km/h right below the speed limit. +* **Door lamp:** **0x0X** is **Off**, **0x8X** is **On**. +* **Limit approach:** values between **0xX0** and **0xXA** representing the number of LEDs lit above the speedometer. In-game, these mark the 10 km/h right below the speed limit. * **Speed gauge:** values between **0x00** and **0x16** representing the number of LEDs lit on the speed gauge. LED #23 cannot be lit. In-game, these mark 15 km/h increments in the current speed, with one lit when speed is 1-15 km/h, two when 16-30 km/h, etc. * **Speedometer:** values between **0x0000** and **0x0999** representing the current speed. Values are encoded with **BCD 8421** (i.e. **120 km/h** should be represented as **0x0120**, NOT **0x0078**). * **ATC limit:** values between **0x0000** and **0x0999** representing the ATC speed limit. Values are encoded with **BCD 8421** (i.e. **120 km/h** should be represented as **0x0120**, NOT **0x0078**).