STarkes noch STEarker

So treiben Programmierer den STE zur vollen Leistung.

Der neue Computer von Atari hat es in sich. Programmierer und Spielefans, die bisher neidisch auf die enormen Sound- und Grafikfähigkeiten des Amiga schielten, atmen auf. Der STE macht Träume war. Hier erfahren Sie alles über die Programmierung und Bedienung des neuen Computers. Am Ende finden Sie eine Auflistung der wichtigsten neuen Hardware-Register und ihre Bedeutung.

Grafik auf dem Atari STE

Wie auch der Amiga verfügt der neue STE über 4096 Farbtöne. Diese setzen sich jeweils aus einem Rot-, Grün- und Blauanteil zusammen. Auf dem ST besteht jeder Anteil aus 3 Bit und somit acht Kombinationen. Daraus ergibt sich eine Auswahl aus (8 x 8 x 8 =) 512 Farbtönen. Einen 4. Bit hat Atari für Erweiterungen - wie sie jetzt im STE eingetreten sind - vorgesehen. Im STE erweiterte Atari die Farbanteile auf jeweils 4 Bit, so daß (16 x 16 x 16 =) 4096 Farben verfügbar sind. Um allerdings zum ST kompatibel zu bleiben, ist in jedem Farbanteil das niederwertigste Bit vor dem höchstwertigen, so daß die Bitwertigkeit 0321 ist. Dies gewährleistet, daß ein mit dem ST erzeugtes Alarmrot auch auf dem ST alarmrot erscheint. Die Anzahl der Farbregister und der Bitplanes ist gegenüber dem ST gleich geblieben, so daß auch der STE ohne besondere Tricks nur 16 Farben gleichzeitig darstellen kann.

Für die Bildschirmprogrammierung hat sich Atari etwas Besonderes einfallen lassen: Neue Hardware-Register schaffen die Voraussetzung für hardware-unterstütztes Bildschirm-Scrolling - und zwar vertikal und horizontal. Dabei ist das zentrale neue Register das Low-Byte (VBASELO $FF820C) der Bildschirmadresse. Dieses erlaubt dem Programmierer, den Bildschirm an eine beliebige Adresse zu setzen und ermöglicht somit vertikales Bildschirm-Scrolling. Horizontal zu scrollen ist dabei allerdings nur in Byte-Schritten realisierbar. Pixelweises horizontales Scrollen gelingt erst mit dem HSCROLL-Register ($FF8264). Mit diesem Register bestimmen Sie, ab welchem Bit der Bildschirmadresse (VBASE) der Bildschirm liegt. Der Amiga verfügt über sogenannte »Playfields«. Playfields sind Bitplanes, die größer als der Bildschirm sind. Sie geben dabei an, welcher Bereich des Playfields sichtbar ist. Dieses Feature erleichtert beispielsweise das Scrollen in einer Landschaft. Denn Sie brauchen nicht wirklich zu scrollen, sondern nur die Position des sichtbaren Ausschnitts zu verändern. Auf dem ST ist so etwas undurchführbar. Doch ein weiteres neues Hardware-Register im STE erlaubt Ihnen, solche virtuellen Bildschirme zu verwalten: Das Register LINEWID ($FF820E) enthält die Anzahl der Worte, die der STE am Ende jeder Bildschirmzeile zum Bildschirmadreßzähler hinzuzählen soll.

Virtuelle Bildschirme

Schreiben Sie beispielsweise im Monochrom-Modus den Wert 20 in das Register, so erzeugen Sie einen virtuellen Bildschirm, der um (20 x 16 =) 320 Punkte breiter ist. Statt der üblichen 640 Punkte stehen Ihnen somit 960 Punkte pro Zeile zur Verfügung. Davon sind allerdings wie bisher nur 640 sichtbar. Ab welchen der 960 Punkte die 640 Punkte der Bildschirmdarstellung beginnen, bestimmen Sie durch das Setzen der Bildschirmbasis und des HSCROLL-Registers. Um etwa den Bereich zwischen dem 20. und dem 670. Punkt sichtbar zu machen, setzen Sie die Bildschirmbasis um ein Wort (entspricht 16 Punkten) nach vorne und schreiben den Wert 4 (entspricht 4 Punkten) in das HSCROLL-Register.

