Das ST-Betriebssystem Teil 5

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.



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]