HomeXBIOSInterruptfunktionenOverScan-XBIOS-Erweiterungen

4.13 Laufwerksfunktionen

DMAread Sektoren von Festplatte lesen.
DMAwrite Sektoren auf Festplate schreiben.
Flopfmt Spur auf einer Diskette formatieren.
Floprate Seekrate und Timeout der Floppy setzen.
Floprd Einzelne Sektoren lesen.
Flopver Sektoren einer Diskette überprüfen.
Flopwr Einzelne Sektoren schreiben.
Metaclose Gibt ein MetaDOS Gerät wieder frei.
Metadiscinfo Ermittelt aktuelle Status-Informationen.
Metagettoc Liefert das Inhaltsverzeichnis eines Gerätes.
Metainit Informationen über MetaDOS Version ermitteln.
Metaioctl Schickt GEMDOS-Opcodes an ein MetaDOS Gerät.
Metaopen Initialisiert ein MetaDOS Gerät.
Metaread Liest Daten von einem MetaDOS Gerät.
Metasetsongtime Startet eine Audio-Wiedergabe.
Metastartaudio Startet eine Audio-Wiedergabe.
Metastatus Ermittelt den Status eines MetaDOS Gerätes.
Metastopaudio Beendet eine Audio-Wiedergabe.
Metawrite Schreibt Daten auf ein MetaDOS Gerät.
Protobt Bootsektor für Diskette im Speicher generieren.

Querverweis: GEMDOS-Dateifunktionen   GEMDOS-Verzeichnisfunktionen

4.13.1 DMAread

Name: »DMA read« - liest einzelne Sektoren von einer DMA-Einheit.
Xbiosnummer: 42
Deklaration: int16_t DMAread( int32_t sector, int16_t count, void *buffer, int16_t devno );
Beschreibung: Die XBIOS-Routine DMAread liest einzelne oder mehrere Sektoren von einem ACSI- oder SCSI Gerät. Es gilt:
Parameter Bedeutung
   
sector erste Sektornummer
count Anzahl der Sektoren
buffer Anfangsadresse im Speicher
devno Gerätenummer. Es gilt:
0..7: ACSI-Geräte
8..15: SCSI-Geräte

Alle anderen Werte sind für zukünftige Erweiterungen reserviert.


Hinweis: In vielen Fällen ist es sinnvoller, statt dieser Funktion Rwabs zu verwenden. Der angegebene Speicherbereich muß für die jeweilige Hardware beschreibbar sein (Stichwort: Fast-RAM-Buffer). SCSI-Geräte werden von dieser Funktion nicht per DMA, sondern per Handshake betrieben.
Ergebnis: Die Funktion liefert als Ergebnis eine 0, wenn kein Fehler passiert ist, ansonsten einen Fehlercode.
Verfügbar: Diese Funktion steht erst ab TOS 3.* (Atari TT) zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   DMAwrite   Floprd   Flopwr   Rwabs

4.13.1.1 Bindings für DMAread

C: #include

int16_t DMAread( int32_t sector, int16_t count, void *buffer, int16_t devno );
Assembler:
move.w    devno,-(sp)  ; Offset 12
pea       buffer       ; Offset  8
move.w    count,-(sp)  ; Offset  6
move.l    sector,-(sp) ; Offset  2
move.w    #42,-(sp)    ; Offset  0
trap      #14          ; XBIOS aufrufen
lea       $E(sp),sp    ; Stack korrigieren

4.13.2 DMAwrite

Name: »DMA write« - schreibt einzelne Sektoren auf eine DMA-Einheit.
Xbiosnummer: 43
Deklaration: int16_t DMAwrite( int32_t sector, int16_t count, void *buffer, int16_t devno );
Beschreibung: Die XBIOS-Routine DMAwrite schreibt einzelne oder mehrere Sektoren auf ein ACSI- oder SCSI-Gerät. Es gilt:
Parameter Bedeutung
   
sector erste Sektornummer
count Anzahl der Sektoren
buffer Anfangsadresse im Speicher
devno Gerätenummer. Es gilt:
0..7: ACSI-Geräte
8..15: SCSI-Geräte

Alle anderen Werte sind für zukünftige Erweiterungen reserviert.


