home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / books / xhdi_110 / xhdispec.txt < prev   
Text File  |  1993-05-18  |  21KB  |  478 lines

  1. @(#)XHDI/xhdispec.txt
  2. @(#)Julian F. Reschke, 18. Mai 1993
  3.  
  4. Spezifikation des `XHDI'-Cookies, 18. Mai 1993
  5. ----------------------------------------------
  6.  
  7. Cookie-Kennung: "XHDI". Der Parameter zeigt auf die Adresse einer 
  8. Routine, die massenspeicherbezogene Funktionen zur Verfügung stellt. Zur 
  9. Absicherung steht vor der Routine die Long-Konstante $27011992.
  10.  
  11. Der Wert des Cookies kann sich im laufenden Betrieb ändern (wg. 
  12. Zweitinstallation). Daher ggfs. (z. B. in Accessories) den Cookie 
  13. jedesmal NEU abfragen!
  14.  
  15. ALLE FUNKTIONEN MUESSEN IM SUPERVISOR-MODUS AUFGERUFEN WERDEN. Das 
  16. Verhalten für Aufrufe im User-Modus ist undefiniert. Bis auf D0 werden 
  17. keine Prozessorregister verändert. Undefinierte Opcodes führen zur 
  18. Fehlermeldung EINVFN.
  19.  
  20. Einige der Funktionsaufrufe -- insbesondere `XHReadWrite()' -- können 
  21. zum Aufruf von BIOS- oder XBIOS-Routinen im Betriebssystem und damit zur 
  22. Aktivierung des `Critical Error Handler' führen. Im Zweifel muß der 
  23. `CEH' also vom Aufrufer abgeschaltet werden.
  24.  
  25. Für alle Funktionen seien folgende Return-Werte definiert:
  26.  
  27. TOS-Fehlernummern:
  28.  
  29. 0:           OK (OK)
  30. -1:          unspezifizierter Fehler (ERROR)
  31. -2:          Gerät nicht bereit (EDRVNR)
  32. -15:         ungültige Device/Targetnummer (EUNDEV)
  33. -32:         falsche Funktionsnummer (EINVFN)
  34. -36:         Gerät ist zur Zeit 'reserved' (EACCDN)
  35. -46:         BIOS-Device wird vom Treiber nicht bedient (EDRIVE)
  36.  
  37. SCSI-Fehlernummern (Bereich von -200..-455)
  38.  
  39. (-200 - N):  SCSI-Errorcode N (der `Additional Sense Code' aus Byte 12 des
  40.              `Extended Sense Format', siehe Abschnitt 7.2.14 in `draft
  41.              proposed American National Standard for information systems -
  42.              SMALL COMPUTER SYSTEM INTERFACE - 2 (SCSI-2) March 9, 1990').
  43.  
  44. IDE-Fehlernummern (Bereich von -456..-711)
  45.  
  46. (-456 - N):  IDE-Errorcode N (Wert des IDE-Fehlerregisters).             
  47.  
  48. Hinweis: SCSI-Fehlercodes können logischerweise nur bei ACSI-/SCSI-
  49. Geräten auftreten. Für Platten am IDE-Interface des `ST-Book' oder 
  50. `Falcon030' (oder Maschinen, bei denen ein derartiges Interface 
  51. nachgerüstet worden ist), kann auch optional folgende Zuordnung benutzt 
  52. werden:
  53.  
  54. Bit im IDE-
  55. Fehlerregister  Bedeutung                  SCSI-Fehler  XHDI-Fehler
  56.  
  57. 1               Track 0 not found          $06          -206
  58. 0               DAM not found              $13          -219
  59. 4               ID-Field not found         $12          -218
  60. 7               Bad block mark             $10          -216
  61. 6               Uncorrectable error        $11          -217
  62. 2               Command aborted            $20          -232
  63. 5               Media Change               $28          -240
  64. 3               Media Change requested     $5A          -290
  65.  
  66. (es empfiehlt sich, die einzelnen Bits in der angegebenen Reihenfolge
  67. zu testen).
  68.  
  69. Bei andersartigen Geräten, wie zum Beispiel Diskettenlaufwerken an der 
  70. Floppy-Controller-Schnittstelle, können auch andere, hier noch nicht 
  71. spezifizierte Error-Codes zurückgeliefert werden.
  72.  
  73. Für die Parameterübergabe gilt die GEMDOS-Übergabe-Konvention. Alle 
  74. Parameter werden auf dem Stack abgelegt (zuletzt, also an der niedrigsten 
  75. Adresse, der Opcode als 16-Bit-Wert). Das 32 Bit große Ergebnis wird in D0 
  76. zurückgeliefert.
  77.  
  78. Immer dann, wenn dokumentiert ist, daß der Aufrufer Nullzeiger übergeben 
  79. darf, bedeutet die Übergabe eines Nullzeigers, daß der Aufrufer sich für 
  80. den zurückzuliefernden Wert nicht interessiert. Treibersoftware muß also 
  81. solche Zeiger vor einer Dereferenzierung immer überprüfen.
  82.  
  83. Folgende Datentypen seien vereinbart:
  84.  
  85. UWORD:  16-Bit, unsigned
  86. LONG:   32-Bit, signed
  87. ULONG:  32-Bit, unsigned
  88. char *: 32-Bit, Zeiger auf eine nullterminierte Zeichenkette
  89.  
  90. Termini:
  91.  
  92. major:  Major Device Number
  93.  
  94.            0..7: Platten am ACSI-Bus mit Atari-kompatiblen Befehlssatz
  95.           8..15: Platten am SCSI-Bus
  96.          16..17: Platten an der IDE-Schnittstelle
  97.          18..63: Erweiterungen lt. PUN_INFO-Struktur (Feld: pun[])
  98.              64: Gerät am Floppycontroller
  99.         65..255: weitere eigene Erweiterungen jenseits dem, was AHDI
  100.                  abdeckt
  101.  
  102. minor:  Minor Device Number (für 'major' 0..15: LUN des ACSI- oder
  103.         SCSI-Geräts), maximal 255.
  104.  
  105. key:    Entweder ein 16-Bit-Schlüssel, ermittelt von `XHReserve()', oder 0,
  106.         wenn das Gerät nicht reserviert wurde oder der Schlüssel nicht
  107.         bekannt ist.
  108.  
  109.  
  110. Die einzelnen Funktionen:
  111.  
  112. -----------------------------------------------------------------------
  113. Opcode 0: UWORD XHGetVersion (void);
  114.  
  115. Liefert die Protokollversion zurück. Formatbeispiel: $0119 ist Version 
  116. 1.19 (identisch mit GEMDOS-Sversion(), nur sind die beiden Bytes NICHT 
  117. verdreht). Diese Version der XHDI-Spezifikation hat die Versionsnummer 
  118. $0110.
  119.  
  120. -----------------------------------------------------------------------
  121. Opcode 1: LONG XHInqTarget (UWORD major, UWORD minor, ULONG *blocksize,
  122.                             ULONG *device_flags, char *product_name);
  123.  
  124. Liefert Informationen über das durch `major' und `minor' spezifizierte 
  125. Gerät (in `device_flags': ein Attributvektor, in `product_name': 
  126. optional die Produktbezeichnung des Geräts). Mit `XHReserve ()' 
  127. vorgenommene Reservierungen werden dabei berücksichtigt.
  128.  
  129. block_size:   Blockgröße auf dem Gerät (für `XHReadWrite()' sehr wichtig).
  130.               Normalerweise 512.
  131.  
  132. device_flags: (Bit gesetzt -> Fähigkeit verfügbar):
  133.  
  134.       Bit 0:  Gerät kann gestoppt werden (XH_TARGET_STOPPABLE)
  135.       Bit 1:  Gerät hat wechselbare Medien (XH_TARGET_REMOVABLE)
  136.       Bit 2:  Auswurf des Geräts kann verriegelt werden
  137.               (XH_TARGET_LOCKABLE)
  138.       Bit 3:  Medium kann per Kommando ausgeworfen werden
  139.               (XH_TARGET_EJECTABLE)
  140.       Bit 31: Geräte ist zur Zeit blockiert (XH_TARGET_RESERVED).
  141.  
  142.               Alle weiteren Bits sind reserviert und sollten vom Treiber
  143.               auf Null gesetzt werden.
  144.  
  145. product_name: Produktbezeichnung des Geräts (max. 33 Zeichen inkl.
  146.               Leerzeichen). Falls die Information nicht verfügbar ist, wird
  147.               eine Zeichenkette der Länge Null zurückgeliefert.
  148.  
  149. Anmerkung: für `blocksize', `device_flags' und `product_name' dürfen 
  150. auch Nullzeiger übergeben werden.
  151.  
  152. Anmerkung: für IDE-Geräte wird bei `product_name' gegebenenfalls auf 32 
  153. Zeichen gekürzt. Siehe auch die neue Funktion `XHInqTarget2'.
  154.  
  155. -----------------------------------------------------------------------
  156. Opcode 2: LONG XHReserve (UWORD major, UWORD minor, UWORD do_reserve,
  157.                           UWORD key);
  158.  
  159. Reserviert ein Gerät bzw. gibt es wieder frei. Auf reservierte Geräte 
  160. kann nur bei Angabe des korrekten Schlüssels per `XHLock()', `XHStop()' 
  161. oder `XHEject()' zugegriffen werden.
  162.  
  163. Sinn: man möchte nicht, daß man eine Wechselplatte per CPX-Modul 
  164. entriegeln kann, nachdem sie gerade von einer virtuellen 
  165. Speicherverwaltung verriegelt worden ist. Dies sollte nur die 
  166. Speicherverwaltung selbst machen können.
  167.  
  168. Beim Reservieren des Geräts wird im Erfolgsfall ein 16-Bit-Schlüssel 
  169. zurückgeliefert. Dieser Schlüssel muß bei allen weiteren Zugriffen auf 
  170. das Gerät angegeben sowie beim Wieder-Freigeben angegeben werden.
  171.  
  172. do_reserve: (1) Reservieren oder (0) wieder freigeben.
  173. key:        (nur beim Freigeben benutzt).
  174.  
  175. -----------------------------------------------------------------------
  176. Opcode 3: LONG XHLock (UWORD major, UWORD minor, UWORD do_lock,
  177.                        UWORD key);
  178.  
  179. Verriegelt bzw. entriegelt den Auswurfknopf eines Geräts. Der Treiber 
  180. hat sich darum zu kümmern, ob dieser Befehl an das Gerät weitergeleitet 
  181. wird oder nicht (falls das Medium nicht verriegelbar ist).
  182.  
  183. Welchen Code man im Fehlerfall zurückerhält, ist undefiniert. Mehr 
  184. Informationen werden allerdings auch nicht benötigt, da man ja mit 
  185. `XHInqTarget()' vorher gezielt auf diese Fähigkeit abtesten kann.
  186.  
  187. do_lock: (1) Verriegeln oder (0) Entriegeln.
  188. key:     Falls Gerät reserviert, sonst Null übergeben.
  189.  
  190. -----------------------------------------------------------------------
  191. Opcode 4: LONG XHStop (UWORD major, UWORD minor, UWORD do_stop,
  192.                        UWORD key);
  193.  
  194. Gerät wird gestoppt (geparkt) bzw. gestartet (entparkt).
  195.  
  196. Welchen Code man im Fehlerfall zurückerhält, ist undefiniert. Mehr 
  197. Informationen werden allerdings auch nicht benötigt, da man ja mit 
  198. `XHInqTarget()' vorher gezielt auf diese Fähigkeit abtesten kann.
  199.  
  200. do_stop: (1) Stoppen oder (0) Starten.
  201. key:     Falls Gerät reserviert, sonst Null übergeben.
  202.  
  203. Anmerkung: Bei etwaigen Zugriffen auf das gestoppte Gerät sollte der 
  204. Treiber selbst für das Wiederhochfahren sorgen.
  205.  
  206.  
  207. -----------------------------------------------------------------------
  208. Opcode 5: LONG XHEject (UWORD major, UWORD minor, UWORD do_eject,
  209.                         UWORD key);
  210.  
  211. Medium wird ausgeworfen oder eingezogen.
  212.  
  213. Welchen Code man im Fehlerfall zurückerhält, ist undefiniert. Mehr 
  214. Informationen werden allerdings auch nicht benötigt, da man ja mit 
  215. `XHInqTarget()' vorher gezielt auf diese Fähigkeit abtesten kann.
  216.  
  217. do_eject: Medium auswerfen (1) oder einziehen (0).
  218. key:      Falls Gerät reserviert, sonst Null übergeben.
  219.  
  220. -----------------------------------------------------------------------
  221. Opcode 6: ULONG XHDrvMap (void);
  222.  
  223. Liefert einen Bitvektor mit den über das XHDI-Protokoll unterstützten 
  224. BIOS-Gerätenummern (wie etwa bei `Drvmap()').
  225.  
  226. -----------------------------------------------------------------------
  227. Opcode 7: LONG XHInqDev (UWORD bios_device, UWORD *major, UWORD *minor,
  228.                          ULONG *start_sector, BPB *bpb);
  229.  
  230. Liefert Major Device Number, Minor Device Number, Startsektor und BPB 
  231. eines BIOS-Geräts (im Gegensatz zu `Getbpb()' wird dadurch der Media-
  232. Change-Status des Geräts NICHT zurückgesetzt).
  233.  
  234. Anmerkung: es wird ein Zeiger auf eine vom Aufrufer bereitgestelle BPB-
  235. Struktur übergeben, die vom XHDI-Treiber gefüllt wird.
  236.  
  237. Return-Wert: OK, EDRVNR (Gerät kann zur Zeit nicht angesprochen werden, 
  238. zum Beispiel Medium nicht eingelegt), EDRIVE (falsche Gerätenummer) oder 
  239. eine andere Fehlernummer. Bei EDRVNR darf man sich darauf verlassen, daß 
  240. `major' und `minor' korrekt zurückgeliefert werden.
  241.  
  242. Ein `start_sector' mit Wert $FFFFFFFF soll auf eine Partition hinweisen, 
  243. die zur Zeit vom Treiber nicht bedient wird (zum Beispiel, wenn ein 
  244. Wechselmedium mit 'zu wenig' Partitionen eingelegt ist).
  245.  
  246. Der zurückgelieferte BPB ist ungültig, wenn das Element `recsiz' Null ist.
  247.  
  248. Hinweis: ein Dateisystem ist durch major- und minor-Gerätenummer sowie 
  249. Startsektor (mit der obigen Einschränkung) exakt spezifiziert. Über die 
  250. Art des Dateisystems (FAT oder etwas anderes) ist damit nichts ausgesagt!
  251.  
  252. Anmerkung: für `major', `minor', `start_sector' und `bpb' dürfen auch 
  253. Nullzeiger übergeben werden.
  254.  
  255. -----------------------------------------------------------------------
  256. Opcode 8: LONG XHInqDriver (UWORD bios_device, char *name, char *version,
  257.                             char *company, UWORD *ahdi_version,
  258.                             UWORD *maxIPL);
  259.  
  260. Liefert Informationen über den Treiber, der das angegebene Gerät bedient.
  261.  
  262. name:         Zeiger auf Zeichenkette mit Treibernamen (max. 17 Zeichen).
  263. version:      Zeiger auf Zeichenkette mit Versionsnummer (max. 7 Zeichen).
  264. company:      Zeiger auf Zeichenkette mit Namen des Herstellers (max. 17
  265.               Zeichen).
  266. ahdi_version: AHDI-Versionslevel (wie PUN_INFO-Struktur).
  267. maxIPL:       Höchster IPL, unter dem der Treiber für das angegebene Gerät
  268.               arbeitsfähig ist (Normalwert für Treiber, die ihr Timing per
  269.               _hz_200 erledigen: 5).
  270.  
  271. Anmerkung: für `name', `version', `company', `ahdi_version' und 
  272. `maxIPL' dürfen auch Nullzeiger übergeben werden.
  273.  
  274. -----------------------------------------------------------------------
  275. Opcode 9: LONG XHNewCookie (ULONG newcookie);
  276.  
  277. - OPTIONALE Funktion, darf also mit EINVFN beantwortet werden -
  278.  
  279. Installiert einen zusätzlichen XHDI-Handler (Vorteil: der XHDI-Cookie 
  280. zeigt nach wie vor auf die gleiche Adresse). Wer diese Funktion 
  281. unterstützt muß also folgendes tun:
  282.  
  283. 1. Falls dies der erste Aufruf dieser Art ist: anschließend so vorgehen,
  284.    als hätte der XHDI-Cookie bei der Installation bereits auf `newcookie'
  285.    gezeigt.
  286.  
  287. 2. Falls nicht: Funktion an 'nächsten' Handler weiterleiten.
  288.  
  289. Wer eine Mehrfachinstallation vornehmen möchte, sollte so vorgehen:
  290.  
  291. 1. Testen, ob `XHNewCookie()' zum Erfolg führt.
  292.  
  293. 2. Anderenfalls den Cookie `per Hand' versetzen.
  294.  
  295. ------------------------------------------------------------------------
  296. Opcode 10: LONG XHReadWrite (UWORD major, UWORD minor, UWORD rwflag,
  297.                              ULONG recno, UWORD count, void *buf);
  298.  
  299. Äquivalent zur BIOS-Funktion `Rwabs()' zum Lesen bzw. Schreiben 
  300. physikalischer Blocknummern.
  301.  
  302. rwflag:       Bits 0..2: wie in den AHDI-Release-Notes (3.00, 18. April
  303.               1990) beschrieben. Bit 3 (physikalischer Modus) wird
  304.               ignoriert. Alle weiteren Bits sind reserviert und auf Null zu
  305.               setzen.
  306. recno:        Sektornummer
  307. count:        Anzahl der Blöcke
  308. buf:          Zeiger auf Puffer.
  309.  
  310. -----------------------------------------------------------------------
  311. Opcode 11: LONG XHInqTarget2 (UWORD major, UWORD minor, ULONG *blocksize,
  312.                               ULONG *device_flags, char *product_name,
  313.                               UWORD stringlen);
  314.  
  315. - AB XHDI-Version 1.01 -
  316.  
  317. Liefert Informationen über das durch `major' und `minor' spezifizierte 
  318. Gerät (in `device_flags': ein Attributvektor, in `product_name': 
  319. optional die Produktbezeichnung des Geräts). Mit `XHReserve ()' 
  320. vorgenommene Reservierungen werden dabei berücksichtigt.
  321.  
  322. block_size:   Blockgröße auf dem Gerät (für `XHReadWrite()' sehr wichtig).
  323.               Normalerweise 512.
  324.  
  325. device_flags: (Bit gesetzt -> Fähigkeit verfügbar):
  326.  
  327.       Bit 0:  Gerät kann gestoppt werden (XH_TARGET_STOPPABLE)
  328.       Bit 1:  Gerät hat wechselbare Medien (XH_TARGET_REMOVABLE)
  329.       Bit 2:  Auswurf des Geräts kann verriegelt werden
  330.               (XH_TARGET_LOCKABLE)
  331.       Bit 3:  Medium kann per Kommando ausgeworfen werden
  332.               (XH_TARGET_EJECTABLE)
  333.       Bit 31: Geräte ist zur Zeit blockiert (XH_TARGET_RESERVED).
  334.  
  335.               Alle weiteren Bits sind reserviert und sollten vom Treiber
  336.               auf Null gesetzt werden.
  337.  
  338. product_name: Produktbezeichnung des Geräts (max. `stringlen' Zeichen inkl.
  339.               Leerzeichen). Falls die Information nicht verfügbar ist, wird
  340.               eine Zeichenkette der Länge Null zurückgeliefert.
  341.  
  342. stringlen:    Länge der für `product_name' übergebenen Zeichenkette.
  343.  
  344. Anmerkung: für `blocksize', `device_flags' und `product_name' dürfen 
  345. auch Nullzeiger übergeben werden. Produktbezeichnungen von IDE-Geräten 
  346. können bis zu 40 Zeichen lang sein.
  347.  
  348. -----------------------------------------------------------------------
  349. Opcode 12: LONG XHInqDev2 (UWORD bios_device, UWORD *major, UWORD *minor,
  350.                            ULONG *start_sector, BPB *bpb, ULONG *blocks,
  351.                            char *partid);
  352.  
  353. - AB XHDI-Version 1.10 -
  354.  
  355. Liefert Major Device Number, Minor Device Number, Startsektor, BPB (im 
  356. Gegensatz zu `Getbpb()' wird dadurch der Media-Change-Status des Geräts 
  357. NICHT zurückgesetzt), Länge und Partitionkennung (maximal drei Zeichen 
  358. zzgl. terminierender Null) eines BIOS-Geräts.
  359.  
  360. Anmerkung: es wird ein Zeiger auf eine vom Aufrufer bereitgestelle 
  361. BPB-Struktur übergeben, die vom XHDI-Treiber gefüllt wird.
  362.  
  363. Return-Wert: OK, EDRVNR (Gerät kann zur Zeit nicht angesprochen werden, 
  364. zum Beispiel Medium nicht eingelegt), EDRIVE (falsche Gerätenummer) oder 
  365. eine andere Fehlernummer. Bei EDRVNR darf man sich darauf verlassen, daß 
  366. `major' und `minor' korrekt zurückgeliefert werden.
  367.  
  368. Ein `start_sector' mit Wert $FFFFFFFF soll auf eine Partition hinweisen, 
  369. die zur Zeit vom Treiber nicht bedient wird (zum Beispiel, wenn ein 
  370. Wechselmedium mit 'zu wenig' Partitionen eingelegt ist).
  371.  
  372. Der zurückgelieferte BPB ist ungültig, wenn das Element `recsiz' Null ist.
  373.  
  374. Wenn die Partitionkennung nicht verfügbar ist (keine Atari-Partitionierung 
  375. oder überhaupt keine Partitionierung, beispielsweise bei normal 
  376. formatierten Disketten in SCSI-Diskettenlaufwerken), wird als 
  377. Partitionkennung eine leere Zeichenkette zurückgegeben.
  378.  
  379. Hinweis: ein Dateisystem ist durch major- und minor-Gerätenummer sowie 
  380. Startsektor (mit der obigen Einschränkung) exakt spezifiziert. Über die 
  381. Art des Dateisystems (FAT oder etwas anderes) ist damit nichts ausgesagt!
  382.  
  383. Anmerkung: für `major', `minor', `start_sector', `bpb', `blocks' und 
  384. `partid' dürfen auch Nullzeiger übergeben werden.
  385.  
  386.  
  387. -----------------------------------------------------------------------
  388. Opcode 13: LONG XHDriverSpecial (ULONG key1, ULONG key2,
  389.                                  UWORD subopcode, void *data);
  390.  
  391. - OPTIONALE Funktion, darf also mit EINVFN beantwortet werden -
  392.  
  393. Dieser Opcode kann für treiberspezifische Erweiterungen benutzt werden. 
  394. Auf welche Art und Weise die Daten in `subopcode' und `data' interpretiert 
  395. werden, hängt ausschließlich vom betroffenen Treiber ab. `key1' und `key2' 
  396. dienen zur Identifikation des anzusprechenden Treibers: `key1' sollte 
  397. dabei aus vier druckbaren ASCII-Zeichen bestehen, `key2' aus einem 
  398. möglichst willkürlich gewählten Long-Wert (etwa dem Datum der 
  399. Definition im BCD-Format).
  400.  
  401.  
  402. -----------------------------------------------------------------------
  403. Opcode 14: LONG XHGetCapacity (UWORD major, UWORD minor, ULONG *blocks,
  404.                                ULONG *blocksize);
  405.  
  406. - OPTIONALE Funktion, darf also mit EINVFN beantwortet werden -
  407.  
  408. Diese Funktion liefert in `blocks' die Anzahl der adressierbaren Sektoren 
  409. auf dem Medium und in `blocksize' ihre Größe zurück (Vorsicht: je nach 
  410. verwendeter Hardware kann die Ausführung dieser Funktion mehrere Sekunden 
  411. dauern!).
  412.  
  413.  
  414. ------------------------------------------------------------------------
  415.  
  416. Installation mehrerer Programme im XHDI-Cookie
  417. ----------------------------------------------
  418.  
  419. (1) Bei der Installation feststellen, ob der Cookie schon gesetzt ist.
  420.     Falls ja, müssen folgende zusätzliche Aufrufkonventionen
  421.     berücksichtigt werden:
  422.     
  423. (2) Bei `XHGetVersion()' zunächst durch den alten Vektor springen und dann
  424.     das Minimun der dort erhaltenen und der eigenen Versionsnummer
  425.     zurückliefern.
  426.     
  427. (3) Bei `XHDrvmap()' zunächst den alten Vektor durchspringen und
  428.     anschließend die eigenen Drive-Bits hineinodern.
  429.     
  430. (4) Bei den anderen Funktionen: wenn es das eigene Gerät ist, normal
  431.     verfahren. Ansonsten: keinen Fehler melden, sondern durch den alten
  432.     Vektor springen.
  433.  
  434. -------------------------------------------------------------------------
  435.  
  436. Partitiontyp `RAW'
  437. ------------------
  438.  
  439. XHDI-1.10-kompatible Treiber müssen zusätzlich zu `GEM' und `BGM' den 
  440. dritten Partitiontyp `RAW' unterstützen. Für Partitionen dieses Typs 
  441. müssen folgende Eigenschaften unterstützt werden:
  442.  
  443. (1) Die Partitionlänge ist `beliebig' (im Rahmen der 32-Bit-Sektornummern).
  444.  
  445. (2) Die Partition ist als BIOS-Gerät ansprechbar; Getbpb() liefert einen
  446.     Nullzeiger (damit GEMDOS keinen Zugriff versucht, zusätzlich wird
  447.     auch der Media-Change-Status für das BIOS-Gerät zurückgesetzt). 
  448.  
  449. (3) Es kann per `Rwabs()' (nicht nur im physikalischen Modus) und
  450.     `XHReadWrite()' auf die Partition zugegriffen werden. Dabei wird
  451.     die physikalische Blockgröße des Mediums benutzt (siehe
  452.     `XHInqTarget()').
  453.  
  454. (4) `XHInqDev2()' liefert im Gegensatz zu `XHInqDev()' auch die Länge und
  455.     den Typ der Partition zurück.
  456.  
  457. Diese Erweiterungen sollen die Programmierung zuverlässiger 
  458. Filesystemtreiber für MiNT (siehe zum Beispiel das Minix-FS) erleichtern.
  459.  
  460. -------------------------------------------------------------------------
  461.  
  462. Empfohlene Partitiontypen
  463. -------------------------
  464.  
  465. BGM     GEMDOS-Partition > 16 MB
  466. GEM     GEMDOS-Partition < 16 MB
  467. RAW     siehe oben
  468.  
  469. Folgende Typen können optional unterstützt (zum Beispiel anhand einer 
  470. konfigurierbaren Liste von Kennungen) werden.
  471.  
  472. MAC     Mac-HFS-Partition, sollte ggfs wie `RAW' behandelt werden
  473. MIX     Minix-Partition, sollte ggfs wie `RAW' behandelt werden
  474. SWP     Swap-Partition, sollte ggfs wie `RAW' behandelt werden
  475. UNX     ASV (Atari Systen V R4), sollte ggfs wie `RAW' behandelt werden
  476.  
  477.  
  478.