Im ersten Teil des Streifzugs durch die neuen Funktionen des TOS 3.0 haben wir uns mit der Speicheraufteilung des TT und den Grafikfunktionen des XBIOS beschÀftigt. Diesmal gehen wir auf die neuen und erweiterten Schnittstellen-Funktionen des BIOS und XBIOS ein.
Auf dem ST sprechen »Bcon«-Funktionsaufrufe fĂŒr GerĂ€t 1 stets die serielle Schnittstelle (»AUX«) an. Der TT besitzt allerdings drei neue serielle Schnittstellen. Um diese einerseits ST-Programmen zugĂ€nglich zu machen und andererseits den Anpassungsaufwand von Kommunikationssoftware an die neuen Schnittstellen möglichst gering zu halten, gibt es eine neue XBIOS-Funktion namens »Bconmap« (siehe auch Textkasten »neue XBIOS-Funktionen«). Dadurch lĂ€Ăt sich das GerĂ€t 1 beliebig auswechseln. Sie können es einerseits einem der neu hinzugekommenen Schnittstellen oderauch einem selbstdefinierten GerĂ€t zuordnen.
Mit »Bconmap« tauschen Sie auĂerdem das von der »Rsconf«-Funktion benutzte GerĂ€t, sowie GerĂ€t 0 der »lorec«-Funktion aus. Desweiteren sind den drei neuen Schnittstellen in den BIOS-Funktionen »Bconin«, »Bconout«, »Bconstat« und »Bconostat« eigene GerĂ€tenummern zugeordnet (siehe Tabelle 1).
Die dritte neue Schnittstelle (GerĂ€t 9) liefert der SCC-Kanal A. Dieser ist entweder mit der DB9-(»Serial Port 2«) oder der LAN-Schnittstelle (Local Area Network) des TT verbunden. Um DB9 zu selektieren, mĂŒssen Sie das Bit 7 von Port A des Soundchips löschen (»Offgi-bit(0x7f);«). Die LAN-Schnittstelle ist ausgewĂ€hlt, wenn das Bit gesetzt ist (»Ongibit(0x80);«).
Eigene BIOS-GerÀtetreiber
Die TOS-Entwickler haben lobenswerterweise das Einbinden neuer, selbstdefinierter GerĂ€te in die BIOS-Funktionen vorgesehen. Um einen eigenen GerĂ€tetreiber zu verwenden, mĂŒssen Sie lediglich Ihre Treiberfunktionen dem BIOS mitteilen. Dazu holen Sie sich zunĂ€chst ĂŒber »Bconmap(-2)« den Zeiger auf die GerĂ€te-Struktur. Diese ist wie folgt aufgebaut:
struct bconmap
{
long *maptab; /* ptr to map table */
word maptabsize; /* # of lines in the table */
};
Die GerĂ€te-Struktur enthĂ€lt fĂŒr jedes GerĂ€t einen Eintrag. Jeder Eintrag enthĂ€lt einen Zeiger auf seine »Bconstat«-, »Bconin«-, »Bcostat«- und »Bconout«-Funktionen, sowie einen Zeiger auf seine »Rsconf«-und »lorec«-Funktionen. Die Anzahl der vorhandenen GerĂ€te ergibt sich ĂŒber »maptabsize«. Die höchste erlaubte GerĂ€tenummer fĂŒr die »Bcon«-Funktionen errechnet sich aus »maptabsize« plus 5 und ist normalerweise 9.
Kopieren Sie nun die GerĂ€te-Struktur in einen um einen Eintrag erweiterten neuen Speicherbereich und aktualisieren Sie »maptab« und »maptabsize« in der GerĂ€te-Struktur. FĂŒllen Sie den neuen Eintrag aus, indem Sie die Zeiger auf Ihre eigenen Funktionen eintragen. In diesem Zusammenhang sollten Sie wissen, daĂ die »Rsconf«-Funktion leider lange Zeit falsch dokumentiert wurde. Sie liefert in Wirklichkeit einen Langwort-Wert zurĂŒck. Dieses Langwort besteht aus vier zusammengefĂŒgten Bytes: die Inhalte der UCR-,
RSR- und TSR-Register der MFP, sowie ein unbenutzes Byte. Das UCR-Register ist dabei das oberste Byte des Langworts, darauf folgen die anderen Register in obiger Reihenfolge. Seit Rainbow-TOS gilt: »Rsconf(-2,...)« liefert die zuletzt eingestellte Baudrate zurĂŒck -unabhĂ€ngig von den nach -2 folgenden Parametern. Da im TT durch »Bconmap« nicht jede Schnittstelle von der 68901-MFP stammen muĂ, sollten Sie beim Einstellen der Konfiguration besondere Vorsicht walten lassen: Erfragen Sie mittels »Rsconf(-1,-1,-1 ,-1,-1, -1)« zunĂ€chst die aktuellen Einstellungen, Ă€ndern lediglich die benötigten Bits und rufen »Rsconf« mit den neuen Werten auf. In Tabelle 2 finden Sie eine Ăbersicht aller zu beachtenden Bits in den »Rsconf«-Argumenten. Jedes selbstdefinierte GerĂ€t muĂ diese wenigstens emulieren können. Auf der TOS-Diskette zu dieser Ausgabe finden Sie im Archiv »TT_Kurs« die nötigen Routinen zum Einbinden von selbstdefinierten BIOS-GerĂ€ten. (ah)
Die neuen XBIOS-Funktionen
XBIOS 0x2a: DMAread
XBIOS 0x2b: DMAwrite
long DMAread(sector(count,buffer(devno)
long sector;
word count;
void *buffer;
word devno;
Funktionsweise
»DMAread« liest Sektoren des angegebenen GerĂ€tes (devno) in den Speicher. »DMAwrite« schreibt Sektoren vom Speicher auf das GerĂ€t devno. Die Funktionen arbeiten mit ACSI- und SCSI-GerĂ€ten. Die GerĂ€tenummern sind folgendermaĂen verteilt:
devno |
Bedeutung |
$0-$7 |
ASCI-GerÀte (0-7) |
$8-$f |
SCSI-GerÀte (8-15) |
... |
reserviert |
Ergebnis
Die Funktion gibt einen BIOS-Fehlercode zurĂŒck
Anmerkungen
Beide Funktionen gehen davon aus, daà das angegebene GerÀt den Puffer ansprechen kann. Beachten Sie, daà dies beispielsweise bei einem »DMAread«-Transfer ins alternative RAM nicht der Fall ist.
XBIOS 0x2c: Bconmap
long Bconmap(devno)
word devno;
Funktionsweise
Diese Funktion installiert das als »devno« angegebene GerĂ€t als GerĂ€t 1 in allen »Bcon«-Funktionen. FĂŒr »devno« sind die Werte -1 (keine VerĂ€nderung), -2 (Zeiger auf Struktur zurĂŒck), 6 und höher erlaubt.
Ergebnis
Erhalten Sie den Wert 44 zurĂŒck, so unterstĂŒtzt das aktive TOS diese Funktion noch nicht. Ansonsten hĂ€ngt der RĂŒckgabewert von »devno« ab.
devno |
RĂŒckgabe |
-2 |
Zeiger auf »device mapping structure« |
-1 |
das aktuelle GerÀt |
6... |
das bisher aktuelle GerÀt bzw. 44 auf einem ST |
XBIOS 0x2e: NVMaccess
word NVMaccess(op,start,count,buffer)
word op,start,count;
byte *buffer;
Funktionsweise
Diese Funktion verwaltet den löschbaren Speicher (NVM = Non-volatile Memory) der TT-eigenen Real-Time-Clock. Der NVM umfaĂt 50 Byte, von denen die letzten beiden als PrĂŒfsumme dienen. »NVMaccess« ĂŒberprĂŒft sie bei Lesezugriffen, berechnet sie bei Schreibzugriffen neu und initialisiert sie auf Wunsch.
Opcode |
Bedeutung |
0 |
Lesezugriff: kopiert Daten vom NVM in den Puffer |
1 |
Schreibzugriff: |
2 |
Initialisierung: löscht |
»start« gibt das erste anzusprechende Byte im NVM an, »count« entspricht der Anzahl der zu ĂŒbertragenden Byte.
Ergebnis
Die Funktion liefert 0 bei erfolgreicher DurchfĂŒhrung, EBADRQ (-5) bei einem Bereichsfehler oder EGENRL (-12) bei einem NVM-PrĂŒfsummenfehler.
Anmerkung
Die Benutzung des NVM wird in Zukunft von Atari vorgeschrieben. Entwickler sollten ihre spezielle Verwendung von NVM-Bytes Atari mitteilen.
Die Bcon-GerÀte
GerÀtenummer |
Bedeutung |
0 |
PRN 1 (austauschbar, normalerweise 6) |
2 |
CON |
3 |
MIDI |
4 |
IKBD |
5 |
RAW |
6 |
ST-kompatibler serieller Port (Modem 1) |
7 |
SCC Channel B (Modem 2) |
8 |
TTMFP serieller Port (Serial 1) |
9 |
SCC Channel A (volles Handshake, Serial 2) |
Tabelle 1. Die »Bcon«-Funktionen sprechen nun insgesamt acht GerĂ€te an. GerĂ€t 1 ist ĂŒber die neue Funktion »Bconmap« austauschbar und entspricht einem GerĂ€t ab Nummer 6. Normalerweise ist ihm GerĂ€t 6 zugeordnet - der ST-kompatible serielle Port.
Die Belegung Bcon-kompatibler Portregister
UCR
Bit 6-5: WortlĂ€nge (00â8, 01 â7, 10â6, 11 â5)
Bit 4-3: Stopbits (01 â1, 10J.5, 11 â2)
Bit 2: ParitĂ€t (0ânein, 1 âja)
Bit 1: ParitĂ€t (0âungerade, 1,.gerade)
RSR
-
TSR
Bit 3: Unterbrechungssignal (solange gesetzt)
SCR
-
Tabelle 2. Wollen Sie ein selbstdefiniertes GerĂ€t in die »Bcon«-GerĂ€tetabelle einfĂŒgen, so mĂŒssen Sie sicherstellen, daĂ Ihre »Rsconf«-Funktion die obigen Einstellungen wenigstens emuliert.