CVF Region: MDBPB

 This region occupies the first sector of the CVF.  It contains the
 following structure which describes the size and layout of the CVF.

MdBpbRec
  Offset Size Contents
  ▀▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   +0      3  abJmpCode    JMP opcode to start of boot code
   +3      8  abOem        OEM name= "MSDSP6.0"
              ──────────────────────────────────────────── Standard BPBRec

  +0bH     2  wSectSize    bytes per sector (always 512; 200H)
  +0dH     1  bClustSects  sectors per cluster (always 16; 10H)
  +0eH     2  wResSects    boot and reserved sectors
  +10H     1  bFatCnt      number of FATs (always 1; see note)
  +11H     2  wRootEntries max DirEntryRecs in root (always 512; 200H)
  +13H     2  wTotSects    total number of sectors in media
                           0000H means >32 MB, so use lBigTotSects
  +15H     1  bMedia       media descriptor (always F8H; i.e., hard disk)
  +16H     2  wFatSects    number of sectors in one FAT
  +18H     2  wSectsPerTrk sectors per track (random, ignored)
  +1aH     2  wHeads       number of read/write heads  (random, ignored)
  +1cH     4  lHidSects    hidden sectors)
  +20H     4  lBigTotSects 32-bit TotSects in volume
              ───────────────────────────────────── DoubleSpace Extensions

  +24H     2  wMdFatStart  logical sector of start of MDFAT
  +26H     1  bSectShift   sector-to-bytes shift (sector is 2 bytes)
  +27H     2  wMdResSects  number of sectors before BootSect
  +29H     2  wRootStart   logical sector of start of root directory
  +2bH     2  wHeapStart   logical sector of start of Sector Heap
  +2dH     2  wFirstData   Number of MDFAT entries (clusters) which are
                           occupied by the DOS boot sector, reserved, and
                           root directory.
  +2fH     1  bBitFatPgs   size of the BitFAT, in 2K pages
  +30H     2  wRes1        (reserved)
  +32H     1  bClustShift  cluster-to-sector shift (cluster is 2 sectors)
  +33H     2  wRes2        (reserved)
  +35H     4  lRes3        (reserved)
  +39H     4  lRes4        (reserved)
  +3dH     1  bFlag12Bit   01H=12-bit FAT, 00H=16-bit FAT
  +3eH     2  wMaxMBs      Maximum CVF uncompressed capacity, in Megabytes
                           (not actual size; see below)
          64               size of an MdBpbRec structure
              ───────────────────────────────────────────── sector padding
  +40H    450 res5         reserved (empty space to end of sector)

   abJmpCode  through ...
lBigTotSects  The first fields line up with a standard BPB.  Additional
              details can be found in BootSectorRec and BpbRec.

     bFatCnt  A CVF "disk" is unusual in that it contains only one copy of
              the standard FAT.  DoubleSpace "virtualizes" this, making it
              seem as though two identical copies exist.  See FAT.

 wMdFatStart  logical sector (from start of CVF) of the MDFAT; seek to
              (wMdFatStart+1)*wSectSize bytes from the start of the CVF to
              read this.

  bSectShift  Log base 2 of wSectSize; handy for calculating how many bytes
              can fit in a sector (one sector = 2 bytes).

 wMdResSects  This describes how many sectors are reserved before the DOS
              Boot sector in the compressed volume.

  wRootStart  logical sector (from start of CVF) of the first sector of the
              root directory.  Seek to (wMdResSects+wRootStart)*wSectSize
              bytes from the start of the CVF to get to the start of this.

  wHeapStart  logical sector (from start of CVF) of the first data sector.
              Data in the sector heap is usually compressed.  See SectHeap.

  wFirstData  tells how many 4-byte entries in the MDFAT are reserved for
              non-data allocations, including DOS boot sector, reserved, and
              root directory.  Thus, the first meaningful MdFatEntryRec is
              really (wFirstData*4) bytes from the start of the MDFAT.

  bBitFatPgs  Size of the BitFAT, in 2K units; i.e., the BitFAT is
              (bBitFatPgs*2048) bytes long.

 bClustShift  Log base 2 of bClustSects; handy for calculating how many
              sectors are in a cluster (one cluster = 2 sectors).

        res3  contains "16  " on my system

  bFlag12Bit  indicates whether the FAT is represented with 12-bit entries
              or 16-bit entries (00H=16-bit; 01H=12-bit).

     wMaxMBs  Capacity of the CVF, in Megabytes.  It is the basis that was
              used when DoubleSpace calculated the size of the variable-
              length BitFAT, MDFAT, and FAT regions.

              This is also the upper limit on the size of the Sector Heap,
              in the case where all the data stored in the CVF is
              incompressible.

              Note that it is NOT the actual size of the CVF--only the
              capacity of the internal bookkeeping regions.  In most cases,
              this specifies a much larger size than is actually used, but
              it makes it easier for DoubleSpace to grow and shrink the
              volume.  DoubleSpace typically wastes several hundred Kbytes
              of disk space when it prepares a large CVF (for instance, it
              set up a 512 MB-capacity CVF on my 350 MB disk).

   Notes: Although the first part of this structure is formatted as a DOS
          4.0+ boot sector, this sector is never booted or executed as
          code.

See Also: CVF Layout
          DoubleSpace Overview
          DoubleSpace API
          DOS Functions
                                    -♦-