home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / doc / int24.doc < prev    next >
Text File  |  1992-02-03  |  6KB  |  145 lines

  1.   ─────────────────────────────────────────────────────────────────────────────
  2.   Dokumentation zur Datei: INT24.INC
  3.  
  4.   ─────────────────────────────────────────────────────────────────────────────
  5.    
  6.     INT24.INC    - Routinen zur Behandlung des Interrupt 24h
  7.                    (für den Assembler A86)
  8.    
  9.                    (c) Bernd Schemmer 1990 - 1992
  10.                    Letzter Update: 02.02.1992
  11.    
  12.     ■ Variablen des neuen Int-24h-Handlers:
  13.     ---------------------------------------
  14.     Int24ErrorSelect      - Byte, enthält die Art des Fehlers
  15.                             (1 = Char-Device-Fehler,
  16.                              2 = Block-Device-Fehler,
  17.                              0 = kein Fehler)
  18.    
  19.     Int24Error            - Byte, enthält die Fehlernummer des Int 24h
  20.                             (aus dem Register AH)
  21.    
  22.     Int24DeviceError      - Byte, enthält die Fehlernummer des Treibers
  23.                             (aus dem Lowbyte des Registers DI)
  24.    
  25.     Int24DriveNumber      - Byte, enthält die Laufwerksnummer
  26.                             (aus dem Register AL)
  27.    
  28.     Alle Variablen sollten nach einem Hardware-Fehler auf 0 zurück
  29.     gesetzt werden.
  30.    
  31.    
  32.     ■ Routinen:
  33.     -----------
  34.     SetInt24h             - Setzt den Interrupt 24h auf den neuen Handler
  35.     GetSetInt24hRoutine   - Setzen oder Ermitteln der Routine, die vom
  36.                             neuen Handler für den Interrupt 24h nach der
  37.                             Fehlerbehandlung ausgeführt werden soll.
  38.     ResetInt24hVars       - Zurücksetzen der Variablen des neuen Handlers
  39.    
  40.     (Int24h               - neue Routine für den Interrupt 24h)
  41.    
  42.    
  43.     ----------------------------
  44.     ResetInt24hErrorVars
  45.    
  46.     Funktion:  Macro zum Zurücksetzen aller Fehlervariablen des neuen
  47.                Handlers für den Interrupt 24h
  48.    
  49.     Aufruf:    ResetInt24hErrorVars
  50.    
  51.     Ausgabe:   AL = Fehlernummer des Treibers oder 0
  52.                ZF = 1 ->> kein Hardware-Fehler aufgetreten
  53.                ZF = 0 ->> Hardware-Fehler aufgetreten
  54.    
  55.     ----------------------------
  56.     ResetInt24hVars
  57.    
  58.     Funktion:  Zurücksetzen der Variablen des Handlers
  59.    
  60.     Ausgabe:   AL = Fehlernummer des Treibers oder 0
  61.                ZF = 1 ->> kein Hardware-Fehler aufgetreten
  62.                ZF = 0 ->> Hardware-Fehler aufgetreten
  63.    
  64.     ----------------------------
  65.     SetInt24h
  66.    
  67.     Funktion:  Setzt den neuen Handler für den Interrupt 24h ein.
  68.                (Voraussetzung für die Benutzung aller Variablen
  69.                 und Routinen dieser Datei!)
  70.    
  71.     Ausgabe:   DX:AX = Adresse der alten Routine für den Interrupt 24h
  72.                        Dies Adresse wird normalerweise nicht gebraucht,
  73.                        da der Interrupt von DOS vor dem Programmende
  74.                        automatisch zurückgesetzt wird - also nicht vom
  75.                        Programm zurückgesetzt werden muß.
  76.    
  77.     ----------------------------
  78.     Int24h
  79.    
  80.     Funktion:  Neuer Handler für den Interrupt 24h
  81.    
  82.     Ausgabe:   Die Routine führt, falls ein Laufwerksfehler auftrat,
  83.                für alle Laufwerke eine Reset durch.
  84.                Die Fehlervariablen werden besetzt.
  85.                Danach wird eine eventuell (durch GetSetInt24hRoutine)
  86.                installierte Benutzer-Routine per CALL FAR aufgerufen.
  87.                Außerdem wird der Code für 'Funktion abbrechen' an die
  88.                den Fehler auslösende Routine zurückgegeben (in AL).
  89.    
  90.     ----------------------------
  91.     GetSetInt24hRoutine
  92.    
  93.     Funktion:  Ermitteln oder Setzen der Adresse der Routine, die
  94.                nach der Fehlerbehandlung vom neuen Handler ausgeführt
  95.                werden soll.
  96.    
  97.     Eingabe:   AL = 0 ->> Ermitteln der Adresse der Routine
  98.                           Ausgabe: CF = 0 ->> DX:BX = Adresse der Routine
  99.                                    CF = 1 ->> keine Routine installiert
  100.    
  101.                AL = 1 ->> Setzen der Adresse der Routine
  102.                           Eingabe: DX:BX = Adresse der neuen Routine
  103.    
  104.                AL = 2 ->> Löschen der Zuordnung
  105.                           (->> Handler soll keine Routine aufrufen)
  106.    
  107.     Ausgabe:   CF = 1 und AL = 0FFh ->> Falsche Funktionsnummer angegeben
  108.                                         oder bei SET
  109.                                         Segment der angegebenen Routine ist 0
  110.    
  111.     Bes.:      Für die zu installierende Routine gilt:
  112.                Die Routine wird über CALL FAR aufgerufen (muß also mit
  113.                RETF enden falls sie zurückkehren soll).
  114.                Die Fehlervariablen des neuen Handler sind schon gesetzt.
  115.                Die Routine muß alle Arbeits-Register retten, falls sie
  116.                über einen RETF-Befehl endet.
  117.                Der Inhalt der Register (bes. DS, ES und SS) ist nicht
  118.                vorhersehbar.
  119.                Der Stack sieht  bei Eintritt in die Routine folgendermaßen
  120.                aus:
  121.    
  122.               ├─────────────────────────────────────┤
  123.       SP ---> │          IP                         │\
  124.               ├─────────────────────────────────────┤  Ret-Adresse des 
  125.               │          CS                         │/ CALL-Far-Aufrufs
  126.               ├─────────────────────────────────────┤
  127.               │          IP                         │\
  128.               ├─────────────────────────────────────┤ \
  129.               │          CS                         │  Ret-Adresse und Flags
  130.               ├─────────────────────────────────────┤  des Int 24h-Aufrufs
  131.               │          Flags                      │/
  132.               ├─────────────────────────────────────┤
  133.               │          IP                         │\
  134.               ├─────────────────────────────────────┤  Ret-Adresse und Flags
  135.               │          CS                         │  des Int 21h-Aufrufs der
  136.               ├─────────────────────────────────────┤  den Fehler auslöste
  137.               │          Flags                      │/
  138.               ├─────────────────────────────────────┤
  139.    
  140.                Die Routine muß Rekursion durch mehrmaligen Aufruf
  141.                verhindern.
  142.                Im Normalfall sollte die Routine mit einem RETF-Befehl
  143.                in den neuen Hander zurückkehren.
  144.    
  145.