[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 4fh  word    offset In Current Directory Path Of Backslash Corresponding To

         root directory for drive
       this value specifies how many characters to hide from the
         "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
         drive letter and colon, SUBST, JOIN, and networks change it
         so that only the appropriate portion of the true path is
         visible to the user
---DOS 4+ ---
 51h   BYTE    (DOS 4 only, remote drives) device type
       04h network drive
 52h   DWORD   pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
       this drive, 00000000h if native DOS
 56h   WORD    available for use by IFS driver

Notes: the path for invalid drives is normally set to X:\, but may be empty
     after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
   normally, only one of bits 13&12 may be set together with bit 14, but
     DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
     0001 SUBST, 0101 ASSIGN (see below)

Format of DR-DOS 5.0-6.0 current directory structure entry (array):
Offset Size    Description
 00h 67 BYTEs  ASCIZ pathname of actual root directory for this logical drive
 43h   WORD    drive attributes
       1000h SUBSTed drive
       3000h??? JOINed drive
       4000h physical drive
       5000h ASSIGNed drive
       7000h JOINed drive
       8000h network drive
 45h   BYTE    physical drive number (0=A:) if this logical drive is valid
 46h   BYTE    ??? apparently flags for JOIN and ASSIGN
 47h   WORD    cluster number of start of parent directory (0000h = root)
 49h   WORD    entry number of current directory in parent directory
 4Bh   WORD    cluster number of start of current directory
 4Dh   WORD    used for media change detection (details not available)
 4Fh   WORD    cluster number of SUBST/JOIN "root" directory
       0000h if physical root directory

Format of device driver header:
Offset Size    Description
 00h   DWORD   pointer to next driver, offset=FFFFh if last driver
 04h   WORD    device attributes
       Character device:
          bit 15 set (indicates character device)
          bit 14 IOCTL supported (see AH=44h)
          bit 13 (DOS 3+) output until busy supported
          bit 12 reserved
          bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
          bits 10-8 reserved
          bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
               (see AX=4410h,AX=4411h)
          bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
               (see AX=440Ch,AX=440Dh)
          bit 5  reserved
          bit 4  device is special (use INT 29 "fast console output")
          bit 3  device is CLOCK$ (all reads/writes use transfer
               record described below)
          bit 2  device is NUL
          bit 1  device is standard output
          bit 0  device is standard input
       Block device:
          bit 15 clear (indicates block device)
          bit 14 IOCTL supported
          bit 13 non-IBM format
          bit 12 network device (device is remote)
          bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
          bit 10 reserved
          bit 9  direct I/O not allowed???
             (set by DOS 3.3 DRIVER.SYS for "new" drives)
          bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
          bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
               (see AX=4410h,AX=4411h)
          bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
               implies support for commands 17h and 18h
               (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
          bits 5-2 reserved
          bit 1   driver supports 32-bit sector addressing (DOS 3.31+)
          bit 0   reserved

       Note: for European MS-DOS 4.0, bit 11 also indicates that bits
           8-6 contain a version code (000 = DOS 3.0,3.1;
           001 = DOS 3.2, 010 = European DOS 4.0)
 06h   WORD    device strategy entry point
       call with ES:BX -> request header (see INT 2F/AX=0802h)
 08h   WORD    device interrupt entry point
---character device---
 0Ah  8 BYTEs  blank-padded character device name
---block device---
 0Ah   BYTE    number of subunits (drives) supported by driver
 0Bh  7 BYTEs  unused
---
 12h   WORD    (CD-ROM driver) reserved, must be 0000h
       appears to be another device chain
 14h   BYTE    (CD-ROM driver) drive letter (must initially be 00h)
 15h   BYTE    (CD-ROM driver) number of units
 16h  6 BYTEs  (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
           (currently '00')

Format of CLOCK$ transfer record:
Offset Size    Description
 00h   WORD    number of days since 1-Jan-1980
 02h   BYTE    minutes
 03h   BYTE    hours
 04h   BYTE    hundredths of second
 05h   BYTE    seconds

Format of DOS 2.x disk buffer:
Offset Size    Description
 00h   DWORD   pointer to next disk buffer, offset = FFFFh if last
       least-recently used buffer is first in chain
 04h   BYTE    drive (0=A, 1=B, etc), FFh if not in use
 05h  3 BYTEs  unused??? (seems always to be 00h 00h 01h)
 08h   WORD    logical sector number
 0Ah   BYTE    number of copies to write (1 for non-FAT sectors)
 0Bh   BYTE    sector offset between copies if multiple copies to be written
 0Ch   DWORD   pointer to DOS Drive Parameter Block (see AH=32h)
 10h       buffered data

Format of DOS 3.x disk buffer:
Offset Size    Description
 00h   DWORD   pointer to next disk buffer, offset = FFFFh if last
       least-recently used buffer is first in chain
 04h   BYTE    drive (0=A,1=B, etc), FFh if not in use
 05h   BYTE    buffer flags
       bit 7: ???
       bit 6: buffer dirty
       bit 5: buffer has been referenced
       bit 4: ???
       bit 3: sector in data area
       bit 2: sector in a directory, either root or subdirectory
       bit 1: sector in FAT
       bit 0: boot sector??? (guess)
 06h   WORD    logical sector number
 08h   BYTE    number of copies to write (1 for non-FAT sectors)
 09h   BYTE    sector offset between copies if multiple copies to be written
 0Ah   DWORD   pointer to DOS Drive Parameter Block (see AH=32h)
 0Eh   WORD    unused??? (almost always 0)
 10h       buffered data

Format of DOS 4.00 (pre UR 25066) disk buffer info:
Offset Size    Description
 00h   DWORD   pointer to array of disk buffer hash chain heads (see below)
 04h   WORD    number of disk buffer hash chains (referred to as NDBCH below)
 06h   DWORD   pointer to lookahead buffer, zero if not present
 0Ah   WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
 0Ch   BYTE    00h if buffers in EMS (/X), FFh if not
 0Dh   WORD    EMS handle for buffers, zero if not in EMS
 0Fh   WORD    EMS physical page number used for buffers (usually 255)
 11h   WORD    ??? seems always to be 0001h
 13h   WORD    segment of EMS physical page frame
 15h   WORD    ??? seems always to be zero
 17h  4 WORDs  EMS partial page mapping information???

Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
Offset Size    Description
 00h   DWORD   pointer to array of disk buffer hash chain heads (see below)
 04h   WORD    number of disk buffer hash chains (referred to as NDBCH below)
 06h   DWORD   pointer to lookahead buffer, zero if not present
 0Ah   WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
 0Ch   BYTE    01h, possibly to distinguish from pre-UR 25066 format
 0Dh   WORD    ??? EMS segment for BUFFERS (only with /XD)
 0Fh   WORD    ??? EMS physical page number of EMS seg above (only with /XD)
 11h   WORD    ??? EMS segment for ??? (only with /XD)
 13h   WORD    ??? EMS physical page number of above (only with /XD)
 15h   BYTE    ??? number of EMS page frames present (only with /XD)
 16h   WORD    segment of one-sector workspace buffer allocated in main memory
         if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
         into EMS
 18h   WORD    EMS handle for buffers, zero if not in EMS
 1Ah   WORD    EMS physical page number used for buffers (usually 255)
 1Ch   WORD    ??? appears always to be 0001h
 1Eh   WORD    segment of EMS physical page frame
 20h   WORD    ??? appears always to be zero
 22h   BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS

Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
Offset Size    Description
 00h   WORD    EMS logical page number in which chain is resident, -1 if not
       in EMS
 02h   DWORD   pointer to least recently used buffer header.  All buffers on
       this chain are in the same segment.
 06h   BYTE    number of dirty buffers on this chain
 07h   BYTE    reserved (00h)

Notes: buffered disk sectors are assigned to chain N where N is the sector's
     address modulo NDBCH,  0 <= N <= NDBCH-1
   each chain resides completely within one EMS page
   this structure is in main memory even if buffers are in EMS

Format of DOS 4.0-6.0 disk buffer:
Offset Size    Description
 00h   WORD    forward ptr, offset only, to next least recently used buffer
 02h   WORD    backward ptr, offset only
 04h   BYTE    drive (0=A,1=B, etc) if bit 7 clear
       SFT index if bit 7 set
       FFh if not in use
 05h   BYTE    buffer flags
       bit 7: remote buffer
       bit 6: buffer dirty
       bit 5: buffer has been referenced (reserved in DOS 5+)
       bit 4: search data buffer (only valid if remote buffer)
       bit 3: sector in data area
       bit 2: sector in a directory, either root or subdirectory
       bit 1: sector in FAT
       bit 0: reserved
 06h   DWORD   logical sector number (local buffers only)
 0Ah   BYTE    number of copies to write
       for FAT sectors, same as number of FATs
       for data and directory sectors, usually 1
 0Bh   WORD    offset in sectors between copies to write for FAT sectors
 0Dh   DWORD   pointer to DOS Drive Parameter Block (see AH=32h)
 11h   WORD    size of data in buffer if remote buffer (see flags above)
 13h   BYTE    reserved (padding)
 14h       buffered data

Note:  for DOS 4.x, all buffered sectors which have the same hash value
     (computed as the sum of high and low words of the logical sector
     number divided by the number of disk buffer chains) are on the same
     doubly-linked circular chain; for DOS 5+, only a single circular
     chain exists.
   the links consist of offset addresses only, the segment being the same
     for all buffers in the chain.

Format of DOS 5.0-6.0 disk buffer info:
Offset Size    Description
 00h   DWORD   pointer to least-recently-used buffer header (may be in HMA)
       (see above)
 04h   WORD    number of dirty disk buffers
 06h   DWORD   pointer to lookahead buffer, zero if not present
 0Ah   WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
 0Ch   BYTE    buffer location
       00h base memory, no workspace buffer
       01h HMA, workspace buffer in base memory
 0Dh   DWORD   pointer to one-segment workspace buffer in base memory
 11h  3 BYTEs  unused
 14h   WORD    ???
 16h   BYTE    flag: INT 24 fail while making an I/O status call
 17h   BYTE    temp storage for user memory allocation strategy during EXEC
 18h   BYTE    counter: number of INT 21 calls for which A20 is off
 19h   BYTE    bit flags
       bit 0: ???
       bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
           WINA20.SYS when MS Windows 3.0 starts)
       bit 2: in EXEC state (INT 21/AX=4B05h)
 1Ah   WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
 1Ch   BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
 1Dh   WORD    minimum paragraphs of memory required by program being EXECed
 1Fh   WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
       memory chain in base 640K only (first UMB MCB usually at 9FFFh,
       locking out video memory with a DOS-owned memory block)

.NG limit reached, continued in next section...

This page created by ng2html v1.05, the Norton guide to HTML conversion utility. Written by Dave Pearson