Police Force

Partial

Williams1989SYSTEM11williams.police-force.1989

1 unresolved conflict

  • Legacy sources disagree on label: 'ROM Started' versus 'GI Relay'. binding:pinmame.output.solenoid/23/None

Wire it up

what an authoring tool needs first
Bind this ROM
polic_l4

6 ROM sets resolve to this machine. Clones share the definition unless a hardware difference is listed.

Controller platform
pinmame.system11

PinMAME already reports logical active state. Do not invert again in the table — normally-closed is a physical fact recorded per switch, not a runtime transform.

Displays

No display inventory recorded yet.

Address space
Switches
-7–84 (55)
Solenoids
1–48 (28)
Cabinet & flipper inputs
81flipper.upper.right82flipper.lower.right83flipper.upper.left84flipper.lower.left3cabinet.start4cabinet.coin.35cabinet.coin.26cabinet.coin.1

Portable roles — the consuming engine maps them to its own input actions.

Coverage

Partial

Real evidence exists, but authoring requirements are still missing or in conflict. Verify before shipping a table.

Catalog Identity
observed
Address Enumeration
candidate
Semantic Naming
candidate
Physical Wiring
candidate
Mechanisms
unknown
Variant Coverage
candidate
Recreation Knowledge
candidate
Still missing · 13
IdentityController PlatformInput EnumerationInput SemanticsOutput EnumerationOutput SemanticsDisplay InventoryMechanism InventoryMechanism BehaviorPolarityVariant DifferencesRecreation NotesProvenance

Switches

The addresses PinMAME reports as closed. Numbers are the public API values, not matrix hardware pins.

55 addresses

Switch map

Sequential addresses, grouped in columns of eight.

used unused
 
+0
+1
+2
+3
+4
+5
+6
+7
1–8
9–16
17–24
25–32
33–40
41–48
49–56
57–64
65–72
73–80
81–88
Hover or tap an address to identify it.

Outside the matrix-7, -6, -5, -4 — dedicated, diagnostic or flipper-column addresses. See the table below.

55 shown
# Name Device ID Role Evidence
-7
Advance
switch.advance
candidate
-6
Up/Down
switch.up-down
candidate
-5
CPU Diagnostics
switch.cpu-diagnostics
candidate
-4
Sound Diagnostics
switch.sound-diagnostics
candidate
1
Tilt
switch.tilt
candidate
2
Ball Roll Tilt
switch.ball-roll-tilt
candidate
3
Start Button
switch.start-button
cabinet.start
candidate
4
Coin Button 3
switch.coin-3
cabinet.coin.3
candidate
5
Coin Button 2
switch.coin-2
cabinet.coin.2
candidate
6
Coin Button 1
switch.coin-1
cabinet.coin.1
candidate
7
Slam Tilt
switch.slam-tilt
candidate
8
High Score Reset
switch.high-score-reset
candidate
10
Trough 3 (Outhole)
switch.trough-3-outhole
candidate
11
Trough 2
switch.trough-2
candidate
12
Trough 1
switch.trough-1
candidate
14
Shooter Lane
switch.shooter-lane
candidate
15
Saucer Top Right
switch.saucer-top-right
candidate
17
Standup Target 1
switch.standup-target-1
candidate
18
Standup Target 2
switch.standup-target-2
candidate
19
Standup Target 3
switch.standup-target-3
candidate
20
Right Drop Target 1
switch.right-drop-target-1
candidate
21
Right Drop Target 2
switch.right-drop-target-2
candidate
22
Right Drop Target 3
switch.right-drop-target-3
candidate
23
Saucer Right
switch.saucer-right
candidate
24
Saucer Top Left
switch.saucer-top-left
candidate
25
Left Drop Target 1
switch.left-drop-target-1
candidate
26
Left Drop Target 2
switch.left-drop-target-2
candidate
27
Left Drop Target 3
switch.left-drop-target-3
candidate
31
Car Position Back
switch.car-position-back
candidate
32
Car Position Front
switch.car-position-front
candidate
34
Ramp Gate 1
switch.ramp-gate-1
candidate
35
Standup Target 4
switch.standup-target-4
candidate
36
Ball Diverter
switch.ball-diverter
candidate
37
Ramp Trigger 1
switch.ramp-trigger-1
candidate
38
Ramp Trigger 2
switch.ramp-trigger-2
candidate
41
Spinner
switch.spinner
candidate
45
Ramp Gate 2
switch.ramp-gate-2
candidate
46
Ramp Gate 3
switch.ramp-gate-3
candidate
49
Inlane/Outlane 1
switch.inlane-outlane-1
candidate
50
Inlane/Outlane 2
switch.inlane-outlane-2
candidate
51
Inlane/Outlane 3
switch.inlane-outlane-3
candidate
52
Inlane/Outlane 4
switch.inlane-outlane-4
candidate
54
Top Lane 1
switch.top-lane-1
candidate
55
Top Lane 2
switch.top-lane-2
candidate
56
Top Lane 3
switch.top-lane-3
candidate
57
Plumb Bob TiltNC
switch.plumb-bob-tilt
candidate
60
Pop Bumper Top
switch.pop-bumper-top
candidate
61
Pop Bumper Middle
switch.pop-bumper-middle
candidate
62
Pop Bumper Bottom
switch.pop-bumper-bottom
candidate
63
Right Slingshot
switch.right-slingshot
candidate
64
Left Slingshot
switch.left-slingshot
candidate
81
Upper Right Flipper
switch.flipper-upper-right
flipper.upper.right
candidate
82
Lower Right Flipper
switch.flipper-lower-right
flipper.lower.right
candidate
83
Upper Left Flipper
switch.flipper-upper-left
flipper.upper.left
candidate
84
Lower Left Flipper
switch.flipper-lower-left
flipper.lower.left
candidate

