*** smpc.c	Fri Jun 24 23:32:29 2011
--- smpc.c	Tue Nov  2 23:18:39 2010
***************
*** 43,48 ****
  u8 * SmpcRegsT;
  SmpcInternal * SmpcInternalVars;
  
  //////////////////////////////////////////////////////////////////////////////
  
  int SmpcInit(u8 regionid, int clocksync, u32 basetime) {
--- 43,52 ----
  u8 * SmpcRegsT;
  SmpcInternal * SmpcInternalVars;
  
+ #ifdef GEKKO
+ int smpcperipheraltiming = 5000;
+ #endif
+ 
  //////////////////////////////////////////////////////////////////////////////
  
  int SmpcInit(u8 regionid, int clocksync, u32 basetime) {
***************
*** 429,435 ****
        ScuSendSystemManager();
        return;
     }
     if ((SmpcInternalVars->intbackIreg0 = SmpcRegs->IREG[0]) != 0) {
        // Return non-peripheral data
        SmpcInternalVars->firstPeri = 1;
        SmpcInternalVars->intback = (SmpcRegs->IREG[1] & 0x8) >> 3; // does the program want peripheral data too?
--- 433,443 ----
        ScuSendSystemManager();
        return;
     }
+ #ifndef GEKKO
     if ((SmpcInternalVars->intbackIreg0 = SmpcRegs->IREG[0]) != 0) {
+ #else
+    if ((SmpcInternalVars->intbackIreg0 = (SmpcRegs->IREG[0] & 0x1)) != 0) {
+ #endif
        // Return non-peripheral data
        SmpcInternalVars->firstPeri = 1;
        SmpcInternalVars->intback = (SmpcRegs->IREG[1] & 0x8) >> 3; // does the program want peripheral data too?
***************
*** 629,635 ****
  
              // If retrieving peripheral data, add 15 milliseconds
              if (SmpcRegs->IREG[1] & 0x8)
                 SmpcInternalVars->timing += 16000; // Strangely enough, this works better
  //               SmpcInternalVars->timing += 150;
           }
           return;
--- 637,648 ----
  
              // If retrieving peripheral data, add 15 milliseconds
              if (SmpcRegs->IREG[1] & 0x8)
+ #ifndef GEKKO
                 SmpcInternalVars->timing += 16000; // Strangely enough, this works better
+                                                // too long for wii
+ #else
+                SmpcInternalVars->timing += smpcperipheraltiming;
+ #endif
  //               SmpcInternalVars->timing += 150;
           }
           return;