Hinweis: In vielen Fällen ist es sinnvoller, statt dieser Funktion Rwabs zu verwenden. Der angegebene Speicherbereich muß für die jeweilige Hardware lesbar sein (Stichwort: Fast-RAM-Buffer). SCSI-Geräte werden von dieser Funktion nicht per DMA, sondern per Handshake betrieben.
Ergebnis: Die Funktion liefert als Ergebnis eine 0, wenn kein Fehler passiert ist, ansonsten einen Fehlercode.
Verfügbar: Diese Funktion steht erst ab TOS 3.* (Atari TT) zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   DMAread   Floprd   Flopwr   Rwabs

4.13.2.1 Bindings für DMAwrite

C: #include

int16_t DMAwrite( int32_t sector, int16_t count, void *buffer, int16_t devno );
Assembler:
move.w    devno,-(sp)  ; Offset 12
pea       buffer       ; Offset  8
move.w    count,-(sp)  ; Offset  6
move.l    sector,-(sp) ; Offset  2
move.w    #43,-(sp)    ; Offset  0
trap      #14          ; XBIOS aufrufen
lea       $E(sp),sp    ; Stack korrigieren

4.13.3 Flopfmt

Name: »Floppy format« - formatiert einzelne Spuren auf einer Diskette.
Xbiosnummer: 10
Deklaration: int16_t Flopfmt( void *buf, int32_t filler, int16_t devno, int16_t spt, int16_t trackno, int16_t sideno, int16_t interlv, int32_t magic, int16_t virgin );
Beschreibung: Die XBIOS-Routine Flopfmt formatiert eine oder mehrere Spuren auf einer Diskette. Es gilt:
Parameter Bedeutung
buf Zeiger auf einen Bereich, in dem die Daten für die Spur gespeichert werden können.
filler bei allen TOS-Versionen < 1.02 unbenutzt, und auf 0 zu setzen. Ab dem Blitter-TOS gilt: wenn interlv = -1 ist, so ist filler als Zeiger auf eine Tabelle von Sektornummern anzusehen (16Bit-Worte). Dadurch ergibt sich die Möglichkeit, die Reihenfolge der Sektoren auf der Spur frei zu wählen.
devno 0 = Laufwerk-A, 1 = Laufwerk-B
spt Sektoren pro Spur (normal: 9). Falls der Cookie _FDC gesetzt ist, sind auch Werte von 18 (High-Density) bzw. 36 (Extra-High-Density) Sektoren erlaubt. Die Umschaltung der verschiedenen Schreibverfahren findet bei 13 (HD) bzw. 26 (ED) statt.
trackno Nummer der Spur (0..79)
sideno 0: Seite-1
1: Seite-2 (bei doppelseitigen Disketten)
interlv bestimmt, wie viele physikalische Sektoren jeweils zwischen zwei logischen Sektoren liegen (normal: 1)
magic 0x87654321, sonst wird nicht formatiert.
virgin Bitmuster, welches beim Formatieren in jeden Sektor geschrieben wird (normal: 0xe5e5). Die oberen vier Bits dürfen nicht gesetzt werden, da dies sonst vom Controller als Kommando interpretiert würde.


Hinweis: Ab dem Blitter-TOS erlaubt es das Desktop, eine Liste von Sektornummern zu übergeben, um Spuren derart zu spiralisieren, daß beim Spurwechsel möglichst wenig Zeit mit dem Warten auf den nächsten Sektor verloren wird.

Bei einem normalen Format (9 Sektoren pro Spur) muss der über den Parameter buf angegebene Speicherbereich eine Größe von mindestens 8 Kbyte besitzen; in anderen Fällen muss der Puffer evtl. noch vergrößert werden.
Ergebnis: Die Funktion liefert als Ergebnis eine 0, wenn kein Fehler passiert ist. Im Fehlerfall wird eine durch 0 abgeschlossene Liste der fehlerhaften Sektoren in den Puffer geschrieben.
Verfügbar: Alle TOS Versionen.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Flopwr

4.13.3.1 Bindings für Flopfmt

C: #include

