This information is intended for authors of software that control a Dave Jones Design VMUX series video switcher. An ASCII text version of this page is here.
The VMUX series video switchers are controlled by sending a series of characters from a computer's parallel port to the switcher. Up to 7 VMUX switchers can be controlled by a single parallel port.
The signals from the parallel port that are used to control a single VMUX switcher are the 'STROBE', 'D0', 'D1', and 'BUSY' signals. Additional VMUX switchers can be connected by looping the 'STROBE' and 'D1' signals to each switcher and by using the extra data outputs of the parallel port ('D2', 'D3', etc...) instead of 'D0' for each of the other switchers. Only one 'BUSY' signal is used which comes from the first switcher.
There are two types of data streams that get sent out to the switcher. The first is the initialization stream, which must be sent to the switcher after it has been powered up. This stream initializes the outputs of the switcher. If this is not done, none of the outputs of the switcher will put out video signals. The second type of data stream is to set the patch inside the switcher and determines which input is connected to which output. This stream can be sent to the switcher at any time once the switcher has been initialized.
Synchronization of data streams
Data streams may only be sent to the switcher while the switcher is not busy. The only time the switcher is busy is after a stream has been sent to the switcher and that data has not yet been used by the switcher. The switcher will wait as long as one frame of video before it will set it's internal registers using the data stream it received. During this time the switcher will put out a busy signal on the parallel port to tell the computer that it has not yet used the last stream of data. You should always check the busy signal before sending a data stream. If you don't then the switcher may be set into an unknown state and will not work properly.
Data stream format
The data stream used to control a VMUX switcher consists of 4 bytes sent out for every output of the switcher followed by 2 bytes of control data and then a final byte telling the switcher that the data stream is complete. Any switcher in the VMUX series will accept data streams designed for other models, but not all outputs will be set properly if there are more outputs than data sent to the switcher. In other words, if 32 outputs worth of data are sent to an 8 output switcher, the last 8 outputs of data sent will be used to set the switcher. On the other hand if 8 outputs worth of data are sent to a 32 output switcher then only 8 of the 32 outputs will actually change.
The data sent out of the parallel port are binary characters rather than printable characters. Printable characters can be used if only one (or a couple) of the possible 7 switchers are connected. When controlling less than the maximum of 7 switchers, unused data outputs can be set to any state without affecting the other switchers. This means that, for example, if you only connect a single switcher then it doesn't matter what state 6 of the 8 data bits are in, only the least significant 2 bits matter. Because of this you could send out an ASCII '0' character instead of a binary 0 because the least significant 2 bits are the same for both numbers. It also means that an ASCII '4', '@', 'D', 'H', and many other ASCII characters could be used instead of the binary 0. This may be important if the programming is being done in BASIC or using system subroutines that only support sending printable characters out the parallel port.
An example of the data stream format sent to an 8 output VMUX switcher consists of 35 characters being sent out of the parallel port:
0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,3
Data stream tail packet
Both types of data stream end with a 3 character tail. During these three bytes the data lines going out to each switcher must each have their bit set to 1 followed by 0 followed by 1. The 'D1' output which is a control bit sent to all switchers gets a 0, 0, 1 on it's bit. If a single switcher is being used, these bits combine into the 1, 0, 3 which is sent out the parallel port. For a single switcher, an ASCII string "103" can be sent. It is important that no additional characters be sent after the '3'. If you are programming in BASIC you must be sure that you do not accidentally send a carriage return after the '3' character.
After the switcher has been powered up (or if it is turned off and then on again) you must send an initialization stream to the switcher to turn on the outputs. If you do not do this then outputs of the switcher will never put out video.
The initialization stream consists of a 4 byte packet being sent for each output of the switcher followed by a data stream tail packet. For an 8 output switcher you would send out 8 packets of 4 bytes followed by the tail packet. Each of the initialization packets are the same and consist of a 1, 0, 0, 1 being sent out each of the data bits of the parallel port connected to a switcher, except the control bit ('D1') which must remain 0 throughout. For a single switcher this is easy to remember because the bit states and the byte values are the same. Send a binary 1, 0, 0, 1, or an ASCII string "1001" for each output of a single switcher. Then send the tail bytes 1, 0, 3, or an ASCII string "103".
For an 8 output switcher the initialization stream consists of 35 bytes or characters being sent to the switcher (8 times 4 bytes plus 3 tail bytes).
Once the switcher has been initialized (and you wait for the switcher to no longer be busy), you can send out a control stream to set the patch inside the switcher. The control stream consists of a 4 byte packet being sent for each output of the switcher followed by a data stream tail packet. For an 8 output switcher you would send out 8 packets of 4 bytes followed by the tail packet.
The 'D1' output bit, which is the control bit, stays at a 0 state during the 4 byte data packets in a control stream. The other data bits will change based on the patch information being sent to the switchers. If only one switcher is connected then only data bit, 'D0', will change.
The first bit of the 4 bits sent out each data output in each packet is always a 0. The next three bits determine which input is patched to the output being set. This means that if a packet of 0,0,0,0, is sent out, then the first input is patched to this particular output. Likewise if a 0,0,0,1, is sent then the second input is connected to this output. The last input (input 8) would be selected if a 0,1,1,1 was sent out.
The control packets go out to the switcher in reverse order, so the first packet sent defines the patching for the last output. The second to the last packet sent defines the second to the last output. The reason for this is to make control streams for large switchers work properly on small switchers. For example if a control stream intended for a 32 output switcher is sent to an 8 output switcher, it will only use the last 8 packets before the tail so it will still get the patch information for outputs 8, 7, 6, 5, 4, 3, 2, and 1.
For an 8 output switcher the control stream consists of 35 bytes or characters being sent to the switcher (8 times 4 bytes plus 3 tail bytes).