[Back to JOYSTICK SWAG index] [Back to Main SWAG index] [Original]
Unit Joystick;
Interface
Uses Crt;
{ Joystick Interface For Turbo Pascal V. 4.0 and above
Public Domain, November 1989 by
JonSoft Technologies Inc.
(C) 1989 JonSoft Technologies Inc. }
Const
centX : Byte=80;
centY : Byte=40;
Joyst : Boolean=True;
Procedure FastInitJS;
Procedure BetterInitJS( range : Byte );
Function joy_X : Byte;
Function joy_Y : Byte;
Function button_1 : Byte;
Function button_2 : Byte;
Function Horiz : shortint;
Function Vert : shortint;
Implementation
Const
rangexm : Byte=25;
rangeym : Byte=20;
rangexp : Byte=25;
rangeyp : Byte=25;
Function joy_X : Byte;
Var
x : Word;
begin
x := 0;
Port[$201] := $ff;
While Port[$201] and $1=1 do Inc(x);
joy_X := x;
end;
Function joy_Y : Byte;
Var
y : Word;
begin
y := 0;
Port[$201] := $0;
While Port[$201] and $2=2 do Inc(y);
joy_Y := y;
end;
Procedure FastInitJs;
begin
centX := joy_X;
centY := joy_Y;
end;
Function button_1 : Byte;
begin
button_1 := ((Port[$201] and $10) Xor $10) ShR 4;
end;
Function button_2 : Byte;
begin
button_2 := ((Port[$201] and $20) Xor $20) ShR 5;
end;
Procedure BetterInitJs(range : Byte);
Var
(* Ch : Char; *)
uprjoyX, uprjoyY, centrjoyX, centrjoyY, lowrjoyX, lowrjoyY : Byte;
begin
WriteLN('Are you using a joystick? (Button = yes, RETURN = no)');
Repeat
if button_1+button_2 > 0 then Joyst := True;
if KeyPressed then Joyst := False;
Until (button_1+button_2 > 0) or KeyPressed;
if Joyst = True then begin
Repeat Until button_1+button_2 = 0;
WriteLN('Move joystick to UPPER RIGHT corner and press a button.');
Repeat Until button_1+button_2 > 0;
uprjoyX := joy_X;
uprjoyY := joy_Y;
Repeat Until button_1+button_2 = 0;
WriteLN('Move joystick to CENTER and press a button.');
Repeat Until button_1+button_2 > 0;
centrjoyX := joy_X;
centrjoyY := joy_Y;
centX := centrjoyX;
centY := centrjoyY;
Repeat Until button_1+button_2 = 0;
WriteLN('Move joystick to LOWER LEFT CorNER and press a button.');
Repeat Until button_1+button_2 > 0;
lowrjoyX := joy_X;
lowrjoyY := joy_Y;
rangexm := (centrjoyX-uprjoyX) div range;
rangexp := (lowrjoyX-centrjoyX) div range;
rangeym := (centrjoyY-uprjoyY) div range;
rangeyp := (lowrjoyY-centrjoyY) div range;
end;
end;
Function Horiz : shortint;
begin
if joy_X<centX-rangexm then Horiz := -1
else if joy_X > centX+rangexp then Horiz := 1
else Horiz := 0;
end;
Function Vert : shortint;
begin
if joy_Y<centY-rangeym then Vert := -1
else if joy_Y > centY+rangeyp then Vert := 1
else Vert := 0;
end;
end.
[Back to JOYSTICK SWAG index] [Back to Main SWAG index] [Original]