int16_t Flopfmt( void *buf, int32_t filler, int16_t devno, int16_t spt, int16_t trackno, int16_t sideno, int16_t interlv, int32_t magic, int16_t virgin );
Assembler:
move.w    virgin,-(sp)  ; Offset 24
move.l    magic,-(sp)   ; Offset 20
move.w    interlv,-(sp) ; Offset 18
move.w    sideno,-(sp)  ; Offset 16
move.w    trackno,-(sp) ; Offset 14
move.w    spt,-(sp)     ; Offset 12
move.w    devno,-(sp)   ; Offset 10
move.l    filler,-(sp)  ; Offset  6
pea       buf           ; Offset  2
move.w    #10,-(sp)     ; Offset  0
trap      #14           ; XBIOS aufrufen
lea       $1A(sp),sp    ; Stack korrigieren
GFA-Basic Fehler%=Xbios(10,L:buf%,L:filler%,W:devno%,W:spt%,W:trackno%,W:sideno%,W:interlv%,L:magic%,W:virgin%)

4.13.4 Floprate

Name: »Floppy rate« - liest oder setzt die seek rate eines Floppylaufwerks.
Xbiosnummer: 41
Deklaration: int16_t Floprate( int16_t devno, int16_t newrate );
Beschreibung: Die XBIOS-Routine Floprate liefert bzw. setzt die aktuelle Seekrate. Es gilt:
Parameter Bedeutung
devno Laufwerksnummer

0 = Laufwerk-A
1 = Laufwerk-B usw.
newrate

-1 = Seekrate nicht verändern
0 = Rate von 6ms
1 = Rate von 12ms
2 = Rate von 2ms
3 = Rate von 3ms


Hinweis: Ab MagiC 3 kann darüberhinaus per Floprate (-1, newrate) der Timeout für die Floppy eingestellt werden; ein Wert von 300 bedeutet 1,5 Sekunden (dies ist der Wert, der beim Booten per Default eingestellt ist).

Bei älteren ROM-TOS-Versionen muß man die vorher undokumentierten Systemvariablen verwenden:

TOS-Version Laufwerk A Laufwerk B
1.00 0x0a08 0xa0c
1.02 0x0a4e 0xa52


Zum portablen Setzen kann man die folgende Beispielroutine nutzen.
Ergebnis: Die Funktion liefert die vorherige Seekrate als Ergebnis.
Verfügbar: Die Funktion steht erst ab TOS 1.04 zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Flopwr   Floprd   Flopver   Flopfmt

4.13.4.1 Bindings für Floprate

C: #include

int16_t Floprate( int16_t devno, int16_t newrate );
Assembler:
move.w    newrate,-(sp) ; Offset 4
move.w    devno,-(sp)   ; Offset 2
move.w    #41,-(sp)     ; Offset 0
trap      #14           ; XBIOS aufrufen
addq.l    #6,sp         ; Stack korrigieren

4.13.4.2 Seekrate für alle TOS-Versionen

/* Portables Setzen der Floppy-Seekrate für alle TOS-Versionen
   (außer RAM-TOS 1.00).
   Parameter: genau wie bei XBIOS-Funktion "Floprate()" */

int16_t SeekRate ( int16_t devno, int16_t newrate )
{
  int32_t stack;
  int16_t version;
  OSHEADER *sys;

  /* Zeiger auf OS-Header holen */
  stack = Super (0L);
  sys = *((OSHEADER **) 0x4f2);
  version = sys->os_version;
  Super ((void *)stack);

  /* bei neuem TOS einfach "Floprate()" aufrufen */
  if ( version >= 0x0104 )
    return Floprate ( devno, newrate );
  else
  {
    /* sonst Zeiger auf interne GEMDOS-Variablen
       berechnen */
    int16_t *sk, merk;

    if ( version == 0x0102 )
      sk = (int16_t *) 0x0a4e;
    else
      sk = (int16_t *) 0x0a08;

    /* Laufwerk B: 2 int16_t dahinter */
    if ( devno ) sk = &(sk[2]);

    merk = *sk;
    /* Wert nur bei ungleich -1 eintragen */
    if ( newrate != -1 ) *sk = newrate;

    /* alten Wert immer zurückliefern */
    return merk;
  }
}

4.13.5 Floprd

Name: »Floppy read« - liest einzelne Sektoren von einer Platteneinheit.
Xbiosnummer: 8
Deklaration: int16_t Floprd( void *buf, int32_t filler, int16_t devno, int16_t sectno, int16_t trackno, int16_t sideno, int16_t count );
Beschreibung: Die XBIOS-Routine Floprd liest einen oder mehrere physikalische Sektoren von einer Diskette. Es gilt:
Parameter Bedeutung
   
