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
-♦-