The template feature allows a body of code to be reused across machines. These templates allow each instantiation to fill in some parameters that complete it. For example, jet bumpers and slingshots are all instances of a "special solenoid" template.
However, every game has to fill in all of those same parameters to distinguish a jet from a sling. It would be better if we could create a partial specialization: create another template called "slingshot" and fill in some of the parameters related to slings, but not necessarily all of them. Then allow "slingshot" to be instantiated all the way to produce a final driver.
Normally the diverter works using consistantly the same power and with more than enough to move the divertor.
Very occasionally it will not activate with enough power, causing the diverter to not move. What happens next is that the ball becomes stuck, as the ball search appears not to activate the diverter, although it may be just that it is not giving it enough power.
The solenoid locking logic has several flaws and needs improving.
The number one problem is that if solenoid #0 is being pulsed, another request coming in behind it can override it.
When a ball becomes hopelessly stuck somewhere, the current ball search routine will try forever. It needs to try different approaches after so many attempts. Different games have done this differently over the years; I am not sure what the best approach is right now.
The flipper processing is extremely fragile at the moment. It does not handle switch problems at all, and it is power-inefficient. It is also more CPU intensive than it needs to be.
The coin switches need to be handled special; there is no room for error in missing these closures. Also, requirements for minimum pulse length and time between pulses requires a dedicated driver.
Rework the way that display effects are queued up, when low priority but important effects wait around to try to display later. The main problem is that if multiple effects are waiting, the order in which they get retried is essentially random. It would be better if priority were considered here.