home *** CD-ROM | disk | FTP | other *** search
- /* ------------------------------------------------- */
- /* DRIVER.H */
- /* (c) 1991 Elmar Warken & DMV-Verlag */
- /* Die Datei stellt die Interruptroutine für Geräte- */
- /* treiber bereit, hier auf die Beantwortung des */
- /* Initialisierungsbefehls spezialisiert: */
- /* Die Funktion go(), die das diese Datei einbinden- */
- /* de Programm statt main() haben muß, wird aufgeru- */
- /* fen, dann wird DOS veranlaßt, den Treiber wieder */
- /* aus dem Speicher zu entfernen. */
- /* ------------------------------------------------- */
-
- extern struct {
- /* Struktur des Request-Headers für Gerätetreiber. */
- /* Zur Gerätetreiberprogrammierung siehe DOS Extra 5 */
- char x[3];
- int R; /* Rückgabewert u. Fehlercode */
- char y[9];
- int O, S; /* Seg:Offs der Adresse, ab der der */
- /* Speicher freigegeben werden soll */
- char far *l; /* In diesem speziellen Fall Zeiger */
- /* auf "=" in der Config-Datei */
- } far *p;
-
- void far go(); /* Forward */
-
- void far M()
- {
- /* Sichern der Register AX,BX,CX,DX,DI,SI,DS und */
- /* ES. Ab 286er empfehlenswert: */
- /* asm pusha; */
- /* im Menü Compiler/Codegeneration dann 80286-C */
- /* Codeerzeugung erlauben */
- asm dd 52515350h, 1e065657h;
-
- /* push cs; pop ds; Datensegment setzen */
- asm dw 1f0eh;
-
- /* Aufruf des eigentlichen Programms */
- go();
-
- /* Rückgabe an DOS: */
- /* keine Installation/Speicher freigeben */
- p -> R = 256; p -> O = 0; p -> S = _CS;
-
- /* Zurückholen der Register vom Stack */
- asm dd 5f5e071fh,585b595ah
- /* besser ab 80286 : asm popa; */
- }
-
- /* ------------------------------------------------- */
- /* Ende von DRIVER.H */
-