Um den Bildschirm in verschiedene unabhängige Bereiche aufzuteilen, gestattet der STE Ihnen das Lesen und Schreiben des Bildschirmadreßzählers. Um etwa ab Zeile 20 auf einen neuen Bildschirm umzuschalten, warten Sie etwa mittels des Timer-B Event-Interrupts bis der Zähler die Adresse der 20. Zeile erreicht hat. Daraufhin ersetzen Sie diese einfach durch die neue Bildschirmadresse.

Joysticks, Paddles und Light-Guns

Durch die grafischen Eigenschaften des STE lassen sich tolle Spiele programmieren. Noch toller werden viele Spiele aber erst, wenn mehrere Personen daran teilnehmen können. Bei der Automatenversion des Spiels »Gauntlet« etwa schlagen sich bis zu vier Kämpfer gleichzeitig durchs Labyrinth. Doch wer nur über zwei Joystickports verfügt, kann nur zu zweit spielen. Dieses Problem erkannte Atari und hat den STE mit zwei weiteren Joystickports versehen. In diese können Sie neben Joysticks auch Paddles, eine Light-Gun oder einen Light-Pen anschließen. Die softwaremäßige Abfrage der Ports nehmen Sie nicht über den Tastaturprozessor vor, sondern über acht neue Hardware-Register. Diese Register enthalten dabei zusätzlich die Zustände der alten beiden Joysticksports (Joy1 und Joy3), so daß Sie deren Meldungen nicht mehr umständlich über den Tastaturprozessor abfragen müssen. Den Zustand der Feuerknöpfe der vier Joysticks finden Sie in den unteren 4 Bit des FIRE-Registers ($FF9200). Die Richtungen, in die die Joysticks bewegt werden, erfahren Sie im JOY-Register ($FF9202). Jeder Joystickport belegt 4 Bit: Bit 1 steht für die Richtung rechts, Bit 2 für links, Bit 3 für unten und Bit 4 für oben. Schließen Sie statt den Joysticks Paddles an die Ports 0 und 2, so finden Sie in den Registern XPADO ($FF9210), YPADO ($FF9212), XPAD1 ($FF9214) und YPAD1 ($FF9216) die X- und Y-Positionen. Die Paddleknöpfe fragen Sie über die Bits 1 und 2 des JOY-Registers ab.

Der neue Joystickport 0 ist außerdem für den Anschluß einer Light-Gun beziehungsweise eines Light-Pen vorgesehen. In den Registern LIGHTX ($FF9220) und LIGHTY ($FF9222) erfahren Sie dessen aktuelle X- und Y-Position. Die X-Position ist dabei auf 4 Pixel genau und immer auf eine Auflösung von 320 x 200 bezogen. Um die X-Koordinate für die mittlere Auflösung (640 x 200) zu erhalten, müssen Sie den Wert verdoppeln und in der monochromen Darstellung (640 x 400) vervierfachen.

Neue Soundfähigkeiten

Gute Spiele brauchen guten Sound. Doch der Soundchip des ST eignet sich hierfür nicht besonders, so daß viele Programmierer gesampleten Sound verwenden. Da aber das Programm die Samples ausgeben muß, ist diese Methode sehr zeitaufwendig. Zudem ist die Qualität der 6 Bit Auflösung eher minderwertig. Um den STE zu einer perfekten Spielemaschine zu machen, hat ihn Atari mit neuen Soundfähigkeiten ausgestattet: Digitalisierte Sounds spielen Sie jetzt per DMA ab, also ohne Verwendung teurer Prozessorzeit. Dabei geben Sie einfach die Start- und Endadresse des zu spielenden Sounds an, der im Atari »Frame« genannt wird. Wollen Sie etwa den Frame von Adresse $20000 bis $40000 abspielen, schreiben Sie den Wert $20000 in das FRMBASE-Register ($FF8902-8) und den Wert $40000 in das FRMEND-Register ($FF90E-14). Außerdem bestimmen Sie durch das SMODCTRL-Register ($FF8920) mit welcher Samplefrequenz der Frame ausgegeben werden soll und ob in Stereo oder in Mono. In Mono haben Sie die Wahl zwischen den Abspielfrequenzen 6,25 kHz, 12,5 kHz, 25 kHz und 50 kHz, in Stereo halbieren sich die Frequenzen. Der Sound ertönt, sobald Sie das SDMACTRL-Register ($FF8900) setzen. Hierbei stehen Ihnen drei Werte zur Auswahl: Mit dem Wert 1 spielen Sie den Frame ein Mal ab und mit 3 wiederholen Sie den Frame solange, bis Sie den Sound mit dem Wert 0 abschalten. Während des Abspielens ermitteln Sie durch das FRMADR-Register ($FF8908) die Adresse des aktuellen Samples.

