Was Entwickler wissen müssen: Die Programmierung des TT (Teil 2)

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.


Martin Backschat
Aus: TOS 01 / 1991, Seite 86

Links

Copyright-Bestimmungen: siehe Über diese Seite