INT 24 C - DOS 1+ - CRITICAL ERROR HANDLER                                      
Notes:	invoked when a critical (usually hardware) error is encountered by DOS
	  (see #02543); should never be called directly
	when DOS terminates a program, it copies the previous value of the
	  INT 24 vector out of the PSPsee Program Segment Prefix (see #01378) and into the interrupt
	  vector table
SeeAlso: INT 21/AH=95h,INT 21/AH=59h/BX=0000h,INT 21/AH=92h"PTS-DOS"


(Table 02543)
Values critical error handler is called with:
	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:	DWORDDoubleword; four bytes.	 Commonly used to hold a 32-bit segment:offset or selector:offset address.	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
		DWORDDoubleword; four bytes.	 Commonly used to hold a 32-bit segment:offset or selector:offset address.	return address for INT 21 call
		WORD	flags pushed by INT 21
Return: AL = action code (see #02546)
	SS,SP,DS,ES,BX,CX,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 undocumentedInformation about a product which is not publicly available from the manufacturer, and must be determined by reverse-engineering (disassembly, trial-and-error, etc.).	 Undocumented information tends to change -- often dramatically -- between successive revisions of a product, since the manufacturer has no obligation to maintain compatibility in behavior which is not explicitly stated.
	  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).
BUG:	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.


Bitfields for critical error type and processing flags:
Bit(s)	Description	(Table 02544)
 7	class
	=0  disk I/O error
	=1  -- if block device, bad FATsee File Allocation Table image in memory
	    -- if char device, error code in DI
 6	unused
 5	Ignore allowed (DOS 3.0+)
 4	Retry allowed (DOS 3.0+)
 3	Fail allowed (DOS 3.0+)
 2-1	disk area of error
	00 = DOS area	01 = FATsee File Allocation Table
	10 = root dir	11 = data area
 0	set if write, clear if read
Note:	Abort is always allowed
SeeAlso: #02545,#02546


(Table 02545)
Values for critical error code:
 00h   (0)  write-protection violation attempted
 01h   (1)  unknown unit for driver
 02h   (2)  drive not ready
 03h   (3)  unknown command given to driver
 04h   (4)  data error (bad CRC)
 05h   (5)  bad device driver request structure length
 06h   (6)  seek error
 07h   (7)  unknown media type (non-DOS disk)
 08h   (8)  sector not found
 09h   (9)  printer out of paper
 0Ah  (10)  write fault
 0Bh  (11)  read fault
 0Ch  (12)  general failure
 0Dh  (13)  (DOS 3.0+, "multitasking" DOS, PTS-DOS & S/DOS) sharing violation
 0Eh  (14)  (DOS 3.0+) lock violation
 0Fh  (15)  invalid disk change / wrong disk
 10h  (16)  (DOS 3.0+) FCBsee File Control Block unavailable
 10h  (16)  uncertain media
 11h  (17)  (DOS 3.0+) sharing buffer overflow
 11h  (17)  character call interrupted
 12h  (18)  (DOS 4.0+) code page mismatch
 13h  (19)  (DOS 4.0+) out of input
 14h  (20)  (DOS 4.0+) insufficient disk space
Note:	Critical error codes 00h..0Ch are the traditional codes reported
	  through INT 24.  These code assignments are mapped to error codes
	  13h..1Fh reported by INT21/AH=59h (see #01680).  Similarly, the
	  DOS 3.x critical error codes 0Dh..11h are mapped to INT21/AH=59h
	  error codes 20h..24h, however, the DOS 4.0+ critical error codes are
	  not mapped.
BUG:	Paragon Technology Systems' S/DOS 1.0 sources (a stripped down issue
	  of PTS-DOS 6.51 with sources on CD) erroneously list DOS INT 24
	  error	codes 12h..14h as 11h..13h, however, since the sources do not
	  make use of these defines, this seems to be only a documentation
	  error.
SeeAlso: #02544,#02546,#01680


(Table 02546)
Values for critical error handler action code:
 00h	ignore error and continue processing request
 01h	retry operation
 02h	terminate program as though INT 21/AH=4Ch called (INT 20h for DOS 1.x)
 03h	fail system call in progress (DOS 3+)
SeeAlso: #02544,#02546