Pointers
DPB
┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_drive │+0 │1 │B │Logical drive # assoc with DPB │ │ │ │ │ │(A=0,B=1,...) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_unit │+1 │1 │B │Driver unit number of DPB │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_driver_addr │+2 │4 │D │Pointer to driver │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_next_dpb │+6 │4 │D │Pointer to next Drive parameter block │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_cbSector │+a │2 │W │sector size (for volume checking) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_first_FAT │+c │2 │W │sector of 1st FAT (for ancient dev │ │ │ │ │ │drivers) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_toggle_time │+e │4 │D │time of last drive toggle │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_hVPB │+12 │2 │W │handle of volume currently in drive │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_media │+14 │1 │B │most recent media that was in drive │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_flags │+15 │1 │B │synchronization flags (see below) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_drive_lock │+16 │2 │W │Contains pid if drive locked by process │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb_strategy2 │+18 │4 │D │strategy2 addr (or 00000000) │ └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
dpb_falgs flag definitions:
┌────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├────────────┼────────┼────────────────────────────────────────┤ │DPBCHECK │0x10 │disk in drive is being removed/checked │ │ │ │for VPB │ ├────────────┼────────┼────────────────────────────────────────┤ │DPBNONREMOV │0x20 │1 => drive supports non-removable media │ ├────────────┼────────┼────────────────────────────────────────┤ │DPBVCRAMDISK│0x40 │Ram Disk Driver │ └────────────┴────────┴────────────────────────────────────────┘
DPB3X
┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_drive │+0 │1 │B │Logical drive # assoc with DPB │ │ │ │ │ │(A=0,B=1,...) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_UNIT │+1 │1 │B │Driver unit number of DPB │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_sector_size │+2 │2 │W │Size of physical sector in bytes │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_cluster_mask │+4 │1 │B │Sectors/cluster - 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_cluster_shift │+5 │1 │B │Log2 of sectors/cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_first_FAT │+6 │2 │W │Starting record of FATs │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_FAT_count │+8 │1 │B │Number of FATs for this drive │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_root_entries │+9 │2 │W │Number of directory entries │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_first_sector │+b │2 │W │First sector of first cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_max_cluster │+d │2 │W │Number of clusters on drive + 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_FAT_size │+f │1 │B │Number of records occupied by FAT │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_dir_sector │+10 │2 │W │Starting record of directory │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_driver_addr │+12 │4 │D │Pointer to driver │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_media │+16 │1 │B │Media byte │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_first_access │+17 │1 │B │This is initialized to -1 to force a │ │ │ │ │ │media check the first time this DPB is │ │ │ │ │ │used │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_next_dpb │+18 │4 │D │Pointer to next Drive parameter block │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_next_free │+1c │2 │W │Cluster # of last allocated cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb3x_free_cnt │+1e │2 │W │Count of free clusters, -1 if unknown │ └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
DPB4X
┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_drive │+0 │1 │B │Logical drive # assoc with DPB │ │ │ │ │ │(A=0,B=1,...) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_UNIT │+1 │1 │B │Driver unit number of DPB │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_sector_size │+2 │2 │W │Size of physical sector in bytes │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_cluster_mask │+4 │1 │B │Sectors/cluster - 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_cluster_shift │+5 │1 │B │Log2 of sectors/cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_first_FAT │+6 │2 │W │Starting record of FATs │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_FAT_count │+8 │1 │B │Number of FATs for this drive │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_root_entries │+9 │2 │W │Number of directory entries │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_first_sector │+b │2 │W │First sector of first cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_max_cluster │+d │2 │W │Number of clusters on drive + 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_FAT_size │+f │2 │W │Number of records occupied by FAT │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_dir_sector │+11 │2 │W │Starting record of directory │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_driver_addr │+13 │4 │D │Pointer to driver │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_media │+17 │1 │B │Media byte │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_first_access │+18 │1 │B │This is initialized to -1 to force a │ │ │ │ │ │media check the first time this DPB is │ │ │ │ │ │used │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_next_dpb │+19 │2 │D │Pointer to next Drive parameter block │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_next_free │+1d │2 │W │Cluster # of last allocated cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dpb4x_free_cnt │+1f │2 │W │Count of free clusters, -1 if unknown │ └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