Ein Sample hat eine Auflösung von 8 Bit. Die Werte erstrecken sich vom vollen negativen Ausschlag mit 128 bis hin zum vollen positiven Ausschlag mit + 127. In Mono hat jedes Sample 1 Byte, in Stereo ergeben jeweils 2 Byte ein Sample für den linken und ein Sample für den rechten Kanal.

Um komplexere Sounds abzuspielen, eignet sich vor allem der Frame-Wiederholmodus (Wert 3 ins SDMACTRL-Register). Denn dann erhält der Timer-A des MFP im Event-Count-Modus jeweils ein Signal, wenn das Ende des Frames erreicht ist. Setzen Sie beispielsweise das Datenregister des Timer-A im Event-Count-Modus auf 5, so wird der Frame fünf Mal wiederholt und das Datenregister fünf Mal um 1 erniedrigt. Beim 6. Mal wechselt das Datenregister auf 0 und erzeugt dadurch einen Timer-A-Interrupt. Im Interrupt können Sie etwa eine neue Frame-Adresse setzen. Besonders interessant ist dabei die Tatsache, daß das FRMBASE-Register gepuffert ist. Das bedeutet, daß Sie dieses Register schon beschreiben können, noch während der aktuelle Frame gespielt wird. Erst wenn der Frame beendet ist, lädt der Soundchip die Startadresse des Frames aus dem FRMBASE-Register nach. Diese Eigenschaft erlaubt Ihnen die Anwendung der Double-Buffering-Technik: Während der STE ein Frame spielt, setzen Sie FRMBASE auf die Adresse des zweiten Frame und bauen diesen auf. Wenn Frame 1 beendet ist, und Frame 2 gespielt ab, setzen Sie FRMBASE auf Frame 1 und bauen diesen auf usw.

Das Microwire-Interface

Bevor der STE den digitalen Sound über die eingebauten Stereo-Cinch-Buchsen und den Monitorlautsprecher ausgibt, läßt er ihn noch von dem integrierten LMC1992-Chip bearbeiten. Dieser Chip ist für die Lautstärke und den Klang des Sounds verantwortlich. Natürlich ist er auch programmierbar - und zwar über das Microwire-Interface. Das Interface verfügt über zwei Register, das MWMASK-Register ($FF8924) und das MWDATA-Register ($FF8922). Da an das Microwire-Interface neben dem LMC1992 auch noch weitere Geräte anschließbar sind, hat jedes Gerät seine ID. Der LMC1992 hat die Nummer %10. Weil die Datenbreite für die Geräte nicht konstant ist, setzen Sie im MWMASK-Register diejenigen Bits, die das Interface aus dem MWDATA-Register an das Gerät senden soll. Der LMC1992 verlangt neben der 2 Bit umfassenden ID noch ein 3 Bit breites Kommandofeld und 6 Bit Daten. Damit sind also 11 Bit belegt. Um den LMC1992 etwas mitzuteilen, schreiben Sie demnach %11111111111 (=$7ff) in das MWMASK-Register. In das MWDATA-Register schreiben Sie das 11 Bit breite Kommando. Ehe Zusammenfassung aller Kommandos finden Sie in der Speicherbelegungsübersicht am Textende. Mit den Kommandos setzen Sie die allgemeine Lautstärke, die Lautstärke des linken und rechten Kanals, das Treble und den Baß in 2 dB-Schritten, und bestimmen, ob der Sound mit dem Sound des alten Yamaha-Soundchips vermischt werden soll.

Die spezielle TOS-Version 1.6

