Data East service buttons and the 8x8 switch matrix
pinmame.input.switch
- -7 … -62 slots
- 1 … 6464 slots
- libpinmamechannel=switch
- controller_plugingroup_id=1 · contract_revision=a6f6d7266d30
Technical details for Data East service buttons and the 8x8 switch matrixSource-derived address behavior and exceptions
Public matrix addresses
Data East uses PinMAME's sequential, column-major 1-64 switch namespace inherited by MACHINE_DRIVER_START(s11) from MACHINE_DRIVER_START(PinMAME). The registered conversion is core_swSeq2m(n)=n+7, so column=((n-1)/8)+1 and row=((n-1)%8)+1 for public address n (src/wpc/core.c core_swSeq2m/core_m2swSeq; src/wpc/s11.c MACHINE_DRIVER_START(s11)). It is not WPC's column-times-ten notation.
Data East matrix strobes are one-hot. pia4b_w keeps only the first asserted strobe bit when locals.deGame is true, and pia4a_r passes that selected column to core_getSwCol (src/wpc/s11.c). Public address numbering remains sequential; this hardware detail matters when interpreting traces with malformed multi-bit strobes.
Cabinet column and diagnostics
DE_COMPORTS supplies ordinary column 1 at public addresses 1-8: tilt=1, ball tilt=2, start=3, coin 1-3=4-6, slam tilt=7, and no defined cabinet input at 8 (src/wpc/s11.h). These are part of the same switch namespace as the playfield matrix. A game using S11_MUXSW2 may overwrite public switch 2 with the live mux-relay state in SWITCH_UPDATE(s11); identify switch 2 from the game-specific driver and manual rather than assuming it is always a physical ball-tilt switch.
Only two negative service addresses exist on Data East hardware:
| Address | PinMAME constant | Driver behavior |
|---|---|---|
-7 |
DE_SWADVANCE |
Black Advance button; s11_irqline presents its asserted public state inverted to PIA2 CA1. |
-6 |
DE_SWUPDN |
Green Up/Down button; presented directly to PIA2 CB1. |
Williams-only CPU and sound diagnostic addresses -5 and -4 are not part of the Data East contract. DE_COMPORTS2 changes the later green button from toggling to momentary input behavior, but its public address remains -6 (src/wpc/s11.h).
Inversion and extensions
The profile's inversion_applied_by_emulator field means consumers use the public LibPinMAME state as delivered and do not perform a second inversion. It does not assert that every game has a nonzero invSw mask. The common INITGAMES11 Data East initializer zero-initializes that mask; custom drivers must be checked individually. A nonzero hw.swCol adds game-specific columns above the base 1-64 range and must be declared by that machine rather than inferred from this base rule.