Add technical details for the MTC

This commit is contained in:
Marc Riera 2023-10-12 15:02:55 +02:00
parent c4337a2325
commit 4cfecb9d65
3 changed files with 115 additions and 7 deletions

View file

@ -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.

View file

@ -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<br>0x1C06 (P5/B5) |
| **Product ID** | 0x0101<br>0x77A7 (P5/B5)<br>0x0004 (P5/B8) |
| **Serial number** | *None* |
| **USB standard descriptor** | [P4/B7](/controllers/usb/descriptors/sotp031201-P4B7_standard-descriptor.txt)<br>[P4/B7 (without B1)](/controllers/usb/descriptors/sotp031201-P4B1B7_standard-descriptor.txt)<br>[P5/B5](/controllers/usb/descriptors/sotp031201-P5B5_standard-descriptor.txt)<br>[P5/B7](/controllers/usb/descriptors/sotp031201-P5B7_standard-descriptor.txt)<br>[P5/B8](/controllers/usb/descriptors/sotp031201-P5B8_standard-descriptor.txt)<br>[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.

View file

@ -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**).