home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / dos_ency / section5 / fxn1ch.asm < prev    next >
Encoding:
Assembly Source File  |  1988-08-11  |  2.7 KB  |  53 lines

  1.         ;************************************************************;
  2.         ;                                                            ;
  3.         ;      Function 1CH: Get Drive Data                          ;
  4.         ;                                                            ;
  5.         ;      Get information about the disk in the specified       ;
  6.         ;      drive.  Set drive_ltr to 0 for default drive info.    ;
  7.         ;                                                            ;
  8.         ;      int get_drive_data(drive_ltr,                         ;
  9.         ;             pbytes_per_sector,                             ;
  10.         ;             psectors_per_cluster,                          ;
  11.         ;             pclusters_per_drive)                           ;
  12.         ;           int  drive_ltr;                                  ;
  13.         ;           int *pbytes_per_sector;                          ;
  14.         ;           int *psectors_per_cluster;                       ;
  15.         ;           int *pclusters_per_drive;                        ;
  16.         ;                                                            ;
  17.         ;      Returns -1 for invalid drive, otherwise returns       ;
  18.         ;      the disk's type (from the 1st byte of the FAT).       ;
  19.         ;                                                            ;
  20.         ;************************************************************;
  21.  
  22. cProc   get_drive_data,PUBLIC,<ds,si>
  23. parmB   drive_ltr
  24. parmDP  pbytes_per_sector
  25. parmDP  psectors_per_cluster
  26. parmDP  pclusters_per_drive
  27. cBegin
  28.         mov     si,ds           ; Save DS in SI to use later.
  29.         mov     dl,drive_ltr    ; Get drive letter.
  30.         or      dl,dl           ; Leave 0 alone.
  31.         jz      gdd
  32.         and     dl,not 20h      ; Convert letter to uppercase.
  33.         sub     dl,'A'-1        ; Convert to drive number: 'A' = 1,
  34.                                 ; 'B' = 2, etc.
  35. gdd:
  36.         mov     ah,1ch          ; Set function code.
  37.         int     21h             ; Ask MS-DOS for data.
  38.         cbw                     ; Extend AL into AH.
  39.         cmp     al,0ffh         ; Bad drive letter?
  40.         je      gddx            ; If so, exit with error code -1.
  41.         mov     bl,[bx]         ; Get FAT ID byte from DS:BX.
  42.         mov     ds,si           ; Get back original DS.
  43.         loadDP  ds,si,pbytes_per_sector
  44.         mov     [si],cx         ; Return bytes per sector.
  45.         loadDP  ds,si,psectors_per_cluster
  46.         mov     ah,0
  47.         mov     [si],ax         ; Return sectors per cluster.
  48.         loadDP  ds,si,pclusters_per_drive
  49.         mov     [si],dx         ; Return clusters per drive.
  50.         mov     al,bl           ; Return FAT ID byte.
  51. gddx:
  52. cEnd
  53.