;-----------------------------------------------------------------------------
; chkdisk.asm Check for presence of disk in drive
; Avoids having to use an int 24 handler
; Works with both floppy and ram drives.
;
.model small
.stack 200h
.data
buffer db 500 dup(?) ; set up a buffer, do NOT
; reduce size
not_there db 'Disk not present.$'
there db 'Disk present.$'
.code
start:
mov ax,@data
mov ds,ax
push ds ; save all required registers
mov ax,seg buffer ; point ds:bx to the buffer
mov ds,ax
mov dx,63 ; logical sector number
; 63 is the first sector of track
; 3 on side 1
mov al,1 ; read drive b:
mov cx,1 ; no. of sectors to read
int 25h ; READ absolute sectors
pop cx ; pop flags from stack to any register
pop ds ; restore registers
jnc disk_present ; carry flag set if problem with drive
no_disk:
mov dx,offset not_there
mov ah,9
int 21h
mov ax,4c01h ; terminate with error code of 1
int 21h ; to possibly pass errorlevel to
; batch files
disk_present: ; int 25h
; return CF
; AH
; 01h bad command
; 02h bad address mark
; 03h write-protected disk
;
mov dx,offset there
mov ah,9
int 21h
exit:
mov ax,4c00h
int 21h
end start