|
|
 |
 |
Atari Basic (Atari 400/800/XL/XE), Teil 2
|
 |
|
4.1 Textausgabe auf dem Bildschirm
PRINT [<Ausdruck>[;|,[<Ausdruck>]][...]]
Der PRINT-Befehl ermöglicht die Ausgabe beliebiger Informationen auf den Bildschirm Als <Ausdruck> können Sie entweder Strings, Stringvariablen oder numerische Ausdrücke angeben, wobei letztere vor der Ausgabe ausgerechnet werden. Werden zwei Ausdrücke durch Semikolon getrennt, hängt sie der Printbefehl direkt aneinander. Ein Komma als Trennzeichen lässt eine Lücke. Komma oder Semikolon können auch am Ende des Printbefehls stehen, sie wirken sich darauf aus, wie die Ausgabe des nächsten Printbefehls angefügt wird.
Ein PRINT-Befehl alleine bewirkt einen Zeilenvorschub, d.h. der darauf folgende PRINT-Befehl beginnt mit der Ausgabe eine Zeile tiefer.
4.2 Eingaben über die Tastatur
INPUT ["<Ausgabetext>",]<Variablenname>[,<Variablenname>][...]
Falls angegeben, schreibt der INPUT-Befehl zuerst den Ausgabetext auf den Bildschirm, gefolgt von einem Fragezeichen und dem Eingabecursor. Ohne Ausgabetext produziert INPUT nur ein Fragezeichen und den Cursor. Der Programmbenutzer muß nun die Werte für die angegebenen Variablen in der richtigen Reihenfolge eingeben.
Es ist eine gute Idee, mit jedem INPUT-Befehl nur eine Variable eingeben zu lassen. Das reduziert die Fehleranfälligkeit und gibt Ihnen die Möglichkeit, die Plausibilität jeder einzelnen Eingabe zu prüfen bevor die nächste erfolgt.
4.3 Grafik
Wenn man bedenkt, wann der erste Atari-Homecomputer auf den Markt kam, sind die gebotenen Grafikfähigkeiten doch erstaunlich. 128 verschiedene Farben (die allerdings nicht gleichzeitig angezeigt werden können), Auflösungen bis zu 320 x 192 Bildpunkten und die Möglichkeit, den Bildschirm unabhängig vom gewählten Modus mit 4 "normalen" Textzeilen am unteren Rand darzustellen waren weit mehr als die Apples und Commodores zu diesem Zeitpunkt bieten konnten.
GRAPHICS <modus>
Stellt den angegebenen Modus ein. Mögliche Werte sind:
Modus Typ Auflösung Farben Modus Typ Auflösung Farben
0 TEXT 40 x 24 1 8 GRA 320 x 192 1
1 TEXT 20 x 24 5 9 GRA 80 x 192 1
2 TEXT 20 x 12 5 10 GRA 80 x 192 9
3 GRA 40 x 24 4 11 GRA 80 x 192 16
4 GRA 80 x 48 2 12 GRA 40 x 24 5
5 GRA 80 x 48 4 13 GRA 40 x 12 5
6 GRA 160 x 96 2 14 GRA 160 x 192 2
7 GRA 160 x 96 4 15 GRA 160 x 192 4
Normalerweise wird jeder dieser Modi mit einem vierzeiligen Textbereich am unteren Bildrand angezeigt, was die oben angegebene Vertikalauflösung jeweils um 1/6 verringert. Um eine ganzseitige Darstellung mit einem bestimmten Modus zu erreichen, addieren Sie 16 zu dem Moduswert.
Beim Wechsel des Grafikmodus wird der Bildspeicher gelöscht. Sie können dies jedoch unterbinden, wenn Sie zum Moduswert die Zahl 32 addieren.
SETCOLOR <register>, <farbwert>, <helligkeit>
Weist einem Farbregister einen bestimmten Farbwert (0-15) und eine Helligkeit (0-14) zu.
COLOR <register>
Wählt für folgende PLOT-Befehle das angegebene Farbregister aus.
PLOT <x-pos>,<y-pos>
Setzt an der angegebenen Bildschirmposition einen Punkt.
POSITION <x-pos>,<y-pos>
POSITION legt die Bildschirmposition für die nächste Bildschirmausgabe fest. Diese erfolgt im Textmodus mit PRINT, im Grafikmodus bestimmt POSITION den Startpunkt der Linie.
DRAWTO <x-pos>,<y-pos>
DRAWTO zeichnet eine Linie von der zuletzt festgelegten Bildschirmposition (siehe POSITION-Befehl) zu den angegebenen Koordinaten.
LOCATE <x-pos>,<y-pos>,<variable>
LOCATE ermittelt den Inhalt einer Bildschirmposition. In einem Textmodus wird ein Zeichencode, im Grafikmodus der Farbregisterwert der angegebenen Position in der Variablen gespeichert.
4.4 Tonerzeugung
Im Gegensatz zur Grafik ist die Tonerzeugung bei den Atari-Homecomputern ein eher stiefmütterlich behandeltes Kapitel. Das spiegelt sich auch in der Ansteuerung von Basic aus wieder:
SOUND <kanal>,<tonhöhe>,<verzerrung>,<lautstärke>
SOUND startet die Wiedergabe eines Tones auf dem angegebenen Kanal (0-4). Das Basicprogramm läuft sofort weiter und der Ton erklingt ununterbrochen, solange bis das Programm endet, ein NEW- oder RUN-Befehl gegeben wird oder ein anderer SOUND-Befehl auf dem gleichen Kanal abgesetzt wird. Enthält dieser die Lautstärke 0, so wird der Ton auf diesem Kanal abgeschaltet. Die Lautstärke darf zwischen 0 und 15 liegen, sollte aber für alle Kanäle zusammen 32 nicht übersteigen.
Die Verzerrung erzeugt nur für die Werte 4 und 10 reine Töne. Die Tonhöhe muß zwischen 0 und 255 liegen, die Frequenz berechnet sich aus 31960/(Tonhöhe+1).
Die folgende Tabelle gibt die Tonhöhenwerte für die Oktave vom ein- zum zweigestrichenen C an. Für höhere oder tiefere Oktaven können Sie die angegebenen Werte einfach verdoppeln bzw. halbieren oder selbst berechnen (genauer):
C' 126 E 96 G# 76 C" 63
C# 114 F 91 A 72 .
D 108 F# 85 A# 68 .
D# 102 G 81 H 64 .
4.5 Ansteuerung von Peripheriegeräten
4.5.1 Dateioperationen
Dateioperationen basieren darauf, daß zunächst ein Kanal auf einem bestimmten Gerät geöffnet wird, aus dem dann gelesen oder in den geschrieben werden kann. Ist die Operation abgeschlossen, wird der Kanal wieder geschlossen.
OPEN #<kanalnummer>,<typ>,0,"<gerätekennung>:[<dateiname>]"
Öffnet einen Kanal auf einem bestimmten Gerät. Das Gerät wird über die Gerätekennung identifiziert. Dabei kennen Sie bereits "C:", "D:" und "D1:" von den Lade- und Speicherbefehlen als Kennungen für Kassetten- und Diskettenlaufwerke. Weitere Geräte sind "K:" (Tastatur), "P:" (Drucker), "S:" (Bildschirm), "E:" (Terminal, Kombination aus Tastatur zum Lesen und Bildschirm zum Schreiben) und "R:" (serielle Schnittstelle RS-232, Erweiterungsmodul)
Der Typ des Zugriffs auf das Gerät kann die Werte 4 (nur lesen), 8 (nur schreiben), 12 (schreiben und lesen), 9 (schreiben mit anhängen) und 6 (Inhaltsverzeichnis einer Diskette) annehmen.
CLOSE #<kanalnummer>
Schließt einen mit OPEN geöffneten Kanal.
PRINT #<kanalnummer>, <argumentliste>
PRINT # funktioniert genau wie der normale PRINT-Befehl, die Ausgabe erfolgt aber auf den angegebenen Kanal.
INPUT #<kanalnummer>, <variablenliste>
INPUT # entspricht dem INPUT-Befehl, die Daten werden allerdings aus dem angegebenen Kanal gelesen.
GET #<kanalnummer>, <variable>
GET # liest aus dem angegebenen Kanal ein einzelnes Zeichen.
PUT #<kanalnummer>, <variable>
PUT # gibt ein einzelnes Zeichen auf dem angegebenen Kanal aus.
NOTE #<kanalnummer>, <variable>, <variable>
POINT #<kanalnummer>, <sektor>, <byte>
NOTE ermittelt die Position des Schreib-/Lesezeigers der zum angegebenen Kanal gehörenden Datei und schreibt dessen Sektor in die erste, den Byteoffset in die zweite angegebene Variable. Der umgekehrte Befehl dazu ist POINT. Er setzt den Schreib-/Lesezeiger auf die angegebenen Werte. Beide Befehle arbeiten nur in Verbindung mit einem Diskettenlaufwerk.
STATUS #<kanalnummer>, <variable>
STATUS ermittelt den Zustand des Gerätes, auf das der angegebene Kanal verweist. Das Ergebnis wird in der übergebenen Variable gespeichert.
4.5.2 Drucker
Ein an einem Atari-Homecomputer angeschlossener Drucker wird über die Gerätekennung P: angesprochen. Somit können alle im vorigen Kapitel angesprochenen Operationen auch auf den Drucker angewendet werden:
100 OPEN #1,8,0,"P:"
110 PRINT #1, "DIESER TEXT ERSCHEINT AUF DEM DRUCKER"
120 CLOSE #1
Es gibt allerdings einen Befehl, der den Drucker direkt ansteuert, ohne daß dazu zuvor ein Kanal geöffnet werden muß:
LPRINT <ausdruck>[;|,[<ausdruck>]]...
LPRINT ist funktional mit dem PRINT-Befehl identisch, die Ausgaben erscheinen allerdings auf dem Drucker. Allerdings erzeugt jeder LPRINT-Befehl einen Zeilenvorschub am Ende - auch wenn der Befehl mit einem Komma oder Semikolon abgeschlossen wird.
| 5. Fortgeschrittene Programmierung |
5.1 Fehlerbehandlung
TRAP <zeilennummer>
Mit dem Befehl TRAP installieren Sie eine eigene Fehlerbehandlungsroutine. Anstatt abzubrechen wird das Programm im Falle eines Fehlers in der angegebenen Zeile fortgesetzt. Um TRAP wieder abzuschalten, rufen Sie es mit einer Zeilennummer größer 32767 auf.
5.2 Manipulation von Speicherstellen
Die meisten Basicdialekte ermöglichen die Manipulation beliebiger Speicherstellen des Arbeitsspeichers. So auch das Atari-Basic. Während das Auslesen des Speicherinhalts noch recht ungefährlich ist, müssen Sie bei der Veränderung schon sehr genau wissen, was Sie tun.
POKE <adresse>,<wert>
POKE schreibt an der angegebenen Adresse den Wert (1 Byte) in den Arbeitsspeicher. Die Adresse muß im Bereich von 0 bis 65535 liegen.
PEEK( <adresse> )
Die Funktion PEEK liefert den Inhalt der angegebenen Speicherstelle.
USR( <adresse> [,<parameter>]... )
Die USR-Funktion ruft an der angegebene Adresse ein Maschinenspracheprogramm auf. Dabei können Parameter übergeben werden, die vom Basicinterpreter vor dem Aufruf des Maschinenprogrammes als 16-Bit-Zahlen (High-Byte zuerst) auf dem Prozessorstapel abgelegt werden. Zuoberst wird dann noch die Parameterzahl gespeichert. Vor dem Rücksprung mit RTS muß das Maschinenprogramm demzufolge unbedingt die Parameter vom Stapel geräumt haben - auch wenn es sie eventuell gar nicht benötigt. |
|
|