Atarium: Mehr als 16 Laufwerke unter TOS

Diesmal wenden wir uns dem Thema Laufwerksnummern und Gerätetreiber zu. Viele Programmierer beherzigen z. B. immer noch nicht, daß es mehr als 16 GEMDOS-Laufwerke geben kann .

Laufwerksnummern treten im TOS an vielen Stellen auf: man denke nur an Harddisk-Treiber, Floppyroutinen, BIOS und GEMDOS. Vielen Unkenrufen zum Trotz ist TOS streng hierarchisch gegliedert - daher sollte man nie Aufrufe verschiedener Betriebssystemschichten miteinander vermischen. Genaugenommen darf man noch nicht einmal davon ausgehen, daß auf jeder Betriebssystemschicht mit derselben Laufwerksnummer auch dasselbe Gerät gemeint ist!

Beginnen wir mit unserer Rundreise ganz unten - beim XBIOS, das seit jeher die Routinen zum direkten Zugriff auf die beiden Diskettenlaufwerke beherbergt. Solange man sie nicht modifiziert, kennen die XBIOS-Floppyroutinen ausschließlich die zwei maximal anschließbaren Diskettenlaufwerke (genaue Auskunft gibt die Systemvariable »_nflops« bei Adresse $4A6). In den neuen TOS-Versionen (ab 2.0) sind XBIOS-Funktionen zum Direktzugriff auf ACSI- und SCSI-Festplatten dazugekommen (»DMAread()« und »DMAwrite()«). Diese werden allerdings z. Z. von keinen anderen Betriebssystemschichten benutzt. Im allgemeinen ist es sinnvoller, statt dessen die Funktionen des installierten Festplattentreibers zu verwenden.

Weder »höher« noch »tiefer«, sondern neben dem XBIOS liegt der Festplattentreiber. Der Einfachheit halber wollen wir hier nur Treiber beachten, die zum Atari-Vorbild »AHDI 3.0« kompatibel sind. AHDI unterstützt in den aktuellen Versionen bis zu 16 Gerätenummern, die normalerweise den einzelnen Partitionen zugeordnet sind. Informationen über Zahl und Art der verfügbaren Geräte kann man aus der PUN_INFO-Struktur (siehe Systemvariable »pun_ptr« bei Adresse $516, mehr dazu in [1]) entnehmen.

Gehen wir in der Betriebssystemhierarchie einen Schritt höher: Hier liegt das BIOS, das auf insgesamt 32 verschiedene Laufwerke zugreifen kann - welche das sind, kann man mit Hilfe der BIOS-Funktion »Drvmap()« erfragen (»Drvmap()« liefert einen 32-Bit-Vektor zurück).

Das Gebiet der BIOS-Gerätetreiber ist gut dokumentiert - praktisch alle RAM-Disks und Festplattentreiber installieren sich hier (dazu dienen die BIOS-Vektoren »hdv_rw«, »hdv_bpb« und »hdv_mediach«). Von Haus aus sind Treiber für die Laufwerke 0 und 1 installiert - unabhängig davon, wie viele Floppylaufwerke tatsächlich angeschlossen sind. Im Zweifelsfall wird das zweite Laufwerk mit Hilfe des »Critical Error Handler« emuliert (»Bitte Diskette B in Laufwerk A:einlegen«). Die Laufwerksnummern 16 bis 31 liegen z. Z. brach. Jeder, der mag, kann hier jedoch beliebige weitere Gerätetreiber installieren.

Oberhalb des BIOS residiert natürlich das GEMDOS. Alle z. Z. erhältlichen GEMDOS-Versionen können maximal 16 Laufwerke (also A: bis P:) ansteuern. Diese Nichtachtung dessen, was das BIOS eigentlich könnte, ist sogar in [2] dokumentiert: »GEMDOS only supports 16 drives...«. An gleicher Stelle wird aber darauf hingewiesen, daß es künftig auch mehr Laufwerke sein könnten (»... Future systems will support 32 drives«).

Wie stellt man nun fest, welche GEMDOS-Laufwerke verfügbar sind? Die BIOS-Funktion »Drvmap()« sollte man ja dazu nicht bemühen - sie liegt in der Betriebssystemhierarchie eine Ebene tiefer! Die Lösung: Man betrachtet den 32 Bit großen Rückgabewert der GEMDOS-Funktion »Dsetdrv()«, die ebenso wie »Drvmap()« einen Bitvektor mit den verfügbaren Laufwerken zurückliefert. Da »Dsetdrv()« als Parameter die Nummer des Laufwerks erwartet, das zum aktuellen Laufwerk gemacht werden soll, bietet sich ein Aufruf der Form

LONG drives = Dsetdrv (Dgetdrv ()); 

an. Dabei sollte man beachten, daß »Dsetdrv()« bei manchen Hochsprachen fälschlicherweise als integer »int« deklariert ist. Mancher wird jetzt natürlich gleich seinen Disassembler oder ein altes GEMDOS-Listing bemühen und einwenden, daß »Dsetdrv()« nicht mehr tut, als den Return-Wert von »Drvmap()« weiterzuleiten. Richtig, im Moment ist das so. In künftigen GEMDOS-Versionen könnte es aber anders aussehen!

Sie sollten beim Umgang mit Laufwerksnummern also folgendes beachten:

Laut Atari wird die Funktionalität von MetaDOS direkt in künftige TOS-Versionen einfließen - Grund genug, die Systemsoftware von heute und morgen richtig zu unterstützen.

(uw)

Quellennachweis:

[1] Julian F. Reschke, »Neues von Atari«, ST-Magazin 12/1989, Seite 56

[2] Atari Corporation, »GEMDOS Reference Manual, File System Calls«, Seite 7

[3] Julian F. Reschke, »MetaDOS - Laufwerke von A bis Z«, ST-Magazin 10/1990, Seite 66

übersichtstabelle der Laufwerksfunktionen
Betriebssystemschicht Anzahl der Laufwerke Abfragen mit
Floppy-XBIOS maximal 2 Floppies Systemvariable _nflops
ACSI- und SCSI-XBIOS je 8 Festplatten  
AHDI (Harddisktreiber) 16 Partitionen PUN_INFO-Struktur
BIOS 32 Geräte Drvmap()
GEMDOS zur Zeit 16 Laufwerke Dsetdrv (Dgetdrv())
GEMDOS mit MetaDOS 26 Laufwerke Dsetdrv (Dgetdrv())

Julian F. Reschke uw
Aus: ST-Magazin 08 / 1991, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite