home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 01 / gameport / joy_xt.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-10-15  |  5.4 KB  |  186 lines

  1. (* ------------------------------------------------------- *)
  2. (*                       JOY_XT.PAS                        *)
  3. (*   XT-Joystick-Abfrage und pseudographische Darstellung  *)
  4. (*     des Joystick-Ausschlages durch Balken. Mit Sound    *)
  5. (*                                                         *)
  6. (*                (c)  1990  Andreas Bartels               *)
  7. (* --------------------------------------------------------*)
  8. {$A-,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
  9.  
  10. PROGRAM XT_JoystickTest;
  11. (* JoyStick-Test Ver. 1.7 (XT)   (c) A.Bartels 1990 *)
  12.  
  13. USES Crt, Dos;
  14.  
  15. CONST
  16.   MaxZaehler  = 500;
  17.   z           = 20;
  18.   PortNr      = $201;
  19.  
  20.   (* Multi I/O : $200...$20F = 512...527 *)
  21.   (* Game-Card : $201        = 513       *)
  22.  
  23. VAR
  24.   Ton             : BOOLEAN;
  25.   i, JoyStickNummer, k,
  26.   JT1, JT2        : BYTE;
  27.   JoyX, JoyY      : INTEGER;
  28.   hour, min,
  29.   second, sec100  : WORD;
  30.   DZeit, AltZeit,
  31.   NeuZeit, Freq   : REAL;
  32.   Ch              : CHAR;
  33.  
  34. PROCEDURE CursorOn;
  35. BEGIN
  36.   INLINE($B4/$01/
  37.          $B9/13/12/   { Cursoranf. 12.Z, Cursorende 13.Z }
  38.          $CD/$10);
  39. END;
  40.  
  41. PROCEDURE CursorOff;
  42. BEGIN
  43.   INLINE($B4/$01/
  44.          $B9/$FF/$FF/       { Cursoranfang und -ende auf }
  45.          $CD/$10);        { 255 setzen löscht den Cursor }
  46. END;
  47.  
  48. FUNCTION JoyStickStellung( JoystickNr, Richtung : BYTE )
  49.                            : INTEGER;
  50. VAR
  51.   SelectBit,
  52.   SelectJoyStick   : BYTE;
  53.   JoyWert, Zaehler : INTEGER;
  54.  
  55. BEGIN  (* JoyStickStellung *)
  56.   (* Auswahl von Joystick-Nr. und X/Y-Richtung *)
  57.   IF Richtung <= 1 THEN BEGIN
  58.   (* X-Richtung *)
  59.     SelectBit := $01;
  60.     IF JoyStickNr > 1 THEN SelectBit := $04;
  61.   END
  62.   ELSE BEGIN
  63.   (* Y-Richtung *)
  64.     SelectBit := $02;
  65.     IF JoyStickNr > 1 THEN SelectBit := $08;
  66.   END;
  67.   (* Initialisierung *)
  68.   SelectJoyStick := $03;
  69.   IF JoyStickNr > 1 THEN SelectJoyStick := $0C;
  70.  
  71.   (* Initialisierung = Timer-Start *)
  72.   REPEAT
  73.     JoyWert := Port[ PortNr ];
  74.   UNTIL (JoyWert And SelectJoyStick) = 0;
  75.   Port[PortNr] := JoyWert;
  76.  
  77.   (* Zähl-Routine zur Messung der Timer-Zeit *)
  78.   Zaehler := 0;
  79.   (* Für echte '0' hier Offset, z.B. -7 eingeben *)
  80.   REPEAT
  81.     JoyWert := Port[ PortNr ];
  82.     Inc(Zaehler);
  83.   UNTIL (JoyWert And SelectBit = 0)
  84.      Or (Zaehler = MaxZaehler);
  85.   JoyStickStellung := Zaehler;
  86. END; (* JoyStickStellung *)
  87.  
  88. FUNCTION JoyStickTaste( JoystickNr, TastenNr : BYTE ) :BYTE;
  89. VAR
  90.   SelectBit, JoyWert : BYTE;
  91.  
  92. BEGIN  (* JoyStickTaste *)
  93.   IF TastenNr <= 1 THEN BEGIN
  94.     SelectBit := $10;
  95.     IF JoyStickNr > 1 THEN SelectBit := $40;
  96.   END
  97.   ELSE BEGIN
  98.     SelectBit := $20;
  99.     IF JoyStickNr > 1 THEN SelectBit := $80;
  100.   END;
  101.   JoyWert        := Port[ PortNr ];
  102.   Port[ PortNr ] := JoyWert;
  103.   IF (JoyWert And SelectBit) = 0 THEN
  104.     JoyStickTaste := 1
  105.   ELSE JoyStickTaste := 0;
  106. END; (* JoyStickTaste *)
  107.  
  108. BEGIN   (* ************** Hauptprogramm *************** *)
  109.   Ton := false;
  110.   Ch := #0;
  111.   ClrScr;
  112.   CursorOff;
  113.   GoToXY( 1, 2 );
  114.   WriteLn('┌──────────────────────────────────────────────┐');
  115.   WriteLn('│ Joystick-Test für XT (c) A.Bartels & toolbox │');
  116.   WriteLn('└──────────────────────────────────────────────┘');
  117.   JoyStickNummer := 1;
  118.   GoToXY( 2, 5);
  119.   Write('Joystick-Nr. ändern mit "1" oder "2". Aktuelle Nr.: 1');
  120.   GoToXY( 2, 10 );
  121.   Write('  0             100            200            300 '
  122.         + '           400            500');
  123.   GoToXY( 2, 11 );
  124.   Write('  ┌──────────────┬──────────────┬──────────────┬──'
  125.         + '────────────┬──────────────┐ ');
  126.   Repeat
  127.     GetTime( hour, min, second, sec100 );
  128.     AltZeit := hour*3600 + min*60 + second + sec100/100;
  129.     FOR i := 1 TO z DO BEGIN
  130.       IF Ton THEN Sound(20);
  131.       (* Knüppelstellung *)
  132.       JoyX := JoyStickStellung(JoyStickNummer,1);
  133.       JoyY := JoyStickStellung(JoyStickNummer,2);
  134.       GotoXY(20,15);   Write('X-Wert  : ',JoyX:5 );
  135.       GotoXY(20,16);   Write('Y-Wert  : ',JoyY:5 );
  136.       GoToXY( 1,12);   Write('X :');
  137.       FOR k := 1 TO ROUND(JoyX/20*3) DO  Write('─');
  138.       Write('┘');
  139.       ClrEol;
  140.       GoToXY( 1,13);   Write('Y :');
  141.       FOR k := 1 TO ROUND(JoyY/20*3) DO  Write('─');
  142.       Write('┘');
  143.       ClrEol;
  144.       (* Tasten gedrückt ? *)
  145.       JT1  := JoyStickTaste(JoyStickNummer,1);
  146.       JT2  := JoyStickTaste(JoyStickNummer,2);
  147.       NoSound;
  148.       GotoXY(20,18);   Write('Taste 1 :  ',JT1:2 );
  149.       GotoXY(20,19);   Write('Taste 2 :  ',JT2:2 );
  150.       IF JT1 > 0 THEN BEGIN
  151.         SOUND( 300+(JoyStickNummer-1)*100 );
  152.         Delay( 250 );
  153.         NoSound;
  154.       END;
  155.       IF JT2 > 0 THEN BEGIN
  156.         SOUND( 600+(JoyStickNummer-1)*200 );
  157.         Delay( 250 );
  158.         NoSound;
  159.       END;
  160.     END; (* FOR, i *)
  161.     GetTime( hour, min, second, sec100 );
  162.     NeuZeit := hour*3600 + min*60 + second + sec100/100;
  163.     DZeit := NeuZeit-AltZeit;
  164.     Freq := z/DZeit;
  165.     GoToXY(20, 8); Write(Freq:7:2, ' Samples pro Sekunde.');
  166.     IF KeyPressed THEN
  167.       Ch := ReadKey;
  168.     CASE Ch OF
  169.       '1' : BEGIN
  170.               JoyStickNummer := 1;
  171.               GoToXY(54, 5 );  Write( JoyStickNummer );
  172.             END;
  173.       '2' : BEGIN
  174.               JoyStickNummer := 2;
  175.               GoToXY(54, 5 );  Write( JoyStickNummer );
  176.             END;
  177.       '3' : BEGIN
  178.               Ton := NOT TON;
  179.               Ch := 'x';
  180.             END;
  181.     END;
  182.   UNTIL (Ch = #27) OR (CH = #13);
  183.   CursorOn;
  184. END.  (* JOY_XT *)
  185. (* --------- ENDE JOY_XT.PAS -----------------------------*)
  186.