2023-06-11 17:21:25 +02:00
|
|
|
# DDR p3io driver work, various notes
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
Date: 2023-05-28 Author: icex2
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
Notes about my work on writing a DDR P3io driver.
|
|
|
|
|
|
|
|
## Python IO board hardware breakout interface
|
|
|
|
|
|
|
|
PCB breakout interfaces/connectors on the side of the boards.
|
|
|
|
|
|
|
|
### P2IO DDR
|
|
|
|
|
|
|
|
Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet"
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- `LINE OUT 1`: Primary audio out to amplifier
|
|
|
|
- `LINE OUT 2`: N.C.
|
|
|
|
- `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
|
|
|
|
selection
|
|
|
|
- `COM1`: Virtual com port that connects to the EXTIO
|
|
|
|
- `COM2`: Virtual com port that connects to a pair of ICCA card readers
|
|
|
|
- `LAN`: Network connection
|
|
|
|
- `PWR`: 100V power in
|
|
|
|
- `ANALOG`: N.C.
|
|
|
|
- `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
|
|
|
|
- `PORT 2`: N.C.
|
|
|
|
- `DIPSW`
|
|
|
|
- `1`: ???
|
|
|
|
- `2`: On = force all sensor polling mode and allow running the game without an EXTIO
|
|
|
|
- `3`: ???
|
|
|
|
- `4`: On = force 15 khz monitor output
|
|
|
|
- `PLUG 1`: Black dongle
|
|
|
|
- `PLUG 2`: White dongle
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
### P3IO GF/DM
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
Descriptions assume usage of a P3IO from a GF/DM in a "chimera style PCB build" on an upgraded DDR
|
|
|
|
"black SD cabinet"
|
|
|
|
|
|
|
|
- `PWR`: 100V power in
|
|
|
|
- `12V-OUT`: +12V out for external devices
|
|
|
|
- `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
|
|
|
|
- `PORT 2`: N.C.
|
|
|
|
- `COM1`: To EXTIO
|
|
|
|
- `COM2`: To card readers
|
|
|
|
- `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
|
|
|
|
selection
|
|
|
|
- `LINE OUT 1`: Primary audio out to amplifier
|
|
|
|
- `LINE OUT 2`: N.C.
|
|
|
|
- `DIPSW`
|
|
|
|
- `1`:
|
|
|
|
- `2`:
|
|
|
|
- `3`:
|
|
|
|
- `4`: On = force 15 khz monitor output
|
|
|
|
- `PLUG 1`: Roundplug black dongle
|
|
|
|
- `PLUG 2`: Roundplug white dongle
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
### P3IO DDR(X)
|
|
|
|
|
|
|
|
Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet"
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- `PWR`: 100V power in
|
|
|
|
- `USB`: USB memory card readers on cabinet
|
|
|
|
- `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
|
|
|
|
- `COM3-4`: Virtual COM ports
|
|
|
|
- COM3 (VCOM1): Pins 1,3,5 on connector -> To card readers
|
|
|
|
- COM4 (VCOM0): Pins 2,4,6 on connector -> N.C.
|
|
|
|
- `PLUG`: Breakout to security round plugs (black and white dongles)
|
|
|
|
- `COM1`: To EXTIO
|
|
|
|
- Pinout (pins left to right)
|
|
|
|
- 1: TXD1
|
|
|
|
- 2: RXD1
|
|
|
|
- 3: N.C.
|
|
|
|
- 4: N.C.
|
|
|
|
- 5: GND
|
|
|
|
- `COM2`: N/A (light spires on black HD cabinet)
|
|
|
|
- Pinout (pins left to right)
|
|
|
|
- 1: TXD2
|
|
|
|
- 2: RXD2
|
|
|
|
- 3: GND
|
|
|
|
- `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
|
|
|
|
selection
|
|
|
|
- `LINE OUT1`: Primary audio out to amplifier
|
|
|
|
- `LINE OUT2`: N.C.
|
|
|
|
- `LAN`: Network
|
|
|
|
- `DIP SW`
|
|
|
|
- `1`:
|
|
|
|
- `2`:
|
|
|
|
- `3`:
|
|
|
|
- `4`: On = force 15 khz monitor output
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
## Python IO boards and differences
|
|
|
|
|
|
|
|
### P3IO DDR(X)
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- Connects to USB and actually enumerates as a USB device and not a virtual COM port
|
|
|
|
- COM ports 1-4 on breakout of the PCB are being passed through as actual COM ports to the operating
|
|
|
|
system
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
### P3IO GF/DM
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- Connects to USB and actually enumerates as a USB device and not a virtual COM port
|
|
|
|
- COM ports 1-2 on breakout of the PCB are just virtual COM ports
|
|
|
|
- These do not show up as COM ports on the operating system
|
|
|
|
- The game drives the COM ports through the main P3IO protocol with additional P3IO commands to
|
|
|
|
open, read, write and close these virtual COM ports
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
### P2IO DDR
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- Connects to USB and actually enumerates as a USB device and not a virtual COM port
|
|
|
|
- COM ports 1-2 on breakout of the PCB are just virtual COM ports
|
|
|
|
- These do not show up as COM ports on the operating system
|
|
|
|
- The game drives the COM ports through the main P3IO protocol with additional P3IO commands to
|
|
|
|
open, read, write and close these virtual COM ports
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
## Pinout card reader P1 -> P2 mini din8 male to mini din8 male
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
Port 1 2 and 3:
|
2023-06-11 17:21:25 +02:00
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- Pin 3: TX
|
|
|
|
- Pin 4: GND
|
|
|
|
- Pin 5 : RX
|
2023-06-11 17:21:25 +02:00
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
Pin 3 and 5 need to be reversed inbetween readers They are all the same, so your cable needs to
|
|
|
|
bridge them over. A standard male to male mini din 8 cable does not do that.
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
### Pinout card reader stock cable s-sub9 to round pin9
|
|
|
|
|
|
|
|
```text
|
|
|
|
dsub-9 female -> mini-din8 male
|
|
|
|
2 (TXD) -> 3
|
|
|
|
3 (RXD) -> 5
|
|
|
|
5 (GND) -> 4
|
|
|
|
```
|
|
|
|
|
|
|
|
## ADE board and com port assignments
|
|
|
|
|
|
|
|
Default or incorrectly configured?
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
- `COM1` -> on mainboard
|
|
|
|
- `COM2` -> COM2 on P3IO breakout
|
|
|
|
- `COM3` -> ???
|
|
|
|
- `COM4` -> COM1 on P3IO breakout
|
2023-06-11 17:21:25 +02:00
|
|
|
|
|
|
|
## P3IO command init sequence on DDR 18
|
|
|
|
|
|
|
|
From the ddrio-python23 library
|
|
|
|
|
2024-01-29 23:18:21 +01:00
|
|
|
````text
|
2023-06-11 17:21:25 +02:00
|
|
|
.data:1002D5D0 g_init_pakets db 0AAh, 2, 0, 1, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 ; DATA XREF: initialize_and_send_pakets+5↑o
|
|
|
|
.data:1002D5D0 db 0AAh, 2, 0, 2Fh, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 1, 27h, 1, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2 dup(2), 31h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2, 3, 1, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 4, 27h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 5, 25h, 10h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 6, 25h, 10h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 7, 25h, 10h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 8, 25h, 10h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 9, 25h, 10h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 0Ah, 25h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 0Bh, 25h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 0Ch, 25h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 0Dh, 25h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2Bh, 0Eh, 25h, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 0Fh, 5, 29h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 0, 2Bh, 1, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 1, 29h, 5, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 3, 2, 5, 30h, 28h dup(0); field_0.field_0
|
|
|
|
.data:1002D5D0 db 0AAh, 2 dup(3), 27h, 29h dup(0); field_0.field_0
|
|
|
|
``
|
|
|
|
|
|
|
|
```text
|
|
|
|
// 01: get version <- this is part of a "flush" of old data?
|
|
|
|
// 2F: set mode
|
|
|
|
// 27: get cab type or dispsw
|
|
|
|
// 31: get coinstock
|
|
|
|
// 1: get version
|
|
|
|
// 27: get cab type or dipsw
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 25: read plug
|
|
|
|
// 5: set watchdog
|
|
|
|
// 2b: unknown
|
|
|
|
// 29: get video freq
|
|
|
|
// 5: set watchdog
|
|
|
|
// 27: get cab type or dipsw
|
2024-01-29 23:18:21 +01:00
|
|
|
````
|