For those curious, had need for a system counting pulses out of an FPGA so fired up a 800*600 test pattern generator board (so failure didn't nuke a graphics card) and knocked up some code to locate single lines in the frame and then read a single colour as many times as it could as a digital read.
Which captured the colour bars being display to one bit depth between 24 and 26 times (32 pixels between samples). Which suggests that you could identify which BIOS menu was selected, but yes/no confirmation boxes might be narrow enough to be a problem, due to dither and spacing between pixel captures.
Many,many ways to tighten the code up but an interesting proof of concept. Suspect you could improve things to reliably hit 8 pixels/a character, but not a pixel in a character so can't reconstruct a word or anything really useful.
Code:
uint32_t redValues[120];
byte arrayIndex = 0;
elapsedMicros sinceupdate=0;
bool LineSyncWaslow = true;
int lineSyncCount =0;
uint32_t longcount =0;
uint32_t longcount2 =0;
uint32_t linetime =0;
void setup() {
Serial.begin(57600);
pinMode(13,INPUT); //frame synce
pinMode(15,INPUT); //line sync
pinMode(16,INPUT); //Red
}
void loop() {
while (digitalRead(13)==LOW); //wait for frame pulse start
while (digitalRead(13)==HIGH); //wait for frame pulse to end
sinceupdate=0;
lineSyncCount =0;
longcount =0;
arrayIndex = 0;
while (digitalRead(13)==LOW){ //for length of one frame
if (digitalRead(15)==HIGH&&LineSyncWaslow==true){
if (lineSyncCount==50) sinceupdate=0;
if (lineSyncCount==51) linetime=sinceupdate;
LineSyncWaslow = false;
lineSyncCount++;
}
if (lineSyncCount==50)longcount++;
if (lineSyncCount==51){
longcount2++;
redValues[arrayIndex]=digitalRead(16);
arrayIndex++;
}
if (digitalRead(15)==LOW&&LineSyncWaslow==false){LineSyncWaslow = true; }
}
Serial.print(longcount2);
Serial.print(' ');
Serial.print(arrayIndex);
Serial.print(' ');
for (byte i=0;i<arrayIndex+1;i++){
Serial.print(redValues[i]);
Serial.print(',');
}
Serial.println();
Serial.print(linetime);
Serial.print(' ');
Serial.print(longcount);
Serial.print(' ');
Serial.println(lineSyncCount);
delay(1000);
}