Thanks, yes I've been reading up on 'Chalieplexing' and I've seen the resistor-based multiplexing trick done before in the stuff I've done with LEGO Mindstorms. But I think 8 pins is more than enough to rig up a set of game controls, particularly if you can input and output on any of them. Someone even more ham-fisted with a soldering iron than me could do it.
Though this is now where I begin to show my Linux noobiness. I've tried to get to grips with Windows HID drivers before and failed, so my hope is there's someone out there who could do this in their sleep. Or at least, can once they get one of these devices.
The concept is a generic input device driver with a single configuration file that you can define based on what you've built - so you can publish a simple schematic for someone to copy and provide the config to make it work, without having to re-code the driver yourself. At the top of the config file you define and name how many joysticks, mice, keyboards etc. you want the driver to register (and set a speed in points for any mouse movement). Then you have a series of strings in a simple, user-friendly (case insensitive!) syntax, something like:
pin 0,1 = Joystick0.Up
pin 0,2 = Joystick0.Down
pin 0,3 = Joystick0.Left
pin 0,4 = Joystick0.Right
pin 0,5 = Joystick0.Button0
for example for an Atari type joystick. Meaning, if you raise the voltage on pin 0 and can detect something on pin 1, then on Joystick 0, signal someone pressing and holding 'Up'. You could have an optional term on the end to say '.Hold' (the default) or 'Click', meaning to simulate a single tap and not repeat. And similarly you could divert inputs to the keyboard, or make the mouse cursor move left/right/up/down by however many points you defined at the start:
pin 6,0 = Keyboard0.X.Tap
pin 6,1 = Keyboard0.Shift.Hold
pin 7,0 = Mouse0.Up.Click
pin 7,1 = Mouse0.Down.Click
pin 7,5 = Mouse0.LeftButton.Hold
The driver would scan sequentially by raising the voltage on each GPIO pin specified and looking for a signal on the others. That means if you want to use diodes, the path 1->2 can be a different thing from path 2->1. But if you don't, you could just wire in an old joystick like the first example. Or wire up a 4x4 grid of buttons for video whack-a-mole, or multiplex 6 joysticks, or two sticks with a dozen buttons each. But the games you play with it only need to listen to one driver. So anyone can build any control device for anyone and (at least try to) play any game with it.
Will it work? Open to suggestions...