Using a computer monitor that flashes black and white I'm able to push text into a microcontroller. I've used an ATmega168 for prototyping, with the analog comparator connected to the input capture feature of TIMER1. On every interrupt I change the edge sensing to capture the next.
By following the Atmel Application Note I decided on timing based decoding. I may try sample based in the future to see if I can increase relability.
I'll be posting on my blog about this: http://jumptuck.com/category/projects/light-programmer/