UNIT JoyStick; (* Public Domain. Written by Ian Hinson November 1993 *) INTERFACE PROCEDURE ReadPosns; { Updates values of JoyA_X, JoyA_Y, JoyB_X, and JoyB_Y } PROCEDURE ReadButtons; { Updates the state of all buttons } { Call the function for whichever button(s) you want to test after updating all their states with a call to ReadButtons. } FUNCTION JoyA_Button1: BOOLEAN; FUNCTION JoyA_Button2: BOOLEAN; FUNCTION JoyB_Button1: BOOLEAN; FUNCTION JoyB_Button2: BOOLEAN; FUNCTION AnyButton: BOOLEAN; VAR { These variables provide the X&Y positions after they have been updated by a call to ReadPositions } JoyA_X, JoyA_Y, JoyB_X, JoyB_Y: WORD; IMPLEMENTATION VAR buttons: SET OF (JoyA_1, JoyA_2, JoyB_1, JoyB_2); PROCEDURE ReadPosns; ASSEMBLER; ASM mov ah,$84 mov dx,1 int $15 mov JoyA_X,ax mov JoyA_Y,bx mov JoyB_X,cx mov JoyB_Y,dx END; PROCEDURE ReadButtons; ASSEMBLER; ASM mov ah,$84 mov dx,0 int $15 shr al,4 xor al,$0F mov buttons,al END; FUNCTION JoyA_Button1: BOOLEAN; BEGIN JoyA_Button1 := JoyA_1 IN buttons; END; FUNCTION JoyA_Button2: BOOLEAN; BEGIN JoyA_Button2 := JoyA_2 IN buttons; END; FUNCTION JoyB_Button1: BOOLEAN; BEGIN JoyB_Button1 := JoyB_1 IN buttons; END; FUNCTION JoyB_Button2: BOOLEAN; BEGIN JoyB_Button2 := JoyB_2 IN buttons; END; FUNCTION AnyButton: BOOLEAN; BEGIN AnyButton := buttons <> []; END; END.