Jaguar-Joypad am Falcon030 und STE

Wie frage ich den Jaguar-Controller am Falcon030 / STE ab? Dass man den Jaguar-Controller in irgend einer Form auch an den Falcon oder STE anschließen kann ist naheliegend. Wie die Abfrage aber konkret geschehen muss, wird hier erläutert.

Jeder, der einen Jaguar und einen Falcon030 bzw. STE besitzt wird festgestellt haben, dass die analogen Joyports vollkommen identisch sind. Wie man den Computern beibringt, den Controller auch auszuwerten, soll dieser Artikel zeigen.

Nun, zunächst einmal ist man ja versucht, einfach diverse Spiele, die den erweiterten Joyport nutzten, auszuprobieren. Doch leider muss man schnell feststellen, dass zwar irgendwelche Signale vom Computer empfangen werden, so dass der Protagonist des entsprechenden Spielchens entweder an Orientierungslosigkeit leidet und rennt oder ziellos umherrennt und nicht dorthin, wohin man drückt, oder er springt nicht, weil der gedrückte Feuerknopf nicht als solcher erkannt wird. Also Fehlanzeige?

Überlegt und nachgezählt... Der Joyport hat ja nur 15 Pins, obwohl der Controller 21 Schaltelemente hat. Nun, es muss also einen Trick geben.

Da war doch noch etwas wie - Klar, man kann die ext. Joyports als Ein- und Ausgänge benutzen. Damit kann man dann so etwas wie eine Matrix implementieren, bei der man einfach dem Controller sendet, welchen Status der Tasten man gerne hätte - und zurück bekommt man einen entsprechenden Code.

Genauso hat sich Atari das auch gedacht. Das Ganze ist wirklich ähnlich wie die Sound-/DMA-Matrix geschaltet. Matrizen ziehen sich also durch das gesamte Innenleben des Falcon. Kommen wir zum Wesentlichen.

$FFFF9200 [R/W] word ext. Joystick Fire Buttons (Bits 0-3) $FFFF9202 [R/W] word ext. Joystick Directions (Bits 0-15) Diese wurden somit umdefiniert. $FFFF9200 wird zwar weiterhin für die Feuerknöpfe verwendet, jedoch kommen die Buttons "Option" und "Pause" hinzu. Also muss müssen hier fünf Buttons mit 2 Bits codiert sein. Auch die restlichen 16 Schalter im Jaguar Controller sind mit jeweils nur 4 Bit im Register $FFFF9202 geschaltet. Der grobe Ablauf des Abfragens der JoyPorts bzw. des Controllers ist jetzt also in etwa wie folgt:

1 Abzufragende Leitungen in Register $FFFF9202 schreiben 2 Richtungs- und Tastatur-Status in $FFFF9202 (wie bei 1.) auslesen 3 Button-Status $FFFF9200 auslesen Dabei ist allerdings zu beachten, dass die entsprechend angeführten Register low-aktiv sind, d.h. ein gelöschtes Bit bedeutet "gedrückt" bzw. "ist abzufragen". Kommen wir also zu der mächtigen Matrix, um die sich alles dreht (s. Tabelle)

Um z.B. den Status von Feuerknopf B aus JoyPort B zu ermitteln, sendet man auf $FFFF9202 den Wert NOT(2^7)=$FF7F (d.h. man schreibt den Wert in das entsprechende Register), liest dann den Wert von $FFFF9200 aus, und überprüft, ob das Bit 5 mit der Wertigkeit 2^5 gelöscht ist. Wenn dies der Fall ist, ist der Feuerknopf gedrückt.

Analog gilt für ein anderes Beispiel folgendes (diejenigen, die es begriffen haben, können diesen Absatz überspringen):

Angenommen, wir wollen wissen, ob an Port A das Pad noch oben gedrückt ist. Senden wir also auf $FFFF9200 den Wert NOT(2^0)=$FFFE, dann fragen wir das Register $FFFF9200 auf Gelöschtheit des Bits 8 ab. Ist es gelöscht, so wurde nach oben gedrückt. Voilá.

Dass die gesamten Zugriffe auf die Hardware-Register im "Supervisormodus" zu erfolgen haben, sollte wohl klar sein.

Man sieht, es sind 4 Abfragen für das gesamte JoyPad notwendig, aber das ist es doch wert, oder?

Noch eine Bitte an alle, die diese großartigen Pads jetzt unterstützen wollen: Bitte macht Eure Sache konfigurierbar, so dass Video-Erweiterungsbesitzer (wie ich) auswählen können, in welchen Port sie den Joystick stecken wollen, zumal es auch andere Erweiterungen gibt, die bestimmte Paddleports brauchen (Screenblaster).

Der abgedruckte Sourcecode soll die ganze Vorgehensweise noch etwas durchleuchten. Er wurde mit Pure C erstellt, und es wurde darauf geachtet, dass keine speziellen Befehle, die eine Portierung in andere Sprachen erschweren würden, verwendet worden sind.

Listings


Carsten Tolkmit
Aus: Atari Inside 01 / 1994, Seite 29

Links

Copyright-Bestimmungen: siehe Über diese Seite