Controlled devices

Everything the ROM can energise, grouped the way a table author builds it.

Coils, magnets & motors

17
17 shown
# Name Device ID Kind Evidence
1
Trough Kicker (Outhole)
device.trough-kicker-outhole Coil candidate
2
Saucer Top Left Kicker
device.saucer-top-left-kicker Coil candidate
3
Ball Diverter
device.ball-diverter Coil candidate
4
Right Drop Target Bank Reset
device.right-drop-target-bank-reset Coil candidate
5
Saucer Right Kicker
device.saucer-right-kicker Coil candidate
6
Left Drop Target Bank Reset
device.left-drop-target-bank-reset Coil candidate
7
Knocker
device.knocker Coil candidate
8
Saucer Top Right Kicker
device.saucer-top-right-kicker Coil candidate
10
GI Dimming
device.gi-dimming Relay candidate
11
Backglass GI Dimming
device.backglass-gi-dimming Relay candidate
15
Car Motor
device.car-motor Motor candidate
22
Ball Release
device.ball-release Coil candidate
23
ROM Started
device.game-on Coil candidate
34
Upper Right Flipper
device.flipper-upper-right Coil candidate
36
Upper Left Flipper
device.flipper-upper-left Coil candidate
46
Lower Right Flipper
device.flipper-lower-right Coil candidate
48
Lower Left Flipper
device.flipper-lower-left Coil candidate

Flashers

11
11 shown
# Name Device ID Evidence
9
Top Right PF Lamp Under Ramp
device.top-right-pf-lamp-under-ramp candidate
13
Firing Range Insert (Skill Shot)
device.firing-range-insert-skill-shot candidate
14
Top Cop Inserts
device.top-cop-inserts candidate
25
Bottom Left Shark Dome Flasher
device.bottom-left-shark-dome-flasher candidate
26
Top Left Croc Dome Flasher
device.top-left-croc-dome-flasher candidate
27
Center Rat Dome Flasher
device.center-rat-dome-flasher candidate
28
Bottom Right Weasel PF Lamp Flasher
device.bottom-right-weasel-pf-lamp-flasher candidate
29
Jackpot Insert / Scope Billboard Flasher
device.jackpot-insert-scope-billboard-flasher candidate
30
Million Flasher Insert
device.million-flasher-insert candidate
31
Left Dome Flasher
device.left-dome-flasher candidate
32
Right Dome Flasher
device.right-dome-flasher candidate

Recreation notes

Working knowledge that has no schema field yet — edition differences, tuning values, pitfalls.

Coverage
partial - source-derived recreation knowledge requiring validation

Overview

Legacy evidence identifies this candidate as Williams (1989). The information below is preserved for recreation work but is not automatically treated as validated physical-machine fact.

Playfield devices

Switch, lamp/GI, and controlled-device candidates are in the adjacent machine definition. Source-specific implementation notes are retained below.

Custom mechanisms

No custom mechanism conclusion has been validated. Manuals, schematics, PinMAME source, and gameplay evidence still need to be checked.

Ball-state transitions

Ball paths, trough ordering, locks, kickouts, and causal transitions have not yet been normalized. Relevant source notes follow under Evidence notes.

Controller interactions

Controller callbacks and bindings are candidate evidence only until reconciled against PinMAME and physical documentation.

Service and setup information

Unknown; locate operator/service documentation.

Timing and tuning observations

Source timing values may describe a particular VPX implementation rather than physical hardware and require review.

