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
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). 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. 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: 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 -- exactly as on WPC-95 and WPC-DCS, and 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. 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, so the same col*10+row+1 formula reported through the CORE_CUSTSWNO(c,r) macro places the FIRST declared custom column at public 121-128, a second at 131-138, and so on; 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. 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, so the public Fliptronic state is already normalized here; a recreation must not re-invert it. 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.