I've been doing some work in PinMAME to better emulate the shift register interface used for the saucer LEDs in Attack from Mars, and the helmet lamps in Bride of Pinbot. For both of those machines, you have two signals, clock and data, used to shift bits into two shift registers so you can drive 16 outputs.
I've been able to shift bits out with a clock pulse every 15ms, but if I try to increase the frequency of commands sent over USB, it starts to drop bits. This is using a pulseTime of 2ms in the machine configuration YAML and a series of function calls that eventually hit PRDriverStatePulse().
I'm wondering, without resorting to using the auxiliary bus controller (which is used by the alphanumeric display on BOP), if there's a way I could get a higher frequency of updates. I had considered using the PRDriverStateSchedule() API, but that appears to schedule just 32 bits over the course of 1 second (31.25ms per bit). I could use a patter for the clock output, but wouldn't have any way to synchronize changes to the data output.
And may I just point out that the API documentation related to scheduling could use some work. Here's what I found in pyprocgame: "Schedules this driver to be enabled according to the given schedule bitmask." And libpinproc: "Assigns a repeating schedule to the given driver."
No mention of the bit order from the mask (MSB first or LSB first), explanation of duration for each bit and how the cycleSeconds and "now" parameters affect it.