[Back to JOYSTICK SWAG index]  [Back to Main SWAG index]  [Original]


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.


[Back to JOYSTICK SWAG index]  [Back to Main SWAG index]  [Original]