•  Back 
  •  MagiC 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File11.9  Der Hintergrund-DMA von MagiC                                TOS

Ab MagiC 3 ist das gesamte DOS einschließlich der Zugriffe auf DOS 
Dateisysteme reentrant und läuft im Hintergrund ab. So ist es möglich, 
auf Laufwerk A Dateien zu bearbeiten, ohne den Rechner bei den 
Diskettenzugriffen merklich zu bremsen. Voraussetzung hierfür sind 
jedoch Disketten- und Festplattenroutinen, die im Hintergrund 
arbeiten.

Damit der Plattentreiber diese Funktionen nicht zur Verfügung zu 
stellen braucht, enthält das BIOS von MagiC alle notwendigen 
Funktionen. Über den MagX-Cookie (Komponente hddrv_functions) erhält 
man Zugriff auf die folgende Struktur, die Zeiger auf wichtige 
Routinen des Hintergrund-DMAs enthält:

typedef struct
{
    LONG dma_begin ( VOID);
    LONG dma_end   ( VOID );
    LONG dma_wait  ( d0 = LONG ticks_200hz );
    LONG ncr_begin ( VOID );
    LONG ncr_end   ( VOID );
    LONG ncr_wait  ( d0 = LONG ticks_200hz );
} HDFUNCS;

Hinweis: Direkt vor der Struktur (2 Bytes vorher) liegt ein WORD, das 
die Tabellenlänge in LONGs angibt (in diesem Fall 6). Alle 6 Zeiger 
liegen im Systemvariablenbereich und dürfen notfalls verändert werden. 
Die internen Funktionen für die Floppy springen ebenfalls über die 6 
Zeiger. Wichtig: Der Zeiger hddrv_functions im MagX-Cookie darf nicht 
verändert werden.

Zur Bootzeit ist das präemptive Multitasking abgeschaltet (eigentlich 
ist auch das Multitasking abgeschaltet), aber die Routinen 
funktionieren auch vor Installation des AES, wobei die Warteroutinen 
dann ein 'busy waiting' machen (wie auch beim Abschalten des 
präemptiven Multitasking), und die Semaphorenroutinen machen (bis auf 
das Setzen und Löschen von flock) einfach nichts.

Dieser Hypertext enthält Auszüge aus dem BIOS von MagiC, die 
demonstieren sollen, wie das ganze funktioniert; dazu einige Worte:

   ∙ die Routinen acsi_xxx sind gleichzeitig für ACSI und FDC, d.h. 
     dma_begin setzt flock, dma_end löscht es wieder.

   ∙ die Routinen ncr_xxx sind für TT-SCSI.

   ∙ die Funktionen xxx_begin reservieren die jeweilige Semaphore. Für 
     die Rückgabwerte gilt:

      Wert  Bedeutung 
      -1    Semaphore ist bereits im Besitz 
       0    Ok 

     Die Routinen verändern mit Ausnahme von d0 keine Register.

   ∙ die Funktionen xxx_end geben die Semaphore wieder frei; auch hier 
     wird kein Register verändert.

   ∙ dma_wait wartet auf einen Interrupt des ACSI-DMA (bzw. FDC) 
     Controllers; ncr_wait ist für den SCSI-Bus des Atari-TT. Für die 
     Rückgabewerte gilt:

      Wert  Bedeutung 
      -2    Busfehler (Interrupt vom TT-SCSI) 
      -1    Timeout 
       0    Ok 

Querverweis: BIOS   GEMDOS   XFS-Konzept in MagiC