       break;
   }
 
-  // Game controller pass through (XXX currently broken)
+  // Game controller pass through (Courtesy norgate)
   #if gameControllerDataPin >= 0
-    digitalWrite(gigatronDataPin, digitalRead(gameControllerDataPin));
-  #endif
+    for (;;) {
+      byte serialByte = 0;
+      sendPulse(gameControllerLatchPin);
+      for (byte i=0; i<8; i++) {       // Shift in all 8 bits
+        serialByte <<= 1;
+        serialByte |= digitalRead(gameControllerDataPin);
+        sendPulse(gameControllerPulsePin);
+      }
+
+      if (serialByte == 255)
+        break;
+      critical();                      // Forward byte to Gigatron
+      sendFirstByte(serialByte);
+      nonCritical();
+    } // Loop locally while active to skip PS/2 and waitVSync
+
+    // Allow PS/2 interrupts for a reasonable window
+    delay(14);                         // The game controller probe takes 1 ms
+  #else
+    delay(15);
+  #endif
+
+  // debugging
+  PORTB &= ~gigatronDataBit;
+  PORTB |= gigatronDataBit;
 
   // PS/2 keyboard events
-  delay(15);                           // Allow PS/2 interrupts for a reasonable window
   byte key = keyboard_getState();
   if (key != 255) {
     byte f = fnKey(key ^ 64);          // Ctrl+Fn key?

  return count;
}

/*----------------------------------------------------------------------+
 |                                                                      |
 |      EEPROM functions                                                |

//
// Supported:
//      - Arduino/Genuino Uno
//      - Arduino Nano
//      - Arduino/Genuino Micro
//      - ATtiny85 (8 MHz)
//
