Joystick am Atari ST

Obwohl die Maus als Eingabegerät sehr nützlich ist, wird sie bei Spielen eher selten verwendet. Das hat seinen guten Grund. Reaktionsspiele erfordern es oft, eine bestimmte Richtung schnell und sicher anzuvisieren. Um dies mit der Maus zu erreichen, müßte man sie konstant in eine Richtung bewegen. Dem sind nicht nur durch die Abmessungen des Schreibtisches Grenzen gesetzt. Vielmehr läßt dieses Vorgehen auch keinerlei Spieleuphorie aufkommen und ist deshalb nur für sehr gemütliche Naturen geeignet.

Für den Spieleprogrammierer führt also kein Weg am Joystick vorbei. Eine einfache, jedoch nicht besonders "saubere" Art, diesen abzufragen, möchte ich hier für das GFA-Basic vorstellen. Normalerweise läßt sich die Bewegungsrichtung des Sticks vom Tastaturprozessor ermitteln. Leider kann das GFA-Basic an das IKB:-Device nur schreiben, nicht aber Werte einlesen. Ein kleiner Memory-Dump mußte daher die Speicherzellen liefern, in denen die Werte für Stick und Trigger (Feuerknopf) abgelegt werden. Diese sind aus Listing 1 ersichtlich.

Die Bits 3 bis 0 in 3593 enthalten die Bewegungsrichtung (angezeigt durch eine 1).

Bit Richtung
3 rechts
2 links
1 tief
0 hoch

Bit 0 in 3582 enthält den Status des Triggers. Bei Druck auf den Knopf wird es auf 1 gesetzt. Durch verknüpfung mit AND erfolgt nur dann eine Reaktion' wenn mindestens das entsprechende Bit gesetzt ist. So ist also ohne zusätzliche Abfragen auch die Verarbeitung der vier diagonalen Bewegungsrichtungen möglich.

Wie eine solche Routine aussehen kann, zeigt Listing 2. Hier läßt sich ein Punkt mit einem Joystick in Port 2 über den Bildschirm bewegen. Der Trigger bestimmt dabei die Farbe (1 oder 0), mit der gezeichnet wird.

In kommerziellen Programmen sollte man übrigens besser auf diese Abfragen verzichten, da bei neuen TOS- die Speicherstellen nicht garantiert sind. Dies gilt besonders für C- oder Assembler-Programmierer, die den Tastaturprozessor ja beliebig manipulieren können.


'Micro-Demo für  Joystickabfrage
'Port 2! * von Thomas  Tausend
Do
    Print  At(1,1);Peek(3593) 
    Print  At(1,2);Peek(3582) And  1
Loop

'Mini-Demo für  Joystickabfrage *
'Port 2! * von Thomas  Tausend *
Do
    Vsync 
    P%=Peek(3593) 
    Deffill Peek(3582)  And 1
    X%=X%+(P% And 8)- And 4)
    Y%=Y%+(P% And 2)- And 1)
    Pcircle X%,Y%,10 
Loop


Thomas Tausend


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]