Coin-door, switch-matrix, Fliptronic flipper, and optional custom switch column inputs
pinmame.input.switch
- 1 … 88 slots
- 11 … 188 slots
- 21 … 288 slots
- 31 … 388 slots
- 41 … 488 slots
- 51 … 588 slots
- 61 … 688 slots
- 71 … 788 slots
- 81 … 888 slots
- 91 … 988 slots
- 101 … 1088 slots
- 111 … 1188 slots
- 121 … 16848 slots
- libpinmamechannel=switch
- controller_plugingroup_id=1 · contract_revision=a6f6d7266d30
Technical details for Coin-door, switch-matrix, Fliptronic flipper, and optional custom switch column inputsSource-derived address behavior and exceptions
Cabinet inputs
Addresses 1-8 are the four coin chutes and the four coin-door service buttons in printed row order (internal array column 0, CORE_COINDOORSWCOL).
Matrix inputs
Public matrix addresses use WPC column/row notation 11-88, where the left digit is the drive column (internal array index 1-8) and the right digit is the return row 1-8; wpc_m2sw(col,row) = col*10+row+1. Column indices 9 and 10 (public 91-98/101-108) are a gap in the base allocation that this generation leaves unused unless a specific driver's own getSol/switch-read hook independently claims part of it.
Fliptronic inputs
This generation always has Fliptronic flipper inputs at internal column 11 (CORE_FLIPPERSWCOL), so 111-118 are the eight EOS/button positions in WPC_swF1..WPC_swF8 order:
| Address | Position |
|---|---|
111 |
lower-right EOS |
112 |
lower-right button |
113 |
lower-left EOS |
114 |
lower-left button |
115 |
upper-right EOS |
116 |
upper-right button |
117 |
upper-left EOS |
118 |
upper-left button |
These positions are exactly as on WPC-95 and WPC-DCS. A driver with no upper flippers is free to repurpose 115-118 for other switch-matrix-column-11 hardware entirely, or to leave the positions unwired.
Custom switch columns
A driver may declare one or more additional custom switch columns through core_tGameData hw.swCol. PinMAME's fixed custom-column start is internal array index CORE_CUSTSWCOL = CORE_STDSWCOLS = 12 (src/wpc/core.h), one column beyond the Fliptronic column. The same col*10+row+1 formula, reported through the CORE_CUSTSWNO(c,r) macro, places the declared columns as follows:
| Declared custom column | Public addresses |
|---|---|
| First | 121-128 |
| Second | 131-138 |
Further columns continue the same pattern. A definition declares only the addresses its own machine's custom board actually wires. This numbering is a fixed core.h offset, not a driver-visible printed silkscreen number. Any such printed board number must be captured as a manual.address alias rather than assumed equal to the public switch number.
Normalization
This generation's WPC_FLIPPERS register read (src/wpc/wpc.c, case WPC_FLIPPERS, gated on (gen & GENWPC_HASWPC95) == 0, and GENWPC_HASWPC95 = GEN_WPC95 | GEN_WPC95DCS excludes GEN_WPCSECURITY) unconditionally returns the bitwise complement of the entire flipper switch matrix column exactly as on WPC-DCS and WPC-Fliptronic. The public Fliptronic state is already normalized here; a recreation must not re-invert it.
Security-PIC row read
Separately, this generation's WPC_SWROWREAD register read (src/wpc/wpc.c, case WPC_SWROWREAD) is gated on GENWPC_HASPIC = GEN_WPCSECURITY | GEN_WPC95 | GEN_WPC95DCS and dispatches to the emulated security-PIC row reader (wpc_pic_r) instead of the plain core_getSwCol column reader that WPC-DCS/WPC-Fliptronic use. This changes how the emulator internally scans the matrix through the security handshake but does not change the public col*10+row+1 address space or its normalization: core_getSw/core_setSw/core_updInvSw apply identically regardless of GENWPC_HASPIC.