Here is some sample code written in
Qbasic
for reading from SNES joypads on the LPT
This code was written by Kerry High.
DECLARE SUB READPAD (SNES AS ANY)
TYPE SNESPAD
A AS INTEGER
B AS INTEGER
X AS INTEGER
Y AS INTEGER
L AS INTEGER
R AS INTEGER
UP AS INTEGER
DOWN AS INTEGER
LEFT AS INTEGER
RIGHT AS INTEGER
SEL AS INTEGER
START AS INTEGER
END TYPE
DIM SNES AS SNESPAD
CLS
DO
LOCATE 1, 1
READPAD SNES
IF SNES.A THEN PRINT "A", ELSE PRINT " ",
IF SNES.B THEN PRINT "B", ELSE PRINT " ",
IF SNES.X THEN PRINT "X", ELSE PRINT " ",
IF SNES.Y THEN PRINT "Y", ELSE PRINT " ",
PRINT
IF SNES.L THEN PRINT "L", ELSE PRINT " ",
IF SNES.R THEN PRINT "R", ELSE PRINT " ",
IF SNES.SEL THEN PRINT "Select", ELSE PRINT " ",
IF SNES.START THEN PRINT "Start", ELSE PRINT " ",
PRINT
IF SNES.UP THEN PRINT "Up", ELSE PRINT " ",
IF SNES.DOWN THEN PRINT "Down", ELSE PRINT " ",
IF SNES.LEFT THEN PRINT "Left", ELSE PRINT " ",
IF SNES.RIGHT THEN PRINT "Right", ELSE PRINT " ",
LOOP
SUB READPAD (SNES AS SNESPAD)
SNESPWR = (128 + 64 + 32 + 16 + 8)
SNESCLK = 1
SNESLAT = 2
BASEADR = &H378
OUT BASEADR, SNESPWR + SNESCLK
OUT BASEADR, SNESPWR + SNESCLK + SNESLAT
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.B = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.Y = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.SEL = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.START = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.UP = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.DOWN = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.LEFT = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.RIGHT = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.A = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.X = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.L = NOT -SGN(SNESIN)
OUT BASEADR, SNESPWR
OUT BASEADR, SNESPWR + SNESCLK
SNESIN = INP(BASEADR + 1) AND 64
SNES.R = NOT -SGN(SNESIN)
OUT BASEADR, 0
END SUB