Skip to content

Driver Mode 25: System 11 A/C Relay

This page describes a mode of operation for a driver. See the Working with Drivers section of the FAST Serial Protocol documentation for details about how to use it.

This information is preliminary

FAST Retro Platform components are not yet available directly as we focus on our game studio partners releasing commercial conversion kits and new game experiences based on this platform. We will release Retro platform controllers for direct sale in the future.

Bally/Williams System 11 machines have a special "A/C Relay" which is needed to control certain drivers. The FAST Pinball System 11 controller has special commands for interfacing with this relay, and this guide explains how those work and how to program your game to use them.

Background on the System 11 A/C Relay

First of all, the A/C relay is unfortunately named, as it has nothing to do with "Alternating Current" or AC power.

Back in the era when System 11 machines were designed, the hardware and logic for controlling drivers was expensive, so the designers economized the System 11 controller to allow two devices to share a single driver control output. If you look at the solenoid chart from a System 11 machine, you'll notice that solenoids 1-8 have two functions for each output, which were referred to as an "A" side and "C" side.

Refer to this solenoid table from Whirlwind:

Notice that there is no solenoid 01, rather, there's a 01A (the outhole kicker) and a 01C (bottom right flasher). The first eight drivers lines (01-08) are all this "Switched" type of solenoid where the output line will either control the A or C device.

This driver sharing is accomplished via a relay, which itself is just another solenoid output. (In the Whirlwind example from above, you can see that driver 12 is the "A/C Select Relay".)

When the relay is off (not active), then any commands for drivers 1-8 are routed to the "A" side devices, and when the relay is on (active), driver outputs 1-8 control the "C" side devices. This design allows for 16 different devices to be controlled by only 9 driver outputs (8 for the shared pairs and one for the relay). Pretty smart!

The System 11 designers were smart in other ways too. For example, notice that any solenoids which affect game play (outhole kickers, diverters, drop target resets, etc.) are all on the "A" side, which is the default side which is active when the A/C relay is off. This means that if the A/C relay breaks for any reason, the game is still playable and can still collect quarters. The "C" side devices fall into the "nice to have but not critical" department, in the case of Whirlwind nothing more than flashers.

What this means is that if you're writing game code for a machine using the FAST Pinball System 11 controller, you need to understand how this relay works and to understand the caveats.

Logical Process for using A/C controlled devices

At a high-level, using A/C controlled devices is pretty easy. If you want to drive an A-side device, you just send a command like regular. And if you want to use a C-side device, you first need to activate the A/C relay, then fire your C-side device (or multiple devices), then deactivate the A/C relay when you're done.

That said, there are some caveats to keep in mind:

  • The A/C select relay is not "instant". You need to wait for enough time to pass for the relay to fully mechanically transition. Remember you're dealing with a 40+ year old relay, so this could take some time. 15ms? 20? 25? You may have to experiment.

  • It is important that you DO NOT switch the A/C relay while any of the drivers are active. Since this is DC power, breaking or making a connection while power is flowing across the contacts will degrade the life of the relay and could potentially even weld the contacts together. (More details on relay wear.)

How FAST Pinball System 11 controllers handle the A/C relay

The FAST Pinball System 11 controller does a few special things to accommodate the A/C relay. First, it creates "proper" driver objects for each A-side and C-side device. Drivers 01A through 08A map to FAST drivers 0x0 - 0x7. Drivers 01B - 08B map to FAST drivers 0x8 - 0xF.

This means you can use separate DL: configuration rules for each driver, which is nice because your default pulse times will most certainly be different for each. So in terms of configuration, you can write out all your DL: configs for drivers 0x0 - 0xF without worrying about the A-side or C-side stuff.

To actually use a driver, you would use a standard TL: (trigger a local driver) command to manually turn the driver on or off, or to manually pulse a driver.

However, only trigger commands which correspond to the mode of the A/C relay actually do anything. Trigger commands for the "opposite" side of the relay are ignored. (They don't fail, they just don't do anything.) In other words, when the A/C relay is off, TL: commands for drivers 0x0 - 0x7 work as expected, and commands for 0x8 - 0xF won't do anything. And on the flip side, when the A/C relay is on, trigger commands for drivers 0x0 - 0x7 don't do anything, and commands for 0x8 - 0xF work as expected.

How do you know what state the driver is in?

One of the complexities for a game designer is that you obviously need to know what state the A/C relay is in before you can send it any commands. And remember, the A/C relay switching is NOT instant, so really there are three states:

  • Ready for A-side triggers (inactive)
  • Ready for C-side triggers (active)
  • In-transition, no drivers can be triggered until the relay switches and stabilizes