buf Zeiger auf Speicherbereich für die eingelesenen Sektoren
filler unbenutzt
devno Laufwerk (0 = Laufwerk-A usw.)
sectno Startsektor (normal zwischen 1 und 9)
trackno Tracknummer (normal zwischen 0 und 79)
sideno Seite der Diskette (0 oder 1)
count Anzahl der zu lesenden Sektoren
Ergebnis: Die Funktion liefert als Ergebnis eine 0, wenn kein Fehler passiert ist, ansonsten einen Fehlercode.
Verfügbar: Alle TOS Versionen.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   DMAread   DMAwrite   Flopwr   Rwabs

4.13.5.1 Bindings für Floprd

C: #include

int16_t Floprd( void *buf, int32_t filler, int16_t devno, int16_t sectno, int16_t trackno, int16_t sideno, int16_t count );
Assembler:
move.w    count,-(sp)   ; Offset 18
move.w    sideno,-(sp)  ; Offset 16
move.w    trackno,-(sp) ; Offset 14
move.w    sectno,-(sp)  ; Offset 12
move.w    devno,-(sp)   ; Offset 10
move.l    filler,-(sp)  ; Offset  6
pea       buf           ; Offset  2
move.w    #8,-(sp)      ; Offset  0
trap      #14           ; XBIOS aufrufen
lea       $14(sp),sp    ; Stack korrigieren
GFA-Basic Fehler%=Xbios(8,L:buf%,L:filler%,W:devno%,W:sectno%,W:trackno%,W:sideno%,W:count%)

4.13.6 Flopver

Name: »Floppy verify« - überprüft Disketten.
Xbiosnummer: 19
Deklaration: int16_t Flopver( void *buf, int32_t filler, int16_t devno, int16_ sectno, int16_t trackno, int16_t sideno, int16_t count );
Beschreibung: Die XBIOS-Routine Flopver überprüft, ob eine Reihe von Sektoren fehlerfrei von einem Disketten-Laufwerk gelesen werden kann. Es gilt:
Parameter Bedeutung
   
buf Zeiger auf einen 1024 Byte großen Speicherbereich, in den die zu verifizierenden Sektoren eingelesen werden können.
filler unbenutzt (sollte auf 0 gesetzt werden)
devno Laufwerk
0 = Laufwerk-A
1 = Laufwerk-B
sectno Startsektor (normal zwischen 1 und 9)
trackno Tracknummer (normal zwischen 0 und 79)
sideno Seite der Diskette (0 oder 1)
count Anzahl der zu überprüfenden Sektoren


Hinweis: Nach dem Aufruf findet man im Parameter buf eine durch Null abgeschlossene Liste von 16-Bit Worten mit den Nummern der defekten Sektoren. Die Funktion vergleicht also keine Sektoren mit einem Speicherbereich; stattdessen liest sie die Sektoren in den immer selben Puffer ein. Dabei wird nur überprüft, ob die Sektoren korrekt gelesen werden können, oder ob beim Lesen Lesefehler auftreten.
Ergebnis: Die Funktion liefert als Ergebnis den Wert 0, wenn die im Parameter buf abgelegte Liste gültig ist und anderenfalls einen Wert ungleich Null.
Verfügbar: Alle TOS Versionen.
Gruppe: Laufwerksfunktionen
Querverweis: Binding

4.13.6.1 Bindings für Flopver

C: #include

int16_t Flopver( void *buf, int32_t filler, int16_t devno, int16_ sectno, int16_t trackno, int16_t sideno, int16_t count );
Assembler:
move.w    count,-(sp)    ; Offset 18
move.w    sideno,-(sp)   ; Offset 16
move.w    trackno,-(sp)  ; Offset 14
move.w    sectno,-(sp)   ; Offset 12
move.w    devno,-(sp)    ; Offset 10
move.l    filler,-(sp)   ; Offset  6
pea       buf            ; Offset  2
move.w    #19,-(sp)      ; Offset  0
trap      #14            ; XBIOS aufrufen
lea       $14(sp),sp     ; Stack korrigieren
GFA-Basic Fehler%=Xbios(19,L:buf%,L:filler%,W:devno%,W:sectno,W:trackno%,W:sideno%,W:count%)

4.13.7 Flopwr

Name: »Floppy write« - schreibt einzelne Sektoren auf eine Platteneinheit.
Xbiosnummer: 9
Deklaration: int16_t Flopwr( VOID *buf, int32_t filler, int16_t devno, int16_t sectno, int16_t trackno, int16_t sideno, int16_t count );
Beschreibung: Die XBIOS-Routine Flopwr schreibt einen oder mehrere physikalische Sektoren auf eine Diskette. Es gilt:
Parameter Bedeutung
   
