Joystickabfrage in GFA Basic 2.x

Dieser Bericht ist schon in der Ausgabe 2/89 erschienen, doch es gab ein kleines Problem. Der Wert der Joystickadresse wird nicht zurückgesetzt. Hier nun nochmal das gleiche Programm mit diesem kleinen Zusatz.

In GFA BASIC 2.0 gibt es im Gegensatz zur 3.0 Version keinen Befehl, der der den Joystick abfrägt. Jedoch ist es auch nicht schwer im 2.0er dies zu meistern.

HIDEM
aj$=CHR$(&H14)
bj$=CHR$(&H15)
cj$=CHR$(&H8)
joy%=XBIOS(34)+60
VOID XBIOS(&H19,3,L:VARPTR(aj$))

In aj$ haben wir die Adresse um mit dem zweiten XBIOS Befehl die Maus auszuschalten. Die anderen beiden (bj$ und cj$) helfen uns am Schluß eines Programms die Maus wieder aus den 'ewigen Jagdgründen'zu holen. Mit XBIOS(34)+60 steuern wir die Joystickregister an.

Mit PEEK (joy%+1) erhalten wir einen Wert, der den 9 Richtungen zuge- ordnet ist.

Das sieht dann so aus:        Mit gedrückten Feuerknopf so:

   5    1    9                133    129    137

   4    0    8                132    128    136

   6    2   10                134    130    138

Wir setzen die Abfrage in eine Schleife und erhalten dann immer den Wert der aktuellen Richtung.

z.B. so:

DO
 s=PEEK(joy%+1)
LOOP

Nun müssen wir am Schluß des Programms die Maus wieder einschalten. Das machen wir mit den beiden Variablen bj$ und cj$ und einen XBIOS Befehl.

VOID XBIOS(&H19,3,L:VARPTR(bj$))
VOID XBIOS(&H19,3,L:VARPTR(cj$))

Wollen Sie den Feuerknopf abfragen, müssen Sie nach jeder erfolgreichen Abfrage die Joystickadresse auf Null setzen. Das machen wir mit POKE joy%+1,0 .

z.B.

DO
 s=PEEK(joy%+1)
 IF s=128
  POKE joy%+1,0
  PRINT "Feuer"
 ENDIF
LOOP

Wer es besonders genau nimmt, sollte die Adresse nach jedem Aufruf auf Null setzen.

Diese Joystickroutine funktioniert mit jeder TOS Version, soweit wir wissen auch auf TOS 1.6 (STE).

Ein kleines Demoprogramm ist im Ordner PROGRAMM.E als JOYSTICK.LST gespeichert. Es kann mit dem Merge Befehl eingeladen werden.

HH



Aus: Hitdisk disk 03 / 1990, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite