home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------- *)
- (* JOY_XT.PAS *)
- (* XT-Joystick-Abfrage und pseudographische Darstellung *)
- (* des Joystick-Ausschlages durch Balken. Mit Sound *)
- (* *)
- (* (c) 1990 Andreas Bartels *)
- (* --------------------------------------------------------*)
- {$A-,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
-
- PROGRAM XT_JoystickTest;
- (* JoyStick-Test Ver. 1.7 (XT) (c) A.Bartels 1990 *)
-
- USES Crt, Dos;
-
- CONST
- MaxZaehler = 500;
- z = 20;
- PortNr = $201;
-
- (* Multi I/O : $200...$20F = 512...527 *)
- (* Game-Card : $201 = 513 *)
-
- VAR
- Ton : BOOLEAN;
- i, JoyStickNummer, k,
- JT1, JT2 : BYTE;
- JoyX, JoyY : INTEGER;
- hour, min,
- second, sec100 : WORD;
- DZeit, AltZeit,
- NeuZeit, Freq : REAL;
- Ch : CHAR;
-
- PROCEDURE CursorOn;
- BEGIN
- INLINE($B4/$01/
- $B9/13/12/ { Cursoranf. 12.Z, Cursorende 13.Z }
- $CD/$10);
- END;
-
- PROCEDURE CursorOff;
- BEGIN
- INLINE($B4/$01/
- $B9/$FF/$FF/ { Cursoranfang und -ende auf }
- $CD/$10); { 255 setzen löscht den Cursor }
- END;
-
- FUNCTION JoyStickStellung( JoystickNr, Richtung : BYTE )
- : INTEGER;
- VAR
- SelectBit,
- SelectJoyStick : BYTE;
- JoyWert, Zaehler : INTEGER;
-
- BEGIN (* JoyStickStellung *)
- (* Auswahl von Joystick-Nr. und X/Y-Richtung *)
- IF Richtung <= 1 THEN BEGIN
- (* X-Richtung *)
- SelectBit := $01;
- IF JoyStickNr > 1 THEN SelectBit := $04;
- END
- ELSE BEGIN
- (* Y-Richtung *)
- SelectBit := $02;
- IF JoyStickNr > 1 THEN SelectBit := $08;
- END;
- (* Initialisierung *)
- SelectJoyStick := $03;
- IF JoyStickNr > 1 THEN SelectJoyStick := $0C;
-
- (* Initialisierung = Timer-Start *)
- REPEAT
- JoyWert := Port[ PortNr ];
- UNTIL (JoyWert And SelectJoyStick) = 0;
- Port[PortNr] := JoyWert;
-
- (* Zähl-Routine zur Messung der Timer-Zeit *)
- Zaehler := 0;
- (* Für echte '0' hier Offset, z.B. -7 eingeben *)
- REPEAT
- JoyWert := Port[ PortNr ];
- Inc(Zaehler);
- UNTIL (JoyWert And SelectBit = 0)
- Or (Zaehler = MaxZaehler);
- JoyStickStellung := Zaehler;
- END; (* JoyStickStellung *)
-
- FUNCTION JoyStickTaste( JoystickNr, TastenNr : BYTE ) :BYTE;
- VAR
- SelectBit, JoyWert : BYTE;
-
- BEGIN (* JoyStickTaste *)
- IF TastenNr <= 1 THEN BEGIN
- SelectBit := $10;
- IF JoyStickNr > 1 THEN SelectBit := $40;
- END
- ELSE BEGIN
- SelectBit := $20;
- IF JoyStickNr > 1 THEN SelectBit := $80;
- END;
- JoyWert := Port[ PortNr ];
- Port[ PortNr ] := JoyWert;
- IF (JoyWert And SelectBit) = 0 THEN
- JoyStickTaste := 1
- ELSE JoyStickTaste := 0;
- END; (* JoyStickTaste *)
-
- BEGIN (* ************** Hauptprogramm *************** *)
- Ton := false;
- Ch := #0;
- ClrScr;
- CursorOff;
- GoToXY( 1, 2 );
- WriteLn('┌──────────────────────────────────────────────┐');
- WriteLn('│ Joystick-Test für XT (c) A.Bartels & toolbox │');
- WriteLn('└──────────────────────────────────────────────┘');
- JoyStickNummer := 1;
- GoToXY( 2, 5);
- Write('Joystick-Nr. ändern mit "1" oder "2". Aktuelle Nr.: 1');
- GoToXY( 2, 10 );
- Write(' 0 100 200 300 '
- + ' 400 500');
- GoToXY( 2, 11 );
- Write(' ┌──────────────┬──────────────┬──────────────┬──'
- + '────────────┬──────────────┐ ');
- Repeat
- GetTime( hour, min, second, sec100 );
- AltZeit := hour*3600 + min*60 + second + sec100/100;
- FOR i := 1 TO z DO BEGIN
- IF Ton THEN Sound(20);
- (* Knüppelstellung *)
- JoyX := JoyStickStellung(JoyStickNummer,1);
- JoyY := JoyStickStellung(JoyStickNummer,2);
- GotoXY(20,15); Write('X-Wert : ',JoyX:5 );
- GotoXY(20,16); Write('Y-Wert : ',JoyY:5 );
- GoToXY( 1,12); Write('X :');
- FOR k := 1 TO ROUND(JoyX/20*3) DO Write('─');
- Write('┘');
- ClrEol;
- GoToXY( 1,13); Write('Y :');
- FOR k := 1 TO ROUND(JoyY/20*3) DO Write('─');
- Write('┘');
- ClrEol;
- (* Tasten gedrückt ? *)
- JT1 := JoyStickTaste(JoyStickNummer,1);
- JT2 := JoyStickTaste(JoyStickNummer,2);
- NoSound;
- GotoXY(20,18); Write('Taste 1 : ',JT1:2 );
- GotoXY(20,19); Write('Taste 2 : ',JT2:2 );
- IF JT1 > 0 THEN BEGIN
- SOUND( 300+(JoyStickNummer-1)*100 );
- Delay( 250 );
- NoSound;
- END;
- IF JT2 > 0 THEN BEGIN
- SOUND( 600+(JoyStickNummer-1)*200 );
- Delay( 250 );
- NoSound;
- END;
- END; (* FOR, i *)
- GetTime( hour, min, second, sec100 );
- NeuZeit := hour*3600 + min*60 + second + sec100/100;
- DZeit := NeuZeit-AltZeit;
- Freq := z/DZeit;
- GoToXY(20, 8); Write(Freq:7:2, ' Samples pro Sekunde.');
- IF KeyPressed THEN
- Ch := ReadKey;
- CASE Ch OF
- '1' : BEGIN
- JoyStickNummer := 1;
- GoToXY(54, 5 ); Write( JoyStickNummer );
- END;
- '2' : BEGIN
- JoyStickNummer := 2;
- GoToXY(54, 5 ); Write( JoyStickNummer );
- END;
- '3' : BEGIN
- Ton := NOT TON;
- Ch := 'x';
- END;
- END;
- UNTIL (Ch = #27) OR (CH = #13);
- CursorOn;
- END. (* JOY_XT *)
- (* --------- ENDE JOY_XT.PAS -----------------------------*)