Up ] Docs Home ]

Values critical error handler is called with

Back ] Next ]

Data:
AH = type and processing flags (see #02544)
AL = drive number if AH bit 7 clear
BP:SI device driver header (see #01646 at INT 21/AH=52h) (BP:[SI+4] bit 15 set if character device)
DI = low byte contains error code if AH bit 7 set (see #02545)
STACK DWORD   return address for INT 24 call  
  WORD   flags pushed by INT 24
  WORD   original AX on entry to INT 21
  WORD   BX
  WORD   CX
  WORD   DX
  WORD   SI
  WORD   DI
  WORD   BP
  WORD   DS
  WORD   ES
  DWORD   return address for INT 21 call
  WORD   flags pushed by INT 21
Return:
AL = action code (see #02546)
SS - preserved
SP - preserved
DS - preserved
ES - preserved
BX - preserved
CX - preserved
DX - preserved
Notes: The only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h.
If the handler returns to the application by popping the stack, DOS will be in an unstable state until the first call with AH > 0Ch.
For DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network critical errors.
If IGNORE specified but not allowed, it is turned into FAIL.
If RETRY specified but not allowed, it is turned into FAIL.
If FAIL specified but not allowed, it is turned into ABORT.
(DOS 3.0+) if a critical error occurs inside the critical error handler, the DOS call is automatically failed (AL set to 03h and the INT 24 call skipped).
The initial critical error handler is located in the kernel and always results in FAIL. However, by default it is replaced by the critical error handler in the command interpreter when it loads. This can be suppressed (e.g. for BBS systems) by loading the primary DOS 3.00+ COMMAND.COM shell with the undocumented option /F 'Fail'. This syntax is also supported with PTS/DOS 6.51+, S/DOS 1.0+, and DR-OpenDOS 7.02+ (1997-11-13) COMMAND.COM, as well as 4DOS.COM/NDOS.COM. OpenDOS 7.01+ COMMAND.COM (1997-03-21) introduced this under /N, which is still supported by newer releases (although it has a slightly different meaning now).
Bugs:  DR DOS COMMAND.COM before 1998-05-07 caused incorrect error messages to occur if the error code had a non-zero MSB (e.g. NWCDEX's "IO error reading from device" instead of the correct "not ready error"). This was fixed with the DR-OpenDOS 7.03 COMMAND.COM now passing the full error code to any critical error handlers.