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 MagiCTOSAb 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: BIOSGEMDOSXFS-Konzept in MagiC