← ST-Computer 09 / 1986

Das ST-Betriebssystem Teil 5

Grundlagen

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.