output There are a zillion vintage computers out there, and most of them are designed to connect to CRTs.
In this project, you'll learn about the video output of one specific 1980s computer (the Xerox 820) and see how to create a converter to a modern DVI-compatible video signal using the Adafruit Feather RP2040 DVI & CircuitPython.
With further work, these techniques may be applicable to other vintage computers as well.
Xerox 820
Just before the arrival of the IBM PC, Xerox created the "Xerox 820 Information Processor". It was packed with 64kB of RAM (around 60kB usable) and supported the CP/M operating system. It came with a display (that also contained the main board), keyboard, and floppy drives. Accessories like printers were also available.
In 2023, I was at an estate sale where I bought a complete system and 4 additional CPU boards.
I'd like my additional CPU boards to be usable, but in order to be usable as CPM computers, they need power, a display, keyboard, and a floppy drive.
This learn guide tackles one of those items by creating an adapter from the Xerox 820's TTL-level video signals to DVI.
Research
There's a relative wealth of documentation about the Xerox 820, including schematics and other useful information. I've gathered some of it in a personal GitHub repository.
When it comes to the video, here are some salient facts from the Software Developers Reference:
- Video bitrate: "10.694MBPS" (pixel time 93.51ns)
- Active bits per horizontal line: 560
- Total bits per horizontal line: 700
- Active lines per field: 240
- Sync & Data signals on a 10-pin connector are all TTL-compatible
This is an excellent match for the video specs of the Adafruit Feather RP2040 DVI, which can support a 640x240x1bpp video mode. Each line is repeated twice, creating a super well-supported 640x480@60Hz video signal.
The next step is figuring out how to capture the digital data. The "PIO" coprocessor in the Adafruit Feather RP2040 is key for this. We can run a tiny program on it that handles the horizontal and vertical sync pulses, grabbing the correct video data bits. By happy coincidence, it's possible to capture in exactly the right format for DVI video output.
Even though this is a very high performance task, dealing with millions of pixels every second, it's actually possible to code it in CircuitPython. If performing any processing of the pixel data had been necessary, though, it would probably have had to be an Arduino or pico-sdk C++ project.
Text editor powered by tinymce.