INT 24 - Critical Error Handler

	no input data

	on entry to INT 24:
	AH = bit 7 of register AH is set to one if other than disk error
	   = bit 7 of register AH is set to zero if disk error
	     AL = failing drive number
	     AH = bits 0-2 indicate affected disk area and read/write status

		  │5│4│3│2│1│0│  AH
		   │ │ │ │ │ └──── read = 0, write = 1
		   │ │ │ └─┴───── 00=DOS, 01=FAT, 10=DIR, 11=data area
		   │ │ └──────── 0=FAIL not allowed, 1=FAIL allowed
		   │ └───────── 0=RETRY not allowed, 1=RETRY allowed
		   └────────── 0=IGNORE not allowed, 1=IGNORE allowed

	DI = error code in lower byte
	BP:SI = pointer to device header control block where additional
		information about the error can be found


	on exit:
	AL = action code determining exit behavior
	   = 00  ignore error
	   = 01  retry
	   = 02  terminate through INT 23
	   = 03  fail system call (DOS 3.x+)


	Error Codes in low order byte of DI:

	  00  write protect error
	  01  unknown unit
	  02  drive not ready
	  03  unknown command
	  04  data error (bad CRC)
	  05  bad request structure length
	  06  seek error
	  07  unknown media type
	  08  sector not found
	  09  printer out of paper
	  0A  write fault
	  0B  read fault
	  0C  general failure

	Users Stack at Entry to Error Handler:

	(top of stack)
	    IP	       DOS code next instruction pointer
	    CS
	    FLAGS      DOS's flags
	    AX -\
	    BX	 \
	    CX	  \
	    DX	   \
	    SI	    |- User's registers at entry to INT 21 function
	    DI	   /
	    BP	  /
	    DS	 /
	    ES -/
	    IP	       User code next instruction pointer
	    CS
	    FLAGS

	- on entry registers are setup for a retry operation
	- user routine must issue an IRET or simulate an IRET
	- INT 21,0 through INT 21,C and INT 21,59 can safely be invoked
	  from the handler.  Other calls may destroy DOS's stack
	- handler must preserve register SS,SP,DS,ES,BX,CX,DX
	- choosing ignore can show side effects, since it causes DOS
	  to continue as if it the call were successful
	- if an improper action code is specified in DOS 3.x it is changed:
	  if IGNORE is invalidly specified, action is converted to FAIL
	  if RETRY is invalidly specified, action is converted to FAIL
	  if FAIL is invalidly specified, action is converted to ABORT
	- IGNORE requests are converted to FAIL for FAT and DIR disk
	  errors and network critical errors
	- if the user routine wishes to handle the error instead of passing
	  it to DOS, it must restore the user program registers from the
	  stack and remove all but the last 3 words from the stack (FLAGS,
	  CS, IP) and issue an IRET
	- do not execute this interrupt directly
	- INDOS flag is cleared on INT 24 (see INT 21,34)