Natürlich erfordern so viele neue Änderungen in der Hardware auch ein neues, dementsprechend angepaßtes Betriebssystem. Statt das für die alten STs vor kurzem offiziell freigegebene TOS 1.4 an den STE anzupassen, beschloß Atari, das neue Betriebssystem TOS 030 des Atari TT auf den STE zu portieren. Denn der TT verfügt schließlich über nahezu die gleiche Hardware. Wie auch das TOS 030 auf dem TT liegt das TOS 1.6 des STE nicht mehr an der gewohnten ROM-Adresse $fc0000. Statt dessen finden Sie es ab $e00000. Durch viele kleine Eingriffe und Erweiterungen belegt das ROM statt 192 nun 256 KByte; etwa 30 KByte sind allerdings noch frei für spätere Erweiterungen.

Äußerlich gleicht TOS 1.6 dem TOS 1.4: In der Desktop-Meldung erscheint ein animiertes Atari-Symbol, die Datei-Auswahl-Box wurde erweitert und die neuen Desktop-Funktionen sind vorhanden. Doch viele der System-Routinen wurden verändert. So etwa die XBIOS-Funktionen »Setpalette« und »Setcolor«. Diese gestatten Ihnen nun, die Palettenwerte mit 4 Bit je Farbanteil anzugeben, um die erweiterte Farbpalette des STE auszunutzen.

Des weiteren entfielen sämtliche Trap-F-Aufrufe, die das TOS bisher nutzte, um das AES aufzurufen. Auch die systeminternen Variablen im unteren RAM-Bereich, liegen an anderen Adressen. Mit all diesen neuen Features ist der STE ein El Dorado für Programmierer - er verfügt über alle Eigenschaften des ST, ist leicht erweiterbar, hat enorme Grafik- und Soundfähigkeiten und ist leicht zu programmieren. Was will man mehr?

(ba)

In dieser Übersicht haben wir alle neuen Register zusammengefaßt. Links neben der Belegung finden Sie deren Speicheradresse und die Zugriffsinformation (R/- für nur lesbar, R/W für les- und schreibbar), rechts deren Bezeichnung.

FF8204R/W VCOUNTHI
FF8206R/W VCOUNTMID
FF8208 R/W VCOUNTLO

Der Video-Adress-Counter ist jetzt les- und schreibbar. Ein Schreibzugriff wirkt sich sofort aus. Deswegen sollten Sie damit vorsichtig umgehen. Es empfiehlt sich, diese Register während dem VBL-Interrupt zu verändern.

FF820C R/W VBASELO

Dieses Register enthält das Low-Byte der Bildschirmbasis. Es erlaubt ihnen, den Bildschirm auf eine Wortgrenze (bisher 256-Byte-Grenze) zu setzen und ermöglicht somit vertikales Scrolling.

FF820E R/W LINEWID

Enthält den Offset zur nächsten Zeile. Der Wert gibt die Anzahl der Worte an, die am Ende der Bildschirmzeile dazugerechnet werden, um zur neuen Zeile zu kommen. Wenn das Register gelöscht ist, arbeitet der STE wie der ST. Das Register wird beim RESET automatisch gelöscht.

Rot Grün Blau
FF8240 R/W 0 3 2 1 0 3 210 321 PALETTE0
:: : : : :
FF825E R/W 0 3 2 1 0 3 2103 21 PALETTE15

In der Farbpalette wurde jedem farbton ein weiteres Bit zugefügt. Beachten Sie, daß das niederwertigste Bit vor dem höchstwertigen kommt. Damit ist eine vollkommene ST-kompatibilität gewährleistet.

FF8264 R/W HSCROLL

Dieses Register ermöglicht horizontales, bit-weises Scrollen. Der Wert besagt, um wieviele Bits der Bildschirm angezeigt werden soll.

Feuerknöpfe
FF9200 R/- 3 1 2 0 FIRE0-3

Joy 3 Joy 1 Joy 2 Joy 0
FF9202 R/W JOY0-3

Durch die FIRE- und JOY-Register fragen sie die neuen Joystickports ab. Joy 0 und Joy 2 können auch beschrieben werden.

FF9210 R/- XPAD0
FF9212 R/- YPAD0
FF9214 R/- XPAD1
FF9216 R/- YPAD1

Ein Paddle können Sie in den Joystickport 0 (Paddle 0) stecken. Ein zweites Paddle paßt in den Joystickport 1 (Paddle 1). Die aktuelle Position der Paddles wird in diesen Registern abgelegt. Die Feuerknöpfe sind die selben wie für den jeweiligen Joystick. Die Trigger für die Paddles sind in Bit 0 und 1 des Registers $FF9202.

