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


back home