You have several solutions:
For each possible connected device, read all pins to detect voltage levels, input/output pins, clocks, etc. and build a "signature map" for each device.
Once the detection is reduced to one only element, try to send some signals to known pins to confirm your guess.
- You can use the full 100 lines of your connector.
- You can build simple adapters with simple pin-PCB and wires.
- You can damage the connected device, since you will never be sure that a detection didn't failed because of a grounded wire and/or a bad soldering.
- Get the "signature map" of a device can be a real pain, and you'll need hardware and/or tests to get the correct values.
- You may have difficulties to adapt the generic program to this guess.
Keep 2 or 3 lines (according to technology used) on your connector to wire a small EEPROM.
When building the adapter for a given device, you program the EEPROM with an internal code, and, better, the full mapping of the 98 lines: input, output, type, voltage, name, ... and you can read this EEPROM from the connector each time it's used.
You can even set the EEPROM as read-only by not exposing the write pin directly, and keep a small "JTAG-like" interface on the side of the connector to allow programming it.
- No possibility of bad detection: one side of the connector is for FPGA/SoC, the second is 100% specific to the attached device.
- No need to guess anything, you near only copy the pinout to the EEPROM and that's all - your program can adapt dynamically to it. EEPROM can even code a revision number if needed.
- Principle can work for other non-game devices.
- If EEPROM is big enough (they aren't so expensive), it can even contains the required FPGA/SoC microcode for the given device, so you'll only need a bootstrap on it.
- Cost more, because of EEPROM, a sub-connector (even if it's a simple HE10), and surely a case - maybe 3D-printed however.
- More complex to start, but the more devices you allow, the easier it will be.