Hey guys,
I just wanted to share a project I've just completed - I've modified my MS2930 monitor to auto switch video modes based on the horizontal sync being sent to the monitor over the VGA connector.
The first thing I did was go out and buy an Arduino, a breadboard, some push pin wires, a pack of assorted resistors and some MOSFETs suitable for use with an Arduino (the "logic" type that can be switched using 5v on the gate).
I then did a bit of a search and found
this Arduino library for measuring the frequency of an input. Hooked up Digital Pin 5 from the Arduino to Pin 13 from the VGA output of my PC. I found the easiest way to achieve this was to use 2 gender changer plugs (1 male, 1 female), then cut the shielding on the bottom side of one of the male connectors and fold it back so there isnt a sharp edge along the bottom. I then simply inserted a wire into Pin 13 (bottom middle pin) of the female gender changer and then connected the male gender changer to hold the wire in place. Inserted the combined gender changers into the VGA output from the video card and then connected the regular VGA cable going to the arcade monitor.
So, that allows me to monitor the horizontal frequency of the current video mode and then I can set some variables to mirror the behavior of setting the video mode dip switches.
Now need to figure out the best way to replace the physical dip switches on the remote board.. I have a Blast City cab and found that getting access to the remote board is near impossible without dismantling the cabinet. This isn't something I really wanted to do, so I looked for alternatives.
I then noticed that the remote board was connected directly to the monitor via a 12 pin ribbon cable - one of those pins must carry the value of the dip switches. It turns out that Pin 12 does indeed serve this exact purpose

I then set out to replicate the circuit that the dip switches are connected to on my breadboard. It's a pretty simple circuit that takes a 12v input, then through a series of resistors alters the voltage. This worked out to 31kHz = 10.16v, 24kHz = 6.03v, 15kHz = 2.14v.
Then instead of having dip switches, I have 2 MOSFETs serve the same purpose, but controlled via software running on the Arduino.
I have created an example of the circuit layout on
123d.circuits.io. If you click the Run Simulation button, set the voltage on the power supply (the top dial) to 12v and you will see it cycling through much the same voltages as I outlined above (the MOSFETs have a very little amount of resistance, so the voltages won't be exact, but they're good enough for this job).
So, finally, we need to bring it all together. For the 12v and Ground connected to the breadboard in my sample circuit, it just so happens that pin 11 of the ribbon connector going into the monitor is Ground and pin 10 is 12v! How convenient

The point that the multimeter connects to in the sample is where I get the value for pin 12 of the ribbon cable - the one that tells the monitor the hsync mode to use.
I then wrote this code to run on the Arduino that ties it all together:
#include <FreqCounter.h>
long int frq;
bool dip1 = false;
bool dip2 = false;
int dip1pin = 7;
int dip2pin = 8;
void setup() {
pinMode(dip1pin, OUTPUT);
pinMode(dip2pin, OUTPUT);
}
void loop() {
FreqCounter::f_comp= 8; // Set compensation to 12
FreqCounter::start(1); // Start counting with gatetime of 100ms
while (FreqCounter::f_ready == 0) // wait until counter ready
frq=FreqCounter::f_freq; // read result
if(frq >= 30) {
dip1 = false;
dip2 = false;
}
else if(frq >= 20 && frq < 30) {
dip1 = true;
dip2 = false;
}
else if(frq >=10 && frq < 20) {
dip1 = false;
dip2 = true;
}
else {
// invalid frq, don't change dip switches
}
digitalWrite(dip1pin,dip1);
digitalWrite(dip2pin,dip2);
delay(10);
}
With all of that done, it's time to crack open a beer and play some games

Hope someone else out there finds this little guide/write up helpful. I know there's plenty of people out there that have MS2930's that secretly wished they had a MS2931 - well, now they can!

Finally, if you made it this far and want to see it in action, here's
a quick demo video I made!
Replacing this (the first 2 switches):

With this:

The gender changer plugs with the wire connected to pin 13 (hsync):

The ribbon cable that carries the video mode signal we need to replace (this is located at the bottom front of the monitor, directly behind the bezel):