Recreation guidance

Do not treat this partial definition as a complete authoring specification. Resolve every coverage requirement and conflict before promotion.

Evidence notes

  • games/polic.json#/switches/0._note: Outhole position — SolTrough (sol 1) kicks from here into sw11
  • games/polic.json#/switches/1._note: Middle trough — ball stacks here. SolRelease (sol 22) kicks to shooter lane
  • games/polic.json#/switches/2._note: Top trough — overflow kicks into sw11 via UpdateTroughTimer
  • games/polic.json#/switches/3._note: Ball in plunger lane. Cleared by SolRelease
  • games/polic.json#/switches/4._inferred_type: kicker
  • games/polic.json#/switches/4._note: VUK — captured ball kicked by SaucerTR (sol 8)
  • games/polic.json#/switches/5._inferred_type: standup_target
  • games/polic.json#/switches/5._note: STHit(17) — pulsed via STAnimate
  • games/polic.json#/switches/6._inferred_type: standup_target
  • games/polic.json#/switches/6._note: STHit(18) — pulsed via STAnimate
  • games/polic.json#/switches/7._inferred_type: standup_target
  • games/polic.json#/switches/7._note: STHit(19) — pulsed via STAnimate
  • games/polic.json#/switches/8._inferred_type: drop_target
  • games/polic.json#/switches/8._note: DTHit(20) — right bank, reset by sol 4 (dtRightBank)
  • games/polic.json#/switches/9._inferred_type: drop_target
  • games/polic.json#/switches/9._note: DTHit(21) — right bank, reset by sol 4 (dtRightBank)
  • games/polic.json#/switches/10._inferred_type: drop_target
  • games/polic.json#/switches/10._note: DTHit(22) — right bank, reset by sol 4 (dtRightBank)
  • games/polic.json#/switches/11._inferred_type: kicker
  • games/polic.json#/switches/11._note: VUK — captured ball kicked by SaucerRight (sol 5)
  • games/polic.json#/switches/12._inferred_type: kicker
  • games/polic.json#/switches/12._note: VUK — captured ball kicked by SaucerTL (sol 2)
  • games/polic.json#/switches/13._inferred_type: drop_target
  • games/polic.json#/switches/13._note: DTHit(25) — left bank, reset by sol 6 (dtLeftBank)
  • games/polic.json#/switches/14._inferred_type: drop_target
  • games/polic.json#/switches/14._note: DTHit(26) — left bank, reset by sol 6 (dtLeftBank)
  • games/polic.json#/switches/15._inferred_type: drop_target
  • games/polic.json#/switches/15._note: DTHit(27) — left bank, reset by sol 6 (dtLeftBank)
  • games/polic.json#/switches/16._inferred_type: opto
  • games/polic.json#/switches/16._note: Car mechanism — set when car is at back of ramp (CarLocation <= 10). Driven by SolCar motor (sol 15)
  • games/polic.json#/switches/17._inferred_type: opto
  • games/polic.json#/switches/17._note: Car mechanism — set when car is at front of ramp (CarLocation >= CarDistance - 10). Driven by SolCar motor (sol 15)
  • games/polic.json#/switches/18._note: Pulsed via vpmTimer.PulseSw 34
  • games/polic.json#/switches/19._inferred_type: standup_target
  • games/polic.json#/switches/19._note: STHit(35) — pulsed via STAnimate
  • games/polic.json#/switches/20._inferred_type: opto
  • games/polic.json#/switches/20._note: Toggled by SolBallDiverter (sol 3). Switch tracks diverter arm position
  • games/polic.json#/switches/21._note: Pulsed via vpmTimer.PulseSw 37
  • games/polic.json#/switches/22._note: Pulsed via vpmTimer.PulseSw 38
  • games/polic.json#/switches/23._inferred_type: spinner
  • games/polic.json#/switches/23._note: sw41_Spin() — pulsed via vpmTimer.PulseSw 41
  • games/polic.json#/switches/24._note: Pulsed via vpmTimer.PulseSw 45
  • games/polic.json#/switches/25._note: Pulsed via vpmTimer.PulseSw 46
  • games/polic.json#/switches/26._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/27._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/28._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/29._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/30._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/31._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/32._note: Controller.Switch set/cleared on Hit/UnHit
  • games/polic.json#/switches/33._vbscript_name: swTilt
  • games/polic.json#/switches/33._note: vpmNudge.TiltSwitch = swTilt (S11.VBS framework constant = 57)
  • games/polic.json#/switches/34._inferred_type: bumper
  • games/polic.json#/switches/34._note: Bumper1_Hit — pulsed via vpmTimer.PulseSw 60
  • games/polic.json#/switches/35._inferred_type: bumper
  • games/polic.json#/switches/35._note: Bumper2_Hit — pulsed via vpmTimer.PulseSw 61
  • games/polic.json#/switches/36._inferred_type: bumper
  • games/polic.json#/switches/36._note: Bumper3_Hit — pulsed via vpmTimer.PulseSw 62
  • games/polic.json#/switches/37._inferred_type: slingshot
  • games/polic.json#/switches/37._note: RightSlingShot_Slingshot — pulsed via vpmTimer.PulseSw 63
  • games/polic.json#/switches/38._inferred_type: slingshot
  • games/polic.json#/switches/38._note: LeftSlingShot_Slingshot — pulsed via vpmTimer.PulseSw 64
  • games/polic.json#/coils/0._vbscript_callback: SolTrough
  • games/polic.json#/coils/0._inferred_type: ball_management
  • games/polic.json#/coils/0._note: Kicks ball from sw10 (outhole) into trough stack (sw11)
  • games/polic.json#/coils/1._vbscript_callback: SaucerTL
  • games/polic.json#/coils/1._inferred_type: kicker
  • games/polic.json#/coils/1._note: Kicks ball from sw24 (saucer top left)
  • games/polic.json#/coils/2._vbscript_callback: SolBallDiverter
  • games/polic.json#/coils/2._inferred_type: diverter
  • games/polic.json#/coils/2._note: Toggles diverter arm position and Controller.Switch(36)
  • games/polic.json#/coils/3._vbscript_callback: dtRightBank
  • games/polic.json#/coils/3._inferred_type: drop_target_reset
  • games/polic.json#/coils/3._note: Resets drop targets sw20, sw21, sw22
  • games/polic.json#/coils/4._vbscript_callback: SaucerRight
  • games/polic.json#/coils/4._inferred_type: kicker
  • games/polic.json#/coils/4._note: Kicks ball from sw23 (saucer right)
  • games/polic.json#/coils/5._vbscript_callback: dtLeftBank
  • games/polic.json#/coils/5._inferred_type: drop_target_reset
  • games/polic.json#/coils/5._note: Resets drop targets sw25, sw26, sw27
  • games/polic.json#/coils/6._vbscript_callback: SolKnocker
  • games/polic.json#/coils/6._inferred_type: knocker
  • games/polic.json#/coils/7._vbscript_callback: SaucerTR
  • games/polic.json#/coils/7._inferred_type: kicker
  • games/polic.json#/coils/7._note: Kicks ball from sw15 (saucer top right)
  • games/polic.json#/coils/8._vbscript_callback: Flash109 / FlashMod109
  • games/polic.json#/coils/8._inferred_type: flasher
  • games/polic.json#/coils/8._note: f109. Has both ModSol (PWM) and non-ModSol callback paths
  • games/polic.json#/coils/9._vbscript_callback: SolGIBlink / SolModGIBlink
  • games/polic.json#/coils/9._inferred_type: gi_relay
  • games/polic.json#/coils/9._note: Playfield GI dimming control. Commented-out non-mod SolCallback in base block, active in both if/else branches
  • games/polic.json#/coils/10._vbscript_callback: SolBGGIBlink
  • games/polic.json#/coils/10._inferred_type: gi_relay
  • games/polic.json#/coils/10._note: BG GI dimming — always active (not in ModSol conditional)
  • games/polic.json#/coils/11._vbscript_callback: Flash113 / FlashMod113
  • games/polic.json#/coils/11._inferred_type: flasher
  • games/polic.json#/coils/11._note: f113. Skill shot insert flasher
  • games/polic.json#/coils/12._vbscript_callback: Flash114 / FlashMod114
  • games/polic.json#/coils/12._inferred_type: flasher
  • games/polic.json#/coils/12._note: f114 / f114a. Two inserts driven by one coil
  • games/polic.json#/coils/13._vbscript_callback: SolCar
  • games/polic.json#/coils/13._inferred_type: motor
  • games/polic.json#/coils/13._note: Drives car mechanism up/down ramp. Controls switches 31 (back) and 32 (front). Plays 'Motor' sound loop
  • games/polic.json#/coils/14._vbscript_callback: SolRelease
  • games/polic.json#/coils/14._inferred_type: ball_management
  • games/polic.json#/coils/14._note: Kicks ball from sw11 to shooter lane. Also clears Controller.Switch(14)
  • games/polic.json#/coils/15._vbscript_callback: SolGI
  • games/polic.json#/coils/15._inferred_type: gi_relay
  • games/polic.json#/coils/15._note: Main playfield GI on/off relay
  • games/polic.json#/coils/16._vbscript_callback: Flash125 / FlashMod125
  • games/polic.json#/coils/16._inferred_type: flasher
  • games/polic.json#/coils/16._note: f125. 1c — bottom left shark dome
  • games/polic.json#/coils/17._vbscript_callback: Flash126 / FlashMod126
  • games/polic.json#/coils/17._inferred_type: flasher
  • games/polic.json#/coils/17._note: f126. 2c — top left croc dome
  • games/polic.json#/coils/18._vbscript_callback: Flash127 / FlashMod127
  • games/polic.json#/coils/18._inferred_type: flasher
  • games/polic.json#/coils/18._note: f127. 3c — center rat dome
  • games/polic.json#/coils/19._vbscript_callback: Flash128 / FlashMod128
  • games/polic.json#/coils/19._inferred_type: flasher
  • games/polic.json#/coils/19._note: f128. 4c — bottom right weasel PF lamp
  • games/polic.json#/coils/20._vbscript_callback: Flash129 / FlashMod129
  • games/polic.json#/coils/20._inferred_type: flasher
  • games/polic.json#/coils/20._note: f129 / f129a. 5c — jackpot insert and scope billboard
  • games/polic.json#/coils/21._vbscript_callback: Flash130 / FlashMod130
  • games/polic.json#/coils/21._inferred_type: flasher
  • games/polic.json#/coils/21._note: f130. 6c — million flasher insert
  • games/polic.json#/coils/22._vbscript_callback: Flash131 / FlashMod131
  • games/polic.json#/coils/22._inferred_type: flasher
  • games/polic.json#/coils/22._note: f131. Left dome — possibly backbox topper
  • games/polic.json#/coils/23._vbscript_callback: Flash132 / FlashMod132
  • games/polic.json#/coils/23._inferred_type: flasher
  • games/polic.json#/coils/23._note: f132. Right dome — possibly backbox topper
  • games/polic.json#/_source/confidence_notes: High confidence on coils from SolCallback/SolModCallback assignments. High confidence on switches from sw*_Hit/UnHit handlers, PulseSw calls, DTHit/STHit target arrays, and Controller.Switch assignments. Flasher coils (9, 13, 14, 25-32) have both ModSol and non-ModSol paths. Lamps use vpmMapLights with InsertLamps collection (ROM-driven, no explicit lamp IDs in script). Car mechanism (sol 15) drives switches 31/32 via position logic. Trough is manual 3-ball (sw10/11/12) with custom kick logic, not cvpmTrough. Framework constants from S11.VBS: sLRFlipper=46, sLLFlipper=48, swTilt=57.

