SNES_PWR = Bits 11111000 = Top 5 data pins on parport tied together SNES_LAT = Bits 00000010 = Second data pin on parport SNES_CLK = Bits 00000001 = First data pin on parport _ = low, - = high Line 123 124 126 127 128 129 130 131 Pin 1: Power: ----------------------------------------------------- Pin 2: Clock: ----------------------------_______--------------____ Pin 3: Latch: _______-------_______________________________________ Pin 4: Data: 'B' 'Y' Output: 0xf9 0xfb 0xf9 0xf8 0xf9 0xf8 Line 123: Supply power to the top 5 pins (tied together to hopefully provide enough current without blowing up your parallel port), keep clock high, keep latch low. 0xf9 = 11111000 + 00000001 Line 124: Take latch high, which should make the controller read the value of all the switches (buttons) inside. 0xfb = 11111000 + 00000010 + 00000001 Line 126: Take latch low, which should store the value of everything read above and have the results prepared for reading. 0xf9 = 11111000 + 00000001 Line 127: Clock is high, so the first button ('B') is being sent on the data pin. Read it. Line 128: We're done reading this button, so we take clock low. 0xf8 = 11111000 Line 129: We want the next button, so we take clock high. 0xf9 = 11111000 + 00000001 Line 130: We read the bit currently being sent on the data pin (for the 'Y' button.) Line 131: We've got it, take clock low. 0xf8 = 11111000 ...etc.