Wir haben in Teil 5 unserer Betriebssystem-Serie verschiedene Funktionen des Extended-BIOS (XBIOS) kennengelernt. Unsere gemeinsame Wanderung wird uns in diesem interessanten Teil des Betriebssystems weiterführen
14 IOREC
Nach der Ausführung dieser Funktion wird ein Zeiger auf einen Eingabe-Puffer eines seriellen Eingabe-Gerätes, zurückgegeben. Die Funktion IOREC verlangt, daß die Device-Nummer des anzusprechenden Gerätes vor Aufruf der Funktions als Parameter auf dem Stack übergeben wird. Zulässige Device-Nummern sind:
Device-Nummer Eingabe-Gerät
0 RS232
1 TASTATUR
2 MIDI
Der Eingabe-Puffer ist wie folgt aufgebaut:
ibuf Zeiger auf Puffer
ibufsiz Größe des Puffers
ibufhd Head-Index
ibuftl Tail-Index
ibuflow Unteremarke
ibufhi Oberemarke
MOVE.W #1,-(SP) ;PUFFER FÜR TASTATUR
MOVE.W #14,-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AUFRUFEN
ADDQ.L #4,SP ;STACK KORREKTUR
15 RSCONF
Die Funktion RSCONF ermöglicht die Änderung der RS232 Konfiguration. Nach Aufruf dieser Funktion werden verschiedene Register des Multi Function Peripheral Chip auf den gewünschten Wert gesetzt. Bei Übergabe einer -1 als Parameter kann die momentane Einstellung abgefragt werden. Sechs Parameter werden für diese Funktion benötigt.
Die folgenden Parameter dienen zum Verändern der entsprechenden Register des MFP 68901:
Register Nummer
Register 20 Sycronous Character
Register 21 USART Control
Register 22 Receiver Status
Register 23 Transmiter Status
Durch der Parameter BAUD kann man die Baud-Rate bestimmen. Folgende Werte sind zulässig:
Wert Baudrate
0 19200
1 9600
2 4800
3 3600
4 2400
5 2000
6 1800
7 1200
8 600
9 300
10 200
11 150
12 125
13 100
14 75
15 50
Durch der FLOW Parameter wird der Handshake-Modus festgelegt. Folgende Werte sind dabei möglich:
Flow Bedeutung
0 Kein Handshake
1 XON/XOFF
2 RTS/CTS
3 XON/XOFF und RTS/CTS (nicht sinnvoll)
MOVE.W #-l,-(SP) ;WIRD NICHT GEÄNDERT
MOVE.W #-l,-(SP)
MOVE.W #-l,-(SP)
MOVE.W #-l,-(SP)
MOVE.W #0,-(SP) ;KEIN HANDSHAKE
MOVE.W #1,-(SP) ;9600 BAUD
MOVE.W #15,(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AURUFEN
ADD.L #14,SP ;STACK KORREKTUR
16 KEYTBL
Mit Hilfe dieser Funktion ist es möglich, eigene Tastaturtabellen zu erstellen. Drei Tabellen von jeweils 128 Bytes groß sind möglich:
- ohne Shift
- mit Shift
- mit Caps Lock
Jeweils muß ins Stack der Adresse der neuen Tabellen übergeben. Will man eine Tabelle nicht verändern, so muß man statt einer Adresse den Wert -1 als Parameter weitergeben. Man erhält unter das Register DO einen Zeiger, wo sich die Adresse der verschiedenen Tabellen befindet.
16 KEYTBL
MOVE.L #-l,-(SP) ; WIRD NICHT VERANDERN
MOVE.L #-l,-(SP)
MOVE.L #-l,-(SP)
MOVE.W #16^-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AUFRUFEN
ADD.L #14,SP ;STACK KORREKTUR
17 RANDOM
Nach Aufruf dieser Funktion erhält man in den unteren 24 Bits des Registers DO eine Zufallszahl. Die Bits 24 bis 31 werden dabei immer auf Null gesetzt. Bei jedem neuen Aufruf erhält man ein anderes Ergebnis. Die Erzeugung dieser Zufallszahlen basiert auf einer Reihenentwicklung, die ihren Startwert aus der internen Uhrzeitfunktion gewinnt. Es handelt sich also nur um eine Pseudozufallszahl, die als ausreichend betrachtet werden kann.
MOVE.W #17,-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS
ADDQ.L #2,SP ;STACK KORREKTUR
AND.W #$FF,D0 ;ZEICHEN MASKIEREN
MOVE.W D0,-(SP) ;ZEICHEN AUSGEBEN
MOVE.W #2,-(SP) ;ÜBER CONOUT
TRAP #1
ADDQ.L #4,SP
18 PROTOBT
Diese Funktion gestattet das Erzeugen oder das Ändern eines Bootsektors. Der Bootsektor befindet sich auf Track 0, Sektor 1 der Seite Null einer Diskette. In diesem Bootsektor wird dem Betriebssystem mitgeteilt, um welchen Diskettentyp es sich handelt. Folgende Parameter sind für die Ausführung dieser Funktion nötig:
MOVE. W #-1,-(SP) ;BOOTSEKTOR AUSFÜHREN
MOVE. W #1,-(SP) ;40 TRACK, DOUBLE SIDED
MOVE. L #-1,-(SP) ;SERIENNUMMER NICHT VERÄNDERT
MOVE. L #BUFFER,-(SP) ;BUFFERADRESSE
MOVE. W #18,-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AUFRUFEN
ADD. L 14,SP ;STACK KORREKTUR
-buf: ist die Anfangsadresse eines 512 Byte großen Puffers, der entweder den Bootsektor enthält oder in dem die Kopie erzeugt wird.
-serialnr: ist eine Seriennummer, die auf dem Bootsektor geschrieben wird. Wird hier -1 als Parameter übergeben, so bleibt die bestehende Seriennummer unverändert. Ist der Parameter ein Wert größer als 24 Bit, dann wird eine zufällige Nummer geschrieben.
-disktyp: bestimmt den Disktyp. Ist der Parameter -l, so bleibt der Disktyp unverändert. Folgende Werte kann Disktyp annehmen:
0 = 40 Tracks, einseitig
1 = 40 Tracks, zweiseitig
2 = 80 Tracks, einseitig
3 = 80 Tracks, zweiseitig
-execflag: hat dieser Parameter den Wert l, so wird der Bootsektor ausführbar. Ist der Wert gleich Null, dann handelt es sich um einen nicht ausführbaren Bootsektor. Auch hier bewirkt die Übergabe von -l, daß der Ursprungszustand nicht geändert wird.
19 FLOPVER
Durch diese Funktion können ein oder mehrere Sektoren einer Diskette verifiziert werden, d. h., sie kontrolliert, ob die Daten fehlerlos geschrieben wurden. Die Sektoren werden von Diskette gelesen und mit dem Inhalt des Puffers verglichen. FLOPVER wird mit sieben Parametern versorgt:
- buf: ist die Adresse eines 1024 großen Puffers.
- devno: ist die Nummer des angesprochenen Laufwerkes.
- sectno: legt die Sektorennummer fest, von der an verifiziert werden soll.
- trakcno: legt den entsprechenden Track fest.
- sideno: wählt die Seite der Diskette aus.
- count: legt die Anzahl der zu verifizierenden Sektoren fest.
- filier: unbenutzt
Ob die Funktion erfolgreich durchgeführt wurde, wird im Register DO mitgeteilt. Eine Null bedeutet eine gelungene Ausführung und eine negative Zahl zeigt, daß die Funktion fehlerhaft ausgeführt wurde.
MOVE.W #5,-(SP) ;5 SEKTOREN
MOVE.W #0,-(SP) ;SEITE NULL
MOVE.W #20,-(SP) ;TRACK 20
MOVE.W #5,-(SP) ;SEKTOR 5
MOVE.L #0,-(SP) ;DUMMY
MOVE.L #BUFFER,-(SP) ;BUFFERADRESSE
MOVE.W #19,-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AUFRUFEN
ADD.L #16,SP ;STACK KORREKTUR
20 SCRDMP
Hierdurch kann der Anwender eine Bildschirm-Hardcopy auf einem angeschlossenen Drucker ausgeben. Dieser Funktion entspricht der manuell ausführbaren Hardcopy-Funktion (AL-TERNATE und HELP).
MOVE.W #20,-(SP) ;FUNKTIONSNUMMER
TRAP #14 ;XBIOS AUFRUFEN
ADDQ.L #2,SP ;STACK KOREKTUR