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
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
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
Mit Hilfe dieser Funktion ist es möglich, eigene Tastaturtabellen zu erstellen. Drei Tabellen von jeweils 128 Bytes groß sind möglich:
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
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
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.
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:
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
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