{ to whomever sent me a message concerning joystick support, I apologize that I cannot send this message to you directly (message Pointers were screwed up on m end, and I lost your message), but here is both my source For a Unit and a sample Program. First I'd like to say that my Unit may be somewhat inComplete. have only a Single joystick port, so reading of two ports is impossible. For this reason, I'd like to ask any and all to make suggestions, and modifications so that I, and all Programmers, may have a Complete Unit. Also, remarks have not been added to the Program, if an explanation is needed, please feel free to ask...I'd be more than happy to give explanations For my work. Anyhows, here i is... } Unit Joystick; Interface Function JoystickExists : Boolean; Function JoystickPosX : Integer; Function JoystickPosY : Integer; Function JoystickButtonA : Boolean; Function JoystickButtonB : Boolean; Implementation Uses Crt, Dos; Const GamePortAddr = $200; MaxCount = 500; Function JoystickStatus (Mask : Byte) : Integer; Var Counter : Integer; Label Read; begin Asm mov cx,MaxCount mov dx,GamePortAddr mov ah,Mask out dx,al read: in al,dx test al,ah loopnz read mov counter,cx end; JoystickStatus := MaxCount - Counter; Delay (2); end; Function JoystickPosX : Integer; begin JoystickPosX := JoystickStatus (1); end; Function JoystickPosY : Integer; begin JoystickPosY := JoystickStatus (2); end; Function JoystickButtonA : Boolean; begin JoystickButtonA := (Port [GamePortAddr] and 16) = 0; end; Function JoystickButtonB : Boolean; begin JoystickButtonB := (Port [GamePortAddr] and 32) = 0; end; Function JoystickExists : Boolean; Var Regs : Registers; begin JoystickExists := not ((JoystickPosX = 0) and (JoystickPosY = 0)); end; end. Program JoyTest; Uses Crt, Dos, AniVGA, Joystick; Var XMin, XMax, YMin, YMax, XRange, YRange, X, Y, PosX, PosY, Bullet1X, Bullet1Y, Bullet2X, Bullet2Y : Integer; Shooting1, Shooting2 : Boolean; ShootNext : Boolean; Procedure CalibrateJoystick (Var XMin, XMax, YMin, YMax : Integer); begin Write ('Press joystick to upper left corner and press button one...'); Repeat Until JoystickButtonA; XMin := JoystickPosX; YMin := JoystickPosY; Writeln ('OK.'); Repeat Until not JoystickButtonA; Write ('Press joystick to lower right corner and press button two...'); Repeat Until JoystickButtonB; XMax := JoystickPosX; YMax := JoystickPosY; Writeln ('OK.'); Repeat Until not JoystickButtonB; end; Procedure AnimateShip; begin X := JoystickPosX - XMin; if (X <= XRange div 3) then Dec (PosX, 3) else if (X > XRange * 2 div 3) then Inc (PosX, 3); Y := JoystickPosY - YMin; if (Y <= YRange div 3) then Dec (PosY, 3) else if (Y > YRange * 2 div 3) then Inc (PosY, 3); SpriteX [0] := PosX; SpriteY [0] := PosY; end; Procedure AnimateBullets; begin if Shooting1 then if (Bullet1Y < 0) then Shooting1 := False else Dec (Bullet1Y, 8) else begin Bullet1X := PosX + 3; Bullet1Y := PosY + 14; end; if Shooting2 then if (Bullet2Y < 0) then Shooting2 := False else Dec (Bullet2Y, 8) else begin Bullet2X := PosX + 30; Bullet2Y := PosY + 14; end; SpriteX [1] := Bullet1X; SpriteY [1] := Bullet1Y; SpriteX [2] := Bullet2X; SpriteY [2] := Bullet2Y; end; begin if JoystickExists and (LoadSprite ('SHIP1.COD', 1) = 1) and (LoadSprite ('BULLET.COD', 2) = 1) then begin ClrScr; CalibrateJoystick (XMin, XMax, YMin, YMax); ClrScr; InitGraph; SpriteN [0] := 1; SpriteN [1] := 2; SpriteN [2] := 2; PosX := 160; PosY := 160; Shooting1 := False; XRange := XMax - XMin; YRange := YMax - YMin; ShootNext := Boolean (0); While not (JoystickButtonA and JoystickButtonB) do begin if JoystickButtonA and not JoystickButtonB then if not Shooting1 and ShootNext then begin Bullet1X := PosX + 3; Bullet1Y := PosY + 14; Shooting1 := True; ShootNext := False; end else if not Shooting2 and not ShootNext then begin Bullet2X := PosX + 30; Bullet2Y := PosY + 14; Shooting2 := True; ShootNext := True; end; While JoystickButtonA do begin AnimateShip; AnimateBullets; Animate; end; AnimateShip; AnimateBullets; Animate; end; CloseRoutines; end else Writeln ('Game card not installed.'); end. { I apologize For giving you an example that Uses another Unit. if need be, this Program can be easily modified to provide a successful example. Hope this helps, and I hope my Programming is not toO bad. }