XBIOS steht fĂŒr Extended BIOS und dient zur UnterstĂŒtzung der speziellen Hardware des ATARI ST. Alle diese Routinen sind ĂŒber den TRAP # 14 abrufbar. Das XBIOS hat 40 verschiedene Funktionen, die von Assembler oder der Sprache C (jetzt sogar auch in Pascal) zu erreichen sind.
0 INITMAUS
Mit Hilfe dieser Funktion ist es möglich, die Maus zu bedienen und zu manipulieren. Eine Anzahl von Parametern wird auf dem Stack ĂŒbergeben. Erst wird eine Adresse definiert, wo die Maus-Ereignisse abgelegt werden. Ein zweiter Parameter wĂ€hlt den Arbeitsmodus der Maus. Die Alternativen sehen folgendermaĂen aus:
0 Disable Maus
1 Enable Maus, relativ Modus
2 Enable Maus, absolut Modus
3 nicht benutzt
4 Enable Maus, Tastatur Modus
Ein dritter Parameter zeigt auf einen sogenannten Parameterblock, der folgende Information beinhaltet:
Topmode
Buttons
Xparam
Yparam
Topmode hat ĂŒber die KoordinatenAnordnung zu entscheiden. Eine 0 bedeutet, daĂ der Y Wert 0 in der unteren linken Ecke liegt, eine 1 als Parameter bedeutet, daĂ der Y Wert 0 in der oberen linken Ecke liegt. Buttons liefert, wie die Reaktion auf das DrĂŒcken einer der Maus-Tasten sein soll. Xparam enthĂ€lt den Skalierungsfaktor in X-Richtung. Yparam enthĂ€lt den Skalierungsfaktor in Y-Richtung.
0 INITMAUS
MOVE.L #ADRESSE,-(SP) Adresse, an der sich, die Maus-Routine befindet.
MOVE.L #TAB,-(SP) Adresse, an der sich die Parameter befinden.
MOVE.W #2,-(SP) Enable Maus, Absolut Modus
MOVE.W #0,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADD.L #12,SP Stack Korrektur
TAB:
DC.L 1,1,1,1
ADRESSE:
BLK.B 16
1 SSBRK
Diese Funktion dient zur Speicherplatzreservierung. Ein Nachteil dieser Routine ist, daĂ vor der Initialisierung das Betriebssystem aufgerufen werden muĂ, insofern fĂŒr jeden Anwender schwer zu bedienen.
1 SSBRK
MOVE.W #$1200,-(SP) 3 KByte Speicherplatz reservieren
MOVE.W #1,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #4,SP Stack Korrektur
2 PHYSBASE
Nach Aufruf dieser Funktion erhÀlt man im Register D0 die Anfangsadresse des Bildschirmspeichers. Diese sogenannte physikalische Adresse zeigt auf den Bildschirmspeicher, der momentan zu sehen ist.
2 PHYSBASE
MOVE.W #2,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #2,SP Stack Korrektur
MOVE.W DO,#BASE Speicher PHYSBASE in BASE
BASE:
BLK.L 1
3 LOGBASE
Nach Aufruf dieser Funktion erhÀlt man in Register D0 die Anfangsadresse, in der der Inhalt dem PHYSBASE dargestellt wird.
3 LOGBASE
MOVE.W #3,(-SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #2,SP Stack Korrektur
MOVE.W D0,#BASE Speicher LOGBASE in BASE
BASE:
BLK.L 1
4 GETREZ
Diese Funktion gibt in Register D0 die momentane Bildschirmauflösung an.
0 Minimale Auflösung, 320 * 200 Punkte
1 Mittlere Auflösung, 640 * 200 Punkte
2 Hohe Auflösung, 640 * 400 Punkte (nur monochrom)
4 GETRZ
MOVE.W #4,(-SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #2, SP Stack Korrektur
MOVE.W D0,#BASE Speicher Auflösung in BASE
BASE:
BLK.L 1
5 SETSCREEN
Diese Funktion ermöglicht die Ănderung der schon oben beschriebenen Bildschirmparameter. Die Auflösung sowie physikalische und logische Adressen können dadurch geĂ€ndert werden.
O SETSCREEN
MOVE.W #2,-(SP) High Resolution
MOVE.L #$80000,-(SP) Neu PHYSBASE
MOVE.L #$80000,-(SP) Neu LOGBASE
MOVE.W #5,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADD.L #10,SP Stack Korrektur
6 SETPALETTE
Durch die Funktion SETPALETTE lĂ€Ăt sich die Farbpalette Ă€ndern. Auf einen Puffer werden die 16 verschiedeen Farben, die neu gesetzt werden mĂŒssen, abgelegt.
6 SETPALETTE
MOVE.L #TAB,-(SP) Adresse Farbparameter
MOVE.W #6,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #6,SP Stack Korrektur
TAB:
DC.W $200,$333,$203,$302,$l02,$112,$555,$777,
$656,$000,$100,$007,$444,$654,$301,$222
7 SETCOLOR
SETCOLOR erlaubt, einzelne Farben zu verĂ€ndern. Der erste Parameter gibt an, welche Farbe (0-15) geĂ€ndert werden muĂ, und der nĂ€chste Parameter gibt die Farbe an. Wird als Farbnummer der Wert -1 eingegeben, so erhĂ€lt man den alten Wert zurĂŒck.
7 SETCOLOR
MOVE.L #$007,-(SP) Farbe
MOVE.W #15,-(SP) Farbnummer 15
MOVE.W #7,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #6,SP Stack Korrektur
8 FLOPRD
FLOPREAD ist eine sehr interessante Funktion, die das Lesen von ein oder mehreren Sektoren erlaubt. Verschiedene Parameter werden auf den Stack weitergegeben. Der erste Parameter gibt an, wieviele Sektoren nacheinander gelesen werden mĂŒssen. Ein zweiter Parameter legt die Seite (Disk) fest. Der dritte Parameter legt fest, in welchem Track sich der oder die Sektoren befinden, die man lesen will. Der nĂ€chste Parameter gibt die Sektornummer des ersten Sektors an der gelesen wird. Der fĂŒnfte Parameter bestimmt, auf welchem Laufwerk gelesen wird. Der letzte Parameter ist die Anfangsadresse eines Puffers, in der die Daten abgelegt werden mĂŒssen. Der Puffer muĂ so dimensioniert werden, daĂ es genug Platz fĂŒr die zu lesenden Daten gibt. Ein möglicher Fehler wird im Register DO zurĂŒckgegeben.
Mögliche RĂŒckmeldung
0 kein Fehler
-1 allgemeiner Fehler
-2 Floppy ist nicht eingeschaltet
-6 Track wird nicht gefunden
-8 Sektor wird nicht gefunden
-11 Lesefehler
8 FLOPRD
MOVE.W #2,-(SP) 2 Sektoren lesen
MOVE.W #0,-(SP) Seite Nu11
MOVE.W #1,-(SP) Track: 1
MOVE.W #1,-(SP) Sektor 1
MOVE.W #0,-(SP) Laufwerk A
MOVE.W #0,-(SP) Dummy
MOVE.W #BUF,-(SP) Puffer fĂŒr Sektoren-Daten
MOVE.W #8,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADD.L #20,SP Stack Korrektur
BUF:
BLK.B 2*512
9 FLOPWR
Diese Funktion erlaubt das Schreiben eines oder mehrerer Sektoren auf einer Diskette. Da diese Funktion sich völlig analog zu den schon oben beschriebenen Funktion verhĂ€lt, brauchen wir hier keine genaue Beschreibung der Parameter einzugeben. Die Funktion liefert im Register D0 eine Fehlermeldung zurĂŒck.
Mögliche RĂŒckmeldung
0 kein Fehler
-1 allgemeiner Fehler
-2 Floppy nicht bereit
-3 nicht identifizierbare Fehler
-
10 Schreibfehler
-13 Diskette schreibgeschĂŒtzt
-16 Sektor defekt
9 FLOPWR
MOVE.W #2,-(SP) 2 Sektoren lesen
MOVE.W #0,-(SP) Seite Nu11
MOVE.W #1,-(SP) Track: 1
MOVE.W #1,-(SP) Sektor 1
MOVE.W #0,-(SP) Laufwerk A
MOVE.W #0,-(SP) Dummy
MOVE.W #BUF,-(SP) Puffer fĂŒr Sektoren-Daten
MOVE.W #9,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADD.L #20,SP Stack Korrektur
BUF:
BLK.B 2*512
10 FLOPFMT
Mit dieser Funktion ist es möglich, ein oder mehrere Tracks auf der Diskette zu formatieren. Verschiedene Parameter werden auf den Stack abgelegt. Sie haben folgende Bedeutung:
Der erste Parameter ist ein Zeichen, mit dem bei der Formatierung die Sektoren beschrieben werden. In unserem Beispiel haben wir den Wert 0 genommen, es kann aber auch ein anderes Zeichen sein. Die einzige EinschrÀnkung bei der Wahl des Werts, mit dem die Sektoren beschrieben werden, ist, daà die obere Byte-HÀlfte jedes Bytes nicht den Wert $F annehmen darf.
Der zweite Parameter ist eine sogenannte 'Magic' Konstante. Sein Wert ist $87654321.
Der nÀchste Wert bestimmt die Reihenfolge, womit die Sektoren auf der Diskette formatiert werden. In der Regel einer nach der anderen.
Ein anderer Parameter legt die Diskettenseite fest. Hier sind die Werte 0 oder 1 zulÀssig. Ein nÀchster Parameter gibt die Anzahl von Sektoren pro Track an.
Der folgende Parameter bestimmt die Anzahl der Sektoren pro Track, die formatiert werden sollen.
Die Laufwerks-Nummer, in dem sich die Diskette befindet, die formatiert wird, wird auch auf den Stack ĂŒbergeben. Eine 0 bedeutet Laufwerk A und eine 1 Laufwerk B. Die Anfangsadresse eines Puffers wo die Trackdaten ab gelegt werden, ist der letzte Parameter, den diese Funktion benötigt. Die Funktion gibt im Register DO eine Fehlermeldung an, wenn die Funktion nicht einwandfrei abgelaufen ist.
10 FLOPFMT
MOVE.W #79,D7
SCHLEIFE:
MOVE.W #0,-(SP) Wert, mit dem die Sektoren
beschrieben werden.
MOVE.W #$87654321,-(SP) 'Magic'-Nummer
MOVE.W #1,-(SP) Interleave
MOVE.W #1,-(SP) Seite 1
MOVE.W D7,-(SP) Sektor, der formatiert wird
MOVE.W #9,-(SP) 9 Sektoren pro Track
MOVE.W #BUF,-(SP) Puffer
MOVE.W #10,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADD.L #26,SP Stack Korrektur
DBNE D7, SCHLEIFE Alle 79 Sektoren formatiert?
BUF:
BLK.B $2000
12 MIDIWS
Dadurch lĂ€Ăt sich ein String ĂŒber die MIDI-Schnittstelle ausgeben. Die Strings selbst werden im Stack abgelegt, sowie auch die LĂ€nge dieser.
12 MIDIWS
MOVE.L #STRING,-(SP) Adresse, an der sich der String befindet
MOVE.W #11,-(SP) LĂ€nge der Strings
MOVE.W #12,-(SP) Funktionsnummer
TRAP #14 XBIOS aufrufen
ADDQ.L #8,SP Stack Korrektur
STRING:
DC.B "ST COMPUTER",0
13 MFPINT
Diese Routine dient zur Initialisierung einer Interruptroutine des MFP 68901 Bausteins. Dieser Baustein kann 16 verschiedene Interrupts verwalten. Zwei Parameter sind fĂŒr das einwandfreie Funktionieren dieser Routine notwendig. Der erste zeigt auf eine Adresse, in der sich die neue Routine befindet. Der zweite ist die Nummer des Interrupts.