buf Zeiger auf Speicherbereich mit den zu schreibenden Sektoren
filler unbenutzt
devno Laufwerk (0=Laufwerk-A, 1=Laufwerk-B)
sectno Startsektor (normal zwischen 1 und 9)
trackno Tracknummer (normal zwischen 0 und 79)
sideno Seite der Diskette (0 oder 1)
count Anzahl der zu schreibenden Sektoren
Ergebnis: Die Funktion liefert als Ergebnis eine 0, wenn kein Fehler passiert ist, ansonsten einen Fehlercode.
Verfügbar: Alle TOS Versionen.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   DMAread   DMAwrite   Floprd

4.13.7.1 Bindings für Flopwr

C: #include

int16_t Flopwr( VOID *buf, int32_t filler, int16_t devno, int16_t sectno, int16_t trackno, int16_t sideno, int16_t count );
Assembler:
move.w    count,-(sp)    ; Offset 18
move.w    sideno,-(sp)   ; Offset 16
move.w    trackno,-(sp)  ; Offset 14
move.w    sectno,-(sp)   ; Offset 12
move.w    devno,-(sp)    ; Offset 10
move.l    filler,-(sp)   ; Offset  6
pea       buf            ; Offset  2
move.w    #9,-(sp)       ; Offset  0
trap      #14            ; XBIOS aufrufen
lea       $14(sp),sp     ; Stack korrigieren
GFA-Basic Fehler%=Xbios(9,L:buf%,L:filler%,W:devno%,W:sectno%,W:trackno%,W:sideno,W:count%)

4.13.8 Metaclose

Name: »Metaclose« - gibt ein MetaDOS-Gerät wieder frei.
Xbiosnummer: 50
Deklaration: int32_t Metaclose( int16_t drive );
Beschreibung: Die Funktion gibt das Laufwerk drive wieder frei.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metaopen

4.13.8.1 Bindings für Metaclose

C: int32_t Metaclose( int16_t drive );
Assembler:
move.w    drive,-(sp)  ; Offset 2
move.w    #50,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

4.13.9 Metadiscinfo

Name: »Metadiscinfo« - ermittelt aktuelle Status-Informationen.
Xbiosnummer: 63
Deklaration: int32_t Metadiscinfo( int16_t drive, CD_DISC_INFO *p );
Beschreibung: Die Funktion ermittelt Informationen über den Status eines MetaDOS-Gerätes. Es gilt:

Parameter Bedeutung
drive gewünschtes Laufwerk
p Adresse des aufnehmenden Puffers


Hinweis: Die Positionsangaben innerhalb der Struktur sind im BCD-MSF-Format codiert. Die Komponente index wird von alten BOS-Treibern nicht gesetzt, und die Komponente disctype ist bei SCSI-CD-ROMs nicht gesetzt.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metastatus

4.13.9.1 Bindings für Metadiscinfo

C: int32_t Metadiscinfo( int16_t drive, CD_DISC_INFO *p );
Assembler:
pea       p            ; Offset 4
move.w    drive,-(sp)  ; Offset 2
move.w    #63,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

4.13.10 Metagettoc

Name: »Metagettoc« - liefert das Inhaltsverzeichnis eines Gerätes.
Xbiosnummer: 62
Deklaration: int32_t Metagettoc( int16_t drive, int16_t flag, CD_TOC_ENTRY *buffer );
Beschreibung: Die Funktion liefert das Inhaltsverzeichnis eines Laufwerks zurück. Es gilt:

Parameter Bedeutung
drive gewünschtes Laufwerk
flag reserviert für CDAR504
buffer Puffer zur Aufnahme des Verzeichnisses


Hinweis: Der aufnehmende Puffer sollte Platz für 128 Einträge bieten. Jeder Eintrag besteht aus einer Tracknummer und MSF-Adresse (jeweils im BCD-Format). Für die Tracknummer gilt dabei:
0 = Record hat keine Bedeutung
0x01...0x99 = Tracknummer in BCD-Codierung
0xa0 = erster Track bei programmierter Reihenfolge
0xa2 = Ende der CD.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metaread   Metawrite

4.13.10.1 Bindings für Metagettoc