FF9200 R LIGHTX
FF9222 R LIGHTY

Light Gun/Pen: Ein Light-Gun oder Pen kann in den Joystickport 0 gesteckt werden. Die aktuelle Position des der Pistole oder des Stiftes wird in diesen beiden Registern abgelegt. Die X-Position ändert sich alle:

4 Pixel im 320 x 200 Modus,
8 Pixel im 640 x 200 Modus
16 Pixel im 640 x 400 Modus.

Die Y-Position ist in allen Auflösungen exakt. Beachten Sie auch, daß die X-Position immer in der 320 x 200-Auflösung angegeben wird. Um also im 640 x 200-Modus ein korrektes Ergebnis zu erhalten, müssen Sie den Wert um ein Bit nach links schieben, und im 640 x 400-Modus um 2 Bit nach links.

FF8900 R/W c c SDMACNTR

Im Sound-DMA-Kontrollregister gibt es folgende Einstellungen:

cc:

00 - Sound-DMA abgeschaltet (nach RESET)

01 - Sound-DMA an; am Frame-Ende aus

10 - Sound-DMA an; Frame wiederholen

FF8902 R/W FRMBASEHI
FF8904 R/W FRMBASEMID
FF8906 R/W FRMBASELO

Frame-Basis-Adresse: Diese 3 Register enthalten die Basisadresse des zu spielenden Frames.

FF8908 R/- FRMCNTHI
FF890A R/- FRMCNTMID
FF890C R/- FRMCNTLO

Frame-Adress-Counter: Diese Register enthalten die aktuelle Adresse des Sound-DMA's. Damit können Sie feststellen, welches Sample gerade abgearbeitet wird.

FF890E R/W FRMENDHI
FF8910 R/W FRMENDMID
FF8912 R/W FRMENDLO

Frame-End-Adress: Diese Register enthalten die End-Adresse des zu spielenden Samples.

FF8920 R/W m r r SMODCNTR

Sound-Mode-Control: In diesem Kontrollregister stellen Sie ein, mit welcher Frequenz und in welchem Modus (Stereo oder Mono) der Frame abgespielt werden soll. Dabei haben rr und m folgende Bedeutung:

   rr:
   00 - 6250 Hz Abspielfrequenz (default)
   01 - 12517 Hz
   10 - 25033 Hz
   11 - 50066 Hz
   m:
    0 - Stereo (default)
    1 - Mono
FF8922 R/W MWDATA
FF8924 R/W MWMASK

Durch das Microwire-Interface sprechen Sie zukünftige Microwire-Geräte an. Eines dieser Devices ist bereits integriert: der LMC1992-Computer, der für den Ton und die Lautstärke des digitalen Sound verantwortlich ist. Der LMC1992 hat die Device-Adresse $01. Um den LMC1992 zu programmieren, müssen Sie immer (!) das Maskenregister auf $7FF schalten! Den eigentlichen Befehl schreiben sie in das Datenregister:

xx 01 011 ddd ddd : Setze Hauptlautstärke (2 dB-Schritte) 000 000 : -80 dB 010 100 : -40 dB 101 000 : 0 dB

xx 01 101 xdd ddd : Lautstärke linker Kanal (2 dB-Schritte) 00 000 : - 40 dB 01 010 : - 20 dB 10 100 : 0 dB

xx 01 100 xdd ddd : Lautstärke rechter Kanal (2 dB-Schritte) 00 000 : - 40 dB 01 010 : - 20 dB 10 100 : 0 dB

xx 01 010 xxd ddd : Setze Treble (2 dB Schritte) 0 000 : -12 dB 0 110 : 0 dB 1 100 : 12 dB xx 01 001 xxd ddd : Setze Bass (2 dB Schritte) 0 000 : -12 dB 0 110 : 0 dB 1 100 : 12 dB xx 01 000 xxx xdd : definiere Vermischung 00 : -12 dB 01 : mit GI-Soundchip mischen 10 : nicht mit GI-Soundchip mischen 11 : reserviert


Martin Backschat
Aus: ST-Magazin 12 / 1989, Seite 64

Links

Copyright-Bestimmungen: siehe Über diese Seite