Unresolved questions

  • Is the I/O enumeration complete for every supported physical/controller variant?
  • Which inferred VPX behaviors reflect real hardware, and which are table-script conveniences?
  • Are all mechanism home states, sensors, motion constraints, and ball interactions documented?

Sources

  • legacy.game.polic: games/polic.json at the pinned migration revision.

ROM sets

Every driver that resolves to this physical machine.

ROM set Description Year Parent Hardware
polic_lx5piPolice Force (LX-5pi (Post INDISC) MOD) 2026polic_l4
polic_lx5Police Force (LX-5a MOD) 2025polic_l4
polic_l4Police Force (LA-4) 1989
polic_l3Police Force (LA-3) 1989polic_l4
polic_l2Police Force (LA-2) 1989polic_l4
polic_g4Police Force (LG-4 German) 1989polic_l4

Parent set: polic_l4 — clones share this definition unless a hardware difference is noted.

Evidence

Every claim above traces to one of these. When they disagree: a known-working VPX script wins on controller addresses and causality, the manual wins on wiring and construction, pinned PinMAME wins on emulator routing and display layout.

  • Legacy definition

    legacy.game.polic

    games/polic.json; origin=vbscript-parser

    by
    pinmame-game-defs contributors
    rev
    4ea106d08072
  • Legacy definition

    legacy.platform.system11

    platforms/system11.json

    by
    pinmame-game-defs contributors
    rev
    4ea106d08072
  • PinMAME catalog

    BSD-3-Clause

    pinmame.catalog.4ec52ff0ac13

    PinmameGetGames

    by
    PinMAME contributors
    rev
    4ec52ff0ac13

Something wrong or missing?

This definition still has 13 unmet requirements, listed under Coverage above. Fixes belong in the definition itself — editing on GitHub forks it for you and opens the pull request.

Cite a source for anything you change — a manual page, a line in a working VPX script, PinMAME source, or a reading from the machine's own service menu. Claims without provenance cannot be validated.

Same platform