C: int32_t Metagettoc( int16_t drive, int16_t flag, CD_TOC_ENTRY *buffer );
Assembler:
pea       buffer       ; Offset 6
move.w    flag,-(sp)   ; Offset 4
move.w    drive,-(sp)  ; Offset 2
move.w    #62,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

4.13.11 Metainit

Name: »Metainit« - Informationen über die installierte Version von MetaDOS ermitteln.
Xbiosnummer: 48
Deklaration: void Metainit( META_INFO_1 *buffer );
Beschreibung: Die XBIOS-Routine Metainit ermittelt Informationen über die aktuell installierte Version von MetaDOS, und der ihr bekannten Geräte.

Es bietet sich folgendes Verfahren an:
  • Inhalt der META_INFO_1 Struktur komplett löschen
  • Funktion Metainit aufrufen
  • Testen, ob die Komponente version noch einen Nullzeiger enthält (dann ist kein MetaDOS installiert).
Ergebnis: Die Funktion liefert kein direktes Ergebnis.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding

4.13.11.1 Bindings für Metainit

C: void Metainit( META_INFO_1 *buffer );
Assembler:
pea       buffer       ; Offset 2
move.w    #48,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

4.13.12 Metaioctl

Name: »Metaioctl« - schickt GEMDOS-Opcodes an ein MetaDOS Gerät.
Xbiosnummer: 55
Deklaration: int32_t Metaioctl( int16_t drive, int32_t magic, int16_t opcode, void *buffer );
Beschreibung: Die Funktion erlaubt es, Opcodes der GEMDOS-Routinen Dcntl bzw. Fcntl an ein MetaDOS Gerät abzusetzen. Es gilt:

Parameter Bedeutung
drive gewünschtes Laufwerk
magic muss Wert 'FCTL' besitzen
opcode abzusetzender Opcode
buffer abhängig vom Opcode


Hinweis: Die Liste der CD-ROM Kommandos ist eine Aufstellung aller bekannten Opcodes, die bei der Arbeit mit CD-ROMs anfallen können.
Ergebnis: Die Funktion liefert im Fehlerfall einen der folgenden Werte zurück:
EINVFN: der angegebene Opcode wird nicht unterstützt.
EUNCMD: die Funktion selbst (!) wird nicht unterstützt.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Dcntl   Fcntl

4.13.12.1 Bindings für Metaioctl

C: int32_t Metaioctl( int16_t drive, int32_t magic, int16_t opcode, void *buffer );
Assembler:
pea       buffer       ; Offset 10
move.w    opcode,-(sp) ; Offset  8
move.l    magic,-(sp)  ; Offset  4
move.w    drive,-(sp)  ; Offset  2
move.w    #55,-(sp)    ; Offset  0
trap      #14          ; XBIOS aufrufen
lea       $E(sp),sp    ; Stack korrigieren

4.13.13 Metaopen

Name: »Metaopen« - initialisiert ein MetaDOS-Gerät.
Xbiosnummer: 49
Deklaration: int32_t Metaopen( int16_t drive, META_DRVINFO *buffer );
Beschreibung: Die Funktion initialisiert ein MetaDOS-Gerät. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
buffer Puffer zur Aufnahme des Namens des Treibers


Hinweis: Falls der Treibername mit 'CD' beginnt, darf man davon ausgehen, daß es sich um einen CD-ROM-Treiber handelt.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert 0 wenn alles OK oder eine negative Fehlernummer.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metaclose

4.13.13.1 Bindings für Metaopen

C: int32_t Metaopen( int16_t drive, META_DRVINFO *buffer );
Assembler:
pea       buffer       ; Offset 4
move.w    drive,-(sp)  ; Offset 2
move.w    #49,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

4.13.14 Metaread

Name: »Metaread« - liest Daten von einem MetaDOS-Gerät.
Xbiosnummer: 51
Deklaration: int32_t Metaread( int16_t drive, void *buffer, int32_t blockno, int16_t count );
Beschreibung: Die Funktion liest Daten von einem MetaDOS-Gerät. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
buffer Puffer zur Aufnahme der Daten
blockno Nummer des Startblocks
count Anzahl der zu lesenden Blöcke


Hinweis: Die Blockgröße beträgt bei CD-ROMs 2048 Bytes; dies kann jedoch leider nicht gezielt abgefragt werden. Aufgrund einer Begrenzung in Atari's BOS-Treibern können maximal 63 Blöcke an einem Stück gelesen werden.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metawrite

