Monday, August 2, 2010

Compilation of various source - drives



; Drive detection by: Lee Hamel (hamell@cs.pdx.edu) - July 6th, 1994
; Partial credit to: Paul Schlyter
;
; Goes thru drives A-Z and determines if they:
; 1) Exist
; 2) Are removable or fixed
; 3) Are local, remote, or shared
; 4) Are a floppy, hard, RAM, subst, or CD-ROM drive

. Model tiny
.286

DRIVEXISTS EQU 1

REMOVEDRV EQU 0
FIXEDDRV EQU 1

LOCALDRV EQU 0
REMOTEDRV EQU 1
SHAREDRV EQU 2

FLOPPY EQU 0
HARD EQU 1
RAM EQU 2
SUBST EQU 3
CDROM EQU 4

. Code
org 100h

start: mov ah, 19h
int 21h; get start drive
mov [curdrive], al

mov ax, 40h
mov es, ax
mov bh, es: [10h]; 40:10 h is # of floppies-1
shr bh, 6
inc bh; # of actual floppy drives
mov bl, 1
mov di, offset drives
nextchkfloppy: mov ax, 4409h; check if drive exists
int 21h
jc nextsetfloppy
test dh, 10000000b; check if SUBST drive
jz chkfloppy
dec bh; dec actual drive count
mov byte ptr [di +3], SUBST
setfloppyexist: mov byte ptr [di], DRIVEXISTS
jmp nextsetfloppy
chkfloppy: dec bh; dec actual drive count
js nextsetfloppy
mov byte ptr [di +1], REMOVEDRV
mov byte ptr [di +3], FLOPPY
jmp setfloppyexist
nextsetfloppy: add di, 4
inc bl
cmp bl, 2; if B then jump back
je nextchkfloppy

mov ch, 24; loop 24 times (drives C - Z)
mov cl, 3; start at C:
drivechkloop: mov ax, 4409h; check if drive exists
mov bl, cl; set drive letter
int 21h; 0 = default, 1 = A:, etc.
jc nextsetdrv
mov byte ptr [di], DRIVEXISTS
mov ax, 4408h; check if removable
int 21h
mov byte ptr [di +1], al; set REMOVABLE or FIXED
mov bx, dx
mov dl, dh
shr dl, 7
and dh, 00010000b
shr dh, 4
mov byte ptr [di +2], dh; set REMOTE or LOCAL
or dl, dl; if not SUBST, then jump
jz chkremote
mov byte ptr [di +3], SUBST
jmp nextsetdrv

chkremote: cmp dh, REMOTEDRV; if REMOTE, then check for CD ROM
je chkcdrom

test bh, 00000010b; sharable?
jz drivenoshare
mov byte ptr [di +2], SHAREDRV
drivenoshare: test bl, 00000010b; RAM drive?
jnz nextsetdrv
mov byte ptr [di +3], RAM
jmp nextsetdrv

chkcdrom: push cx
mov ax, 1500h
xor bx, bx
int 2fh
pop cx
or bx, bx; MSCDEX driver found?
jz nextsetdrv; if not, jump to next drive setup
mov ax, 150bh
dec cl; 0 = A:, etc.
int 2fh
inc cl
or ax, ax
jz nextsetdrv; drive supported by MSCDEX?
mov byte ptr [di +3], CDROM

nextsetdrv: add di, 4
inc cl
dec ch
jnz drivechkloop

mov ah, 0eh
mov dl, [curdrive]
int 21h; reset start drive

mov cl,''A''; output all existing drives
mov di, offset drives
mov ah, 9
drvdumploop: cmp byte ptr [di], DRIVEXISTS
jne nextdrvdump
mov al, cl
int 29h
xor dh, dh
mov dl, byte ptr [di +1]
shl dx, 4
add dx, offset removablemsg
int 21h
xor dh, dh
mov dl, byte ptr [di +2]
shl dx, 3
add dx, offset localmsg
int 21h
xor dh, dh
mov dl, byte ptr [di +3]
shl dx, 3
add dx, offset typemsg
int 21h
mov dx, offset crlf
int 21h

nextdrvdump: add di, 4
inc cl
cmp cl,''Z''
jbe drvdumploop

ret

curdrive db 0
drives db 26 dup (0,1,0,1)
; Default to not exist, fixed, local, hard drive
crlf db 10,13 ,''$''
removablemsg db'': Removable $''
db'': Fixed $''
localmsg db''Local $''
db''Remote $''
db''Shared $''
typemsg db''Floppy $''
db''Hard $''
db''RAM $''
db''Subst $''
db''CD-ROM $''

end start







Recommended links:



Recommend Tools And EDITORS



.mkv



mp4 to 3gp Converter free download



swf file



In 2006, China CMM / CMMI consulting agency announced the top five



JSP tag library ANALYSIS



Green Dam run out of time pre-installed so that the computer business KNOWLEDGE



vob format



FTP Site Preferences



Must have the heart by the five interview



User experience better! SEE the latest features TT4.4.1



Picked Pager Tools



Kingsoft CEO Lei Jun: calm face of The new issue of



Hiddink looking like the kind of CEO