From: E.P. van Westendorp <E.P.van.Westendorp@inter.NL.net>
Subject: Re: Critical Error Handler - Int 24h
Date: Tuesday, February 22, 2000 1:51 AM

I wrote the program like you see below.
About the same code can also be used to check for a CD-ROM.

-- 

Eric P. van Westendorp  Tel: +31(0252)210579
Reigerslaan 22  2215NN Voorhout  Netherlands

		TITLE	CRITERR.ASM

;Demo Critical Error Handler
;Checks critical error on drive A:
;MASM 6.11D used ML /AT CRITERR.ASM

CODE            SEGMENT	'CODE'
		ASSUME	DS:CODE,SS:CODE
                ORG     0100H			;Code loaded at offset 0100H
		.RADIX	10H			;Default all HEX
		.486				;80486+

;Get vector Critical Error Handler from PSP
;Store in own handler
MAIN		PROC	FAR
		MOV	EAX,DS:DWORD PTR[0012]	;Get vector from PSP
		MOV	[OLD_CRIT],EAX		;Store in new handler

;Revector Critical Error to own handler
;Vector later restored by INT 21 func 4C
		MOV	AX,2524			;Set interrupt vector INT 24
		MOV	DX,OFFSET CRIT_ERR	; to handler
		INT	21			;Dos

;Try to read something from disk A:, like its free space
		MOV	AH,36			;Get disk free space
		MOV	DL,01			;A:=1 etc
		INT	21			;Dos
		CMP	AX,0FFFF		;Valid?
		MOV	DX,OFFSET FAIL_MESS	;Assume fail
		JZ	MESS_EXIT		;No Disk
		MOV	DX,OFFSET SUCCES_MESS	;Disk OK
		
;Print message DS:DX
MESS_EXIT:	MOV	AH,09			;Print string
		INT	21			;Dos
		MOV	AX,4C00			;Terminate program
		INT	21			;Dos
MAIN		ENDP

;Replace default Critical Error Handler, disable Retry, Fail, Continue
mess
CRIT_ERR	PROC	FAR
		TEST	AH,10000000Y		;A block device caused error?
		JNZ	CONT_CRIT		;No
		OR	AL,AL			;Did drive A: cause the error?
		JNZ	CONT_CRIT		;No, another block device
		MOV	AL,03			;Return to program with error
		TEST	AH,00001000Y		;Allowed to terminate function?
		JNZ	RET_ACT			;Yes
		DEC	AL			;No, terminate the program
RET_ACT:	IRET

;Not a critical error on drive A:, jump to address orignal crit. error
handler
CONT_CRIT:
		DB	0EA			;JMP FAR
OLD_CRIT	DD	00000000		;Stores addres original handler
CRIT_ERR	ENDP

;Messages
FAIL_MESS	DB	0A,0D,"Drive A: not ready$"
SUCCES_MESS	DB	0A,0D,"Drive A: ready$"

CODE            ENDS
                END     MAIN 