home *** CD-ROM | disk | FTP | other *** search
- ─────────────────────────────────────────────────────────────────────────────
- Dokumentation zur Datei: INT24.INC
-
- ─────────────────────────────────────────────────────────────────────────────
-
- INT24.INC - Routinen zur Behandlung des Interrupt 24h
- (für den Assembler A86)
-
- (c) Bernd Schemmer 1990 - 1992
- Letzter Update: 02.02.1992
-
- ■ Variablen des neuen Int-24h-Handlers:
- ---------------------------------------
- Int24ErrorSelect - Byte, enthält die Art des Fehlers
- (1 = Char-Device-Fehler,
- 2 = Block-Device-Fehler,
- 0 = kein Fehler)
-
- Int24Error - Byte, enthält die Fehlernummer des Int 24h
- (aus dem Register AH)
-
- Int24DeviceError - Byte, enthält die Fehlernummer des Treibers
- (aus dem Lowbyte des Registers DI)
-
- Int24DriveNumber - Byte, enthält die Laufwerksnummer
- (aus dem Register AL)
-
- Alle Variablen sollten nach einem Hardware-Fehler auf 0 zurück
- gesetzt werden.
-
-
- ■ Routinen:
- -----------
- SetInt24h - Setzt den Interrupt 24h auf den neuen Handler
- GetSetInt24hRoutine - Setzen oder Ermitteln der Routine, die vom
- neuen Handler für den Interrupt 24h nach der
- Fehlerbehandlung ausgeführt werden soll.
- ResetInt24hVars - Zurücksetzen der Variablen des neuen Handlers
-
- (Int24h - neue Routine für den Interrupt 24h)
-
-
- ----------------------------
- ResetInt24hErrorVars
-
- Funktion: Macro zum Zurücksetzen aller Fehlervariablen des neuen
- Handlers für den Interrupt 24h
-
- Aufruf: ResetInt24hErrorVars
-
- Ausgabe: AL = Fehlernummer des Treibers oder 0
- ZF = 1 ->> kein Hardware-Fehler aufgetreten
- ZF = 0 ->> Hardware-Fehler aufgetreten
-
- ----------------------------
- ResetInt24hVars
-
- Funktion: Zurücksetzen der Variablen des Handlers
-
- Ausgabe: AL = Fehlernummer des Treibers oder 0
- ZF = 1 ->> kein Hardware-Fehler aufgetreten
- ZF = 0 ->> Hardware-Fehler aufgetreten
-
- ----------------------------
- SetInt24h
-
- Funktion: Setzt den neuen Handler für den Interrupt 24h ein.
- (Voraussetzung für die Benutzung aller Variablen
- und Routinen dieser Datei!)
-
- Ausgabe: DX:AX = Adresse der alten Routine für den Interrupt 24h
- Dies Adresse wird normalerweise nicht gebraucht,
- da der Interrupt von DOS vor dem Programmende
- automatisch zurückgesetzt wird - also nicht vom
- Programm zurückgesetzt werden muß.
-
- ----------------------------
- Int24h
-
- Funktion: Neuer Handler für den Interrupt 24h
-
- Ausgabe: Die Routine führt, falls ein Laufwerksfehler auftrat,
- für alle Laufwerke eine Reset durch.
- Die Fehlervariablen werden besetzt.
- Danach wird eine eventuell (durch GetSetInt24hRoutine)
- installierte Benutzer-Routine per CALL FAR aufgerufen.
- Außerdem wird der Code für 'Funktion abbrechen' an die
- den Fehler auslösende Routine zurückgegeben (in AL).
-
- ----------------------------
- GetSetInt24hRoutine
-
- Funktion: Ermitteln oder Setzen der Adresse der Routine, die
- nach der Fehlerbehandlung vom neuen Handler ausgeführt
- werden soll.
-
- Eingabe: AL = 0 ->> Ermitteln der Adresse der Routine
- Ausgabe: CF = 0 ->> DX:BX = Adresse der Routine
- CF = 1 ->> keine Routine installiert
-
- AL = 1 ->> Setzen der Adresse der Routine
- Eingabe: DX:BX = Adresse der neuen Routine
-
- AL = 2 ->> Löschen der Zuordnung
- (->> Handler soll keine Routine aufrufen)
-
- Ausgabe: CF = 1 und AL = 0FFh ->> Falsche Funktionsnummer angegeben
- oder bei SET
- Segment der angegebenen Routine ist 0
-
- Bes.: Für die zu installierende Routine gilt:
- Die Routine wird über CALL FAR aufgerufen (muß also mit
- RETF enden falls sie zurückkehren soll).
- Die Fehlervariablen des neuen Handler sind schon gesetzt.
- Die Routine muß alle Arbeits-Register retten, falls sie
- über einen RETF-Befehl endet.
- Der Inhalt der Register (bes. DS, ES und SS) ist nicht
- vorhersehbar.
- Der Stack sieht bei Eintritt in die Routine folgendermaßen
- aus:
-
- ├─────────────────────────────────────┤
- SP ---> │ IP │\
- ├─────────────────────────────────────┤ Ret-Adresse des
- │ CS │/ CALL-Far-Aufrufs
- ├─────────────────────────────────────┤
- │ IP │\
- ├─────────────────────────────────────┤ \
- │ CS │ Ret-Adresse und Flags
- ├─────────────────────────────────────┤ des Int 24h-Aufrufs
- │ Flags │/
- ├─────────────────────────────────────┤
- │ IP │\
- ├─────────────────────────────────────┤ Ret-Adresse und Flags
- │ CS │ des Int 21h-Aufrufs der
- ├─────────────────────────────────────┤ den Fehler auslöste
- │ Flags │/
- ├─────────────────────────────────────┤
-
- Die Routine muß Rekursion durch mehrmaligen Aufruf
- verhindern.
- Im Normalfall sollte die Routine mit einem RETF-Befehl
- in den neuen Hander zurückkehren.
-
-