4.13.14.1 Bindings für Metaread

C: int32_t Metaread( int16_t drive, void *buffer, int32_t blockno, int16_t count );
Assembler:
move.w    count,-(sp)   ; Offset 10
move.l    blockno,-(sp) ; Offset  8
pea       buffer        ; Offset  4
move.w    drive,-(sp)   ; Offset  2
move.w    #51,-(sp)     ; Offset  0
trap      #14           ; XBIOS aufrufen
lea       $E(sp),sp     ; Stack korrigieren

4.13.15 Metasetsongtime

Name: »Metasetsongtime« - startet eine Audio-Wiedergabe.
Xbiosnummer: 61
Binding: Bindings für Metasetsongtime
Beschreibung: Die Funktion startet eine Audio-Wiedergabe. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
repeat Repeat
0 = ohne Wiederholung
1 = mit Wiederholung
starttime BCD-Anfangszeit in MSF-Codierung
endtime BCD-Endzeit in MSF-Codierung


Hinweis: Der Repeat-Modus wird anscheinend nur von CDARGEN.BOS und auch nur für das Atari-CDAR504 unterstützt.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metastartaudio   Metastopaudio

4.13.15.1 Bindings für Metasetsongtime

C: int32_t Metasetsongtime( int16_t drive, int16_t repeat, int32_t starttime, int32_t endtime );
Assembler:
move.l    endtime,-(sp)    ; Offset 10
move.l    starttime,-(sp)  ; Offset  6
move.w    repeat           ; Offset  4
move.w    drive            ; Offset  2
move.w    #61,-(sp)        ; Offset  0
trap      #14              ; XBIOS aufrufen
lea       $E(sp),sp        ; Stack korrigieren

4.13.16 Metastartaudio

Name: »Metastartaudio« - startet eine Audio-Wiedergabe.
Xbiosnummer: 59
Binding: int32_t Metastartaudio( int16_t drive, int16_t flag, uint8_t *bytearray);
Beschreibung: Die Funktion startet eine Audio-Wiedergabe. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
flag Modus
bytearray abhängig vom Parameter flag


Hinweis: Auf SCSI-Geräten existiert nur ein Modus (flag = 0). In diesem Fall übergibt man in bytearray[0] die Anzahl der Lieder, und in bytearray[1] die Nummer des ersten Liedes.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metasetsongtime   Metastopaudio

4.13.16.1 Bindings für Metastartaudio

C: int32_t Metastartaudio( int16_t drive, int16_t flag, uint8_t *bytearray);
Assembler:
pea       bytearray    ; Offset 6
move.w    flag,-(sp)   ; Offset 4
move.w    drive,-(sp)  ; Offset 2
move.w    #59,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

4.13.17 Metastatus

Name: »Metastatus« - ermittelt den Status eines MetaDOS Gerätes.
Xbiosnummer: 54
Deklaration: int32_t Metastatus( int16_t drive, void *buffer );
Beschreibung: Die Funktion ermittelt den Status eines MetaDOS Gerätes. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
buffer abhängig von der Implementierung des BOS-Treibers


Achtung: Diese Funktion ist optional. Sie steht nur bei installiertem MetaDOS zur Verfügung.
Ergebnis: Die Funktion liefert als Ergebnis einen 32-Bit Wert zurück, der wie folgt codiert ist:
High-Word:

0x0000 = alles ok
0xffff = Fehler aufgetreten
Low-Word :

Bit-15 (Fehler)
Bit-07 (Timeout)
Bit-02 (Medienwechsel)
Bit-01 (Busy)


Alle anderen Bits des Low-Words sind z.Zt. reserviert.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metadiscinfo

4.13.17.1 Bindings für Metastatus

C: int32_t Metastatus( int16_t drive, void *buffer );
Assembler:
pea       buffer       ; Offset 4
move.w    drive,-(sp)  ; Offset 2
move.w    #54,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

4.13.18 Metastopaudio

Name: »Metastopaudio« - beendet eine Audio-Wiedergabe.
Xbiosnummer: 60
Deklaration: int32_t Metastopaudio( int16_t drive );
Beschreibung: Die Funktion beendet die Audio-Wiedergabe für das Laufwerk drive.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metastartaudio   Metasetsongtime

4.13.18.1 Bindings für Metastopaudio

