We really love when hacks of previous hacks show up in the tip line. It shows how the hardware hacking community can be a feedback loop, where one hack begets the next, and so on until great things are everywhere. This hacked joystick port for an FPGA Pac Man game is a perfect example of that creative churn.
The story starts with Pano Man, a version of the venerable arcade game ported to a Pano Logic FPGA thin client by [Skip]. We covered that story when it first came out, and it caught the attention of [Tom Verbeure], particularly the bit in the GitHub readme file which suggested there might be a better way to handle the joystick connections. So [Tom] took up the challenge of using the Extended Display Identification Data (EDID) circuit in the VGA connector to support an Atari 2600 joystick. The EDID system is an I²C bus, so the job needed the right port expander. [Tom] chose the MCP23017, a 16-bit device that would have enough GPIO for dual joysticks and a few extra buttons. Having never designed a PCB before, [Tom] fell down that rabbit hole for a bit, but quickly came up with a working design, and then a better one, and then the final version. The video below shows it in action with Pano Man.
We think the creative loop between [Skip] and [Tom] was great here, and we can’t wait to see who escalates next. And it’s pretty amazing how much IO can be stuffed over two wires if you have the right tools. Check out this VGA sniffing effort to learn more about EDID and I²C.
The description is a little confused about the standards that allow this.
DDC is the standard that added I2C to the VGA connector. EDID is the format for a block of data a monitor makes available to the graphics card (over DDC) which describes their capabilities.
Once upon a time, the VGA I²C channel was also intended for peripherals such as mice, not just monitor identification:
https://en.wikipedia.org/wiki/ACCESS.bus
My reading of that is, Philips tried to get I2C adopted as a low-speed bus on the PC, for things like mice and keyboards. The same controller could have talked to the RTC chip on-board, and also led off-board for the KB, mouse, etc.
This was all a few years before the VESA DDC, which wasn’t ever intended to support anything other than it’s fitted purpose, a data channel between monitor and graphics card. Possibly with more uses than the single one it ended up with, which was a monitor telling a graphics card what speeds it (the monitor) supported.
It wasn’t, strictly, a VGA standard, rather a VESA one. Which is a sort-of industry group that sprang up to try bodge the super-VGA standards together, that had emerged as hardware advanced past VGA, and with nobody in the place of IBM to be able to unilaterally set a complete new standard.
Very creative and all, but I’d be much more interested if they could get the USB ports on these boxes to talk to HID devices.
That’s work in progress!