Diagnostic buttons, switch matrix, and synthetic flipper-button positions
pinmame.input.switch
- -7 … -53 slots
- 1 … 4848 slots
- 81 … 888 slots
- libpinmamechannel=switch
- controller_plugingroup_id=1 · contract_revision=a6f6d7266d30
Technical details for Diagnostic buttons, switch matrix, and synthetic flipper-button positionsSource-derived address behavior and exceptions
Matrix addressing
Public switches are sequential matrix positions, not column-times-ten notation: address = (column - 1) * 8 + row. Column 1 is 1-8, and column 6 is 41-48.
by35.c strobes five columns from PIA0:A bits 0-4 and a sixth from PIA1:B, giving at most 48 matrix positions; a game that wires only five columns uses 1-40.
Sixth-column strobe
Which PIA1:B bit supplies the sixth column is game-dependent:
- The default path reads bit
7. - Drivers flagged
BY35GD_SWVECTORread bit4instead.
Either way, that bit is also one of the four continuous solenoid outputs published at 17-20. On a six-column game, one public solenoid address therefore carries a switch strobe rather than a coil. Treat a continuously asserted address in that range as a candidate strobe and resolve it per game rather than assuming it is an unused coil.
Diagnostic and flipper positions
- Diagnostics: Self test, CPU diagnostic, and sound diagnostic are the direct addresses
-7,-6, and-5. They live in switch column 0 and are not matrix positions. - Flippers: Games declaring
FLIP_SWkeep their real flipper buttons in the matrix. PinMAME also maintains a generic flipper column at internal column 11, which VPinMAME publishes at81-88. Unless the driver suppliesFLIP_SWNO,FLIP_SWLandFLIP_SWRare zero andcore_updateSwnever copies that column into the game matrix, so the ROM never reads81-88.
A definition declares only the columns and positions its own machine wires.