Later System 11 machines have a switch in the switch matrix connected to the A/C relay which you can use to know what state the relay is in. (This is a mechanical switch in the relay, meaning you need to configure it with an appropriate debounce time, which will most likely be somewhat slow, like 15-20ms or more.)

If you're working with an earlier machine that does not use the mechanical A/C relay status switch, then the FAST Pinball System 11 controller can create a virtual switch which reports like any other switch which you can use in your game code for a similar purpose. (This is configurable, details below.)

Controlling the A/C Relay

Because the A/C relay is fairly unique, the FAST Pinball firmware has a special driver mode created just to control it. This driver mode is 0x25 (AC_Relay). It is a manual only latching driver. (e.g. you cannot configure this driver to pulse or be used with automatic hardware rules. It can only be enabled and disabled.)

If you would like this driver to use its "virtual" switch to report the physical A/C relay status, then set the SWITCH_ID parameter to the number of the virtual switch you'd like to associate with this driver. (Setting it to zero disables this virtual switch functionality which you can do if your machine has a physical switch on the matrix for this purpose.)

When you use this virtual switch, the Relay On Report Time and Relay Off Report Time values let you specify, in milliseconds, how much time passes between the relay switching states and the switch reporting of it. In other words, this is how you allow for the 25ms (or whatever) delay to allow the mechanical relay to transition and stabilize. These settings are only used when the SWITCH_ID is not zero, since a value of zero disables the virtual switch function when the machine contains a physical switch for this purpose.

Here are the full details for the Mode 25 use of the DL: configuration command:

DL:<driver_id>,<control>,<switch_id>,<25>,<Relay On Report Time>,<Relay Off Report Time>,<NA>,<NA>,<NA><CR>

<driver_id>

The driver associated with the A/C relay. Note that these will not be the driver number in the operator's manual. FAST Pinball will provide you with the list of drivers and their numbers for each machine.

<control>

Sets the control mode of the driver. Most likely this would be 0x81 which enables the driver (e.g. allows it to function) via a "virtual switch" (e.g. manual control), with the virtual switch set to false. Then you'll use TL: commands to actually trigger it to fire.

<switch_id>

The ID of a special virtual switch which will be created to report when the relay changes state. If your machine has a physical switch on the matrix which already does this, then disable this functionality by setting the value to 0x0 Otherwise pick a switch value here and then use that in your code to know what state the relay is in.

<25>

This is the control mode of this driver (pulse, latch, delayed, etc.) In this case, the value of 0x25 is the mode which configures this driver to control an A/C relay.

<Relay On Report Time>

The number of milliseconds to wait after receiving an enable trigger before reporting that the relay closed, usually around 15ms. This is only valid if your <switch_id> is not zero.

<Relay Off Report Time>

The number of milliseconds to wait after receiving a disable trigger before reporting that the relay opened, usually around 15ms. This is only valid if your <switch_id> is not zero.

<NA>

Unused extra parameter.

Example Configuration Commands

Here is an example of the command to set up the A/C relay driver. In this case, the A/C relay is driver 0x13. It is enabled via 0x81, set to physical switch mode (0x00), configured as an A/C relay (0x25). When using a physical switch as seen here, then that switch's settings (as configured via the SL: command are used to control debounce open and debounce closed timings which are reported.

DL:13,81,00,25,00,00<CR>

Here is another example of the command to set up the A/C relay driver. This one below is again setting driver 0x13 to be the A/C relay, (again this might be different depending on what System 11 machine you're using). It is enabled, set to virtual switch mode reporting switch 0x22, and configured as mode 0x25 to be an A/C Relay. The virtual switch will be reporting closed after 0x0F milliseconds (15ms), and will report open after 0x14 ms (20 milliseconds, remember these values are hex.)

DL:13,81,22,25,0F,14<CR>

Once the A/C relay driver is setup using the commands above, the following commands can be used to control it at run time:

  • TL:<driver_id>,0x03<CR> to enable the A/C relay (manual ON mode)
  • TL:<driver_id>,0x02<CR> to disable the A/C relay (manual OFF mode)

Examples:

  • TL:13,3<CR> will turn on the A/C relay connected to driver 0x13
  • TL:13,2<CR> will turn off the A/C relay connected to driver 0x13

A/C Relay Duty Cycle

We don't know what the original duty cycle for the A/C relay is. We assume you should not keep it on forever, but also there appear to be light shows which keep the A/C relay on continuously for multiple minutes at a time. Since the A/C relay is a standard driver, it will be disabled when your watchdog expires just like any other driver.

N or > jump the next page, P or < for previous, search with S or ?