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)