Cabinet, playfield, and synthetic flipper switch addresses
pinmame.input.switch
- 1 … 1616 slots
- 17 … 8064 slots
- 81 … 888 slots
- 89 … 968 slots
- libpinmamechannel=switch
Technical details for Cabinet, playfield, and synthetic flipper switch addressesSource-derived address behavior and exceptions
Every cc driver overrides the platform default with MDRV_SWITCH_CONV(cc_sw2m, cc_m2sw) in src/wpc/capcom.c's MACHINE_DRIVER_START(cc). This profile therefore follows cc_sw2m/cc_m2sw exactly, rather than the sequential core_swSeq2m mapping used by generations without an override.
cc_m2sw(col, row) maps the internal matrix as follows:
| Internal column | Public address | Purpose |
|---|---|---|
| 0-8 | 9 + row + col * 8 |
Public 9-80 |
| 9 | 1 + row |
Public 1-8 |
| 10 | 89 + row |
Public 89-96 |
| Any other column (11 in practice) | 81 + row |
Public 81-88 |
- 1-8 -- cabinet inputs. Internal column 9 is the first
CC_COMPORTScabinet byte (src/wpc/capcom.h): Coin 1-4 at 1-4, Start Game at 7, and the toggle-style Coin Door input at 8. Addresses 5 and 6 are excluded fromCORE_SETKEYSWbySWITCH_UPDATE(cc)'s0xcfmask becauseFLIP_SWNO(5,6)(src/wpc/capgames.c#define FLIP) reserves them for the two physical flipper buttons. - 9-16 -- second cabinet byte. Internal column 0 supplies Slam Tilt at 9, Tilt at 10, Buy In at 11, unused positions at 12-15, and a fifth unused position at 16.
CC_COMPORTSplaces this second byte in internal switch column 0 (src/wpc/capcom.h), decoded separately from the column-9 byte above. Together, 1-16 are the 16 cabinet switches described by the driver header.SWITCH_UPDATE(cc)writes this byte to internal column 0 only whenHAS_SWITCH_BOARDis true (hw.lampCol > 1). Breakshot's single-lamp-matrix mode instead shifts its low nibble (bits 0-3) into internal column 2 bits 4-7, so Slam Tilt, Tilt, Buy In, and the unused fourth bit surface at public addresses 29-32. - 17-80 -- playfield switches. When
HAS_SWITCH_BOARDis true, internal columns 1-8 are the 64 external-board switches. Theio_rhandler at0x200008-0x20000breads two decoded bytes fromcoreGlobals.swMatrix[swcol+4]and[swcol], inverts the hardware state as documented by the driver's 'Switches are inverted' comment, and exposes the normalized result through this range. Breakshot has no external switch board; its single-lamp-matrix hardware instead reads the same public range through the lamp-column-strobed switch matrix. - 81-88 -- synthetic flipper and EOS state. Internal column 11 (
CORE_FLIPPERSWCOL,src/wpc/core.h) is fabricated bycore_updateSw(src/wpc/core.c). Which bits can become live depends on the game's ownhw.flippersdeclaration, includingFLIP_SW()/FLIP_EOS(), and theFLIP_SWL/FLIP_SWRmacros used to buildlocals.flipMask. These addresses have no corresponding printed Capcom circuit. A game without physical upper-flipper buttons populates only the lower-flipper bits 81-84 plus the EOS bits implied by itsFLIP_SOL()declaration. - 89-96 -- unused core allocation. Internal column 10 exists because
CORE_STDSWCOLS(src/wpc/core.h) reserves 12 columns for every generation. Noccdriver reads or writes it, so this range is permanently zero rather than a physical cabinet or matrix column.