C: int32_t Metastopaudio( int16_t drive );
Assembler:
move.w    drive,-(sp)  ; Offset 2
move.w    #60,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

4.13.19 Metawrite

Name: »Metawrite« - schreibt Daten auf ein MetaDOS-Gerät.
Xbiosnummer: 52
Deklaration: int32_t Metawrite( int16_t drive, void *buffer, int32_t blockno, int16_t count );
Beschreibung: Die Funktion schreibt Daten auf ein MetaDOS-Gerät. Es gilt:
Parameter Bedeutung
   
drive gewünschtes Laufwerk
buffer Adresse des Datenpuffers
blockno Nummer des Startblocks
count Anzahl der zu schreibenden Blöcke


Hinweis: Bei einem CD-ROM hat diese Funktion natürlich keine Wirkung.
Ergebnis: Die Funktion liefert als Ergebnis einen Wert vom Typ int32_t zurück.
Verfügbar: Diese Funktion steht nur bei installiertem MetaDOS zur Verfügung.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Metaread

4.13.19.1 Bindings für Metawrite

C: int32_t Metawrite( int16_t drive, void *buffer, int32_t blockno, int16_t count );
Assembler:
move.w    count,-(sp)   ; Offset 10
move.l    blockno,-(sp) ; Offset  8
pea       buffer        ; Offset  4
move.w    drive,-(sp)   ; Offset  2
move.w    #52,-(sp)     ; Offset  0
trap      #14           ; XBIOS aufrufen
lea       $E(sp),sp     ; Stack korrigieren

4.13.20 Protobt

Name: »prototype boot sector« - Standard-Boot-Sektor.
Xbiosnummer: 18
Deklaration: void Protobt( void *buf, int32_t serialno, int16_t disktype, int16_t execflag );
Beschreibung: Die XBIOS-Routine Protobt legt einen Boot-Sektor auf einer Diskette an. Das Argument buf verweist auf einen 512 Byte großen Puffer mit dem Inhalt des Boot-Sektors. Der Parameter serialno dient dazu, eine Seriennummer im Bootsektor abzuspeichern. Wenn die Variable serialno größer als 0x01000000 ist, dann wird eine Zufallszahl abgelegt. Mit disktype wird eine der folgenden Diskettenarten ausgewählt:
disktype Bedeutung
   
  -1 nicht verändern
   0 40 Spuren, einseitig    (180 Kbyte)
   1 40 Spuren, doppelseitig (360 Kbyte)
   2 80 Spuren, einseitig    (360 Kbyte)
   3 80 Spuren, doppelseitig (720 Kbyte)
   4 High-Density (1,44 Mbyte)
Wird nur unterstützt, wenn im Cookie _FDC der Wert für HD-Unterstützung eingetragen ist.
   5 Extra-High-Density (2,88 Mbyte)
Wird nur unterstützt, wenn im Cookie _FDC der Wert für ED-Unterstützung eingetragen ist.


Der Parameter execflag legt schließlich fest, ob die Informationen im Boot-Sektor als Programm ausgeführt werden können. Es gilt:
execflag Bedeutung
   
-1 Bootsektor nicht verändern
 0 Bootsektor nicht ausführen
 1 Bootsektor ausführbar


Hinweis: Damit Disketten auch auf MSDOS-Systemen gelesen werden können, müssen in die ersten 3 Bytes des Bootsektors die Werte 0xE9, 0x00 und 0x4E oder 0xEB, 0x34 und 0x90 eingetragen werden; auf diese Art und Weise behandelte Disketten sind unter TOS dann allerdings nicht mehr bootbar.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS Versionen.
Gruppe: Laufwerksfunktionen
Querverweis: Binding   Flopfmt

4.13.20.1 Bindings für Protobt

C: #include

void Protobt( void *buf, int32_t serialno, int16_t disktype, int16_t execflag );
Assembler:
move.w    execflag,-(sp)  ; Offset 12
move.w    disktype,-(sp)  ; Offset 10
move.l    serialno,-(sp)  ; Offset  6
pea       buf             ; Offset  2
move.w    #18,-(sp)       ; Offset  0
trap      #14             ; XBIOS aufrufen
lea       $E(sp),sp       ; Stack korrigieren
GFA-Basic Fehler%=Xbios(18,L:buf%,L:serialno%,W:disktype%,W:execflag%)

HomeXBIOSInterruptfunktionenOverScan-XBIOS-Erweiterungen