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

{
> Can anybody give me any info on how to read signals from pins on say
> COM2: or from LPT1: or even from The joystick port? I think it has
> been done with the PORT command or something, but what are the values
> to use to read them with?

As mentioned in the Neural_Net Echo:
}

UNIT joys;

{Joystick interface for Turbo Pascal.}
{Copyright 1993 by Wesley R. Elsberry.  Released for noncommercial use.}
{NO WARRANTY.}

INTERFACE

VAR
  xcor, ycor,
  fire1, fire2 : WORD;

PROCEDURE joy;     { basic info for first joystick }
PROCEDURE testjoy; { minimal test routine }

IMPLEMENTATION

{ Significant aid was had from the example given in:
  programm to read joystick : turbo c 2.0 - Jean-Yves Vinet }

CONST
  JOYPORT = $201;
  STROUT  = $FF;
  STRCMP  = $FFFF;

VAR
  inread,
  temp   : BYTE;

PROCEDURE joy;
VAR
  done : BOOLEAN;
BEGIN
  done := FALSE;
  xcor := 0;
  ycor := 0;
  port[JOYPORT] := STROUT;

  while (NOT done) DO
  BEGIN
    if ((port[JOYPORT] AND 1) = 0) then
      done := TRUE;
    INC(xcor);
    if (xcor = STRCMP) then
      done := true;
  END;

  while ((port[JOYPORT] AND 2) <> 0) DO ;

  done := FALSE;
  port[JOYPORT] := STROUT;

  while (NOT done) DO
  BEGIN
    if ((port[JOYPORT] AND 2) = 0) then
      done := TRUE;
    INC(ycor);
    if (ycor = STRCMP) then
      done := TRUE;
  END;

  inread := port[JOYPORT];

  { Button A at $10, B at $20, C at $40, D at $80. }
  if ((inread AND $10) <> $10) then
    fire1 := 1;
  if ((inread AND $20) <> $20) then
    fire2 := 1;
END;

{If you want to grab the second joystick values, the X coordinate
should be gotten from comparing port[JOYPORT] to 4, the Y coordinate
from comparing port[JOYPORT] to 8.}

PROCEDURE testjoy;
BEGIN
  while TRUE do
  BEGIN
    joy;
    WRITELN(xcor : 5, '  ', ycor, '  ', fire1, '  ', fire2);
    xcor  := 0;
    ycor  := 0;
    fire1 := 0;
    fire2 := 0;
  END;
END;

BEGIN
  {No initialization required.}
END.

{
The above was a pretty quick and dirty approach to grabbing values
off the game card.  I'm sure that there are better means of doing it,
but I haven't put in the time to find them.  Interestingly enough,
the Turbo C version mentioned in the comments of the unit above does
not give as large a value for the maximum displacement of a joystick,
which is an indicator that the Turbo Pascal code is faster than its
equivalent Turbo C counterpart.
}

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