Introduction
If you have always wondered how DOS recognises the different floppy disks (160K, 180K, 320K, 360K, ...), then just read on.
In order for DOS to work correctly with the different floppy disk formats, it must know the disk parameters. And where does the operating system get this information? From the so-called BIOS parameter block (BPB) in the Volume Boot Record (VBR) or boot sector of the floppy disk.
In the next figures you can see the boot sector (Volume Boot Record, VBR, 512K) of various floppy disks. The VBR is the very first sector (dos logical sector 0 with physical CHS address 0/0/1) of a disk.[np89, p.105]
On a side note: How do I generate the following sector prints? Simply enter the following commands and then edit BOOTSECTOR.TXT a little with a text editor.
Drive A:
DEBUG >BOOTSECTOR.TXT
L 000 0 0 1
D 000 L 200
Q
Drive B:
DEBUG >BOOTSECTOR.TXT
L 000 1 0 1
D 000 L 200
Q
Boot Sectors
PC-DOS 1.0
In the next figure you can see the original boot sector of PC-DOS 1.0. It is very different from the later one's (DOS 2.X ...) and has no BPB, see 0x00B - 0x017. The bootsector does not contain any information about the disk parameters. This was not necessary at that time, as there was only one disk format (single sided, 160K, 8 sectors/track). Furthermore, the standard signature 0xAA55 at the end of the boot sector is missing.
Formatted as: 5,25", 160K, 48 tpi (SSDD), 8 sectors/track.

In the boot sector above, you will find two strings „7-May-81“ and the name Robert „Bob“ O'Rear.
The range 0x00B - 0x017 is „empty“ except for the string; no BPB!
PC-DOS 1.1
Basically, PC-DOS 1.1 knows two disk formats: 160K, 48 tpi (SSDD), 8 sectors/track and 320K, 48 tpi (DSDD), 8 sectors/track. The 9-sector format (SS & DS) was introduced with PC-DOS 2.0!
Formatted as: 5,25", 160K, 48 tpi (SSDD), 8 sectors/track.

The range 0x00B - 0x017 is completely empty; no BPB!
The question now arises, how can DOS distinguish between single-sided and double-sided disks if there is no information in the BPB. It's very simple. Take a look at the very first byte in the second sector. This is where the FAT actually begins. Here the so-called media descriptor appears again. Yes, it has been there since PC-DOS 1.0 at exactly this address! However, the byte only appears at address 0x015 in the BPB as of DOS 2.0.

FE ≡ 160K, 8 sectors/track.
Reference: Wikipedia, Design of the FAT file system, https://en.m.wikipedia.org/wiki/Design_of_the_FAT_file_system#CLUST_0
Special entries
The first two entries in a FAT store special values:
The first entry (cluster 0 in the FAT) holds the FAT ID since MS-DOS 1.20 and PC DOS 1.1 (allowed values 0xF0-0xFF with 0xF1-0xF7 reserved) in bits 7-0, which is also copied into the BPB of the boot sector, offset 0x015 since DOS 2.0. The remaining 4 bits (if FAT12), 8 bits (if FAT16) or 20 bits (if FAT32) of this entry are always 1.
NEC APC, MS-DOS 2.11
With the next boot sector we stay with MS-DOS, but leave the IBM compatible DOS world and turn to the NEC APC. The NEC APC was introduced in 1982 and could work with two operating systems: CP/M-86 and MS-DOS 2.11. It was equipped with two 8" floppy drives (Mitsubishi M2896-63-02M, VFO version).
In the following two figures I have output the complete first track with DEBUG and reworked it a bit.
You may wonder how it is possible to work with DEBUG. It is possible with a simple trick. You need a PC, a normal DOS operating system (e.g. MS-DOS 6.22), an 8" drive and the program UniForm-PC. If the correct format is selected in UniForm-PC, then you can start programmes directly from the 8" floppy disk, including DEBUG (MS-DOS 2.11). This works. Booting does not work, of course, because a 286 is not an NEC APC.
And it gets even better! You can work with DEBUG (MS-DOS 6.22) as well as with DEBUG (NEC MS-DOS 2.11). Yes, it works, you just have to remember that DEBUG(6.22) works with sectors of 512 bytes but DEBUG(2.11) works with records of 128 bytes.
Reading/loading the 1st track of drive G:
DEBUG(6.22): L 000 6 0 16
DEBUG(2.11): L 000 6 0 64
Formatted as: 8", double sided, 77 tracks, 8 sectors/track, 1.024 bytes/sector

In (1) you see two red rectangles. This is a direct (NEAR) jump to 00C8, the red circle. Furthermore, you see two strings. At 000A -> „MS-DOS“ and from 0060 the serial number of this DOS version. You can also see that there is no BPB.

In (2) you can see the so-called media descriptor at 0400 as well as at 0C00: FE ≡ 8".
Note: If you have read this page carefully, you will have noticed that the value „FE" appears twice. Namely at 5.25"/160K and at 8"/1.2M! But that doesn't matter, because these are/were two completely different systems. There can never be any misidentification here. The same applies to the value „FD". This is used for both 5.25"/360K and 8"/500K.

Reference: NEC-APC_MS-DOS_System_Programmers_Guide_Sep83
Note: There seems to be a writing error in the previous illustration. Instead of FFG, I think it should be FFH.
BIOS Parameter Block (BPB)
Back to the Roots (DOS 2.0)

Reference: DEVDRIV.TXT; MICROSOFT MS-DOS EARLY SOURCE CODE V2.0
DOS 2.0 and later

All floppy disks are DOS formatted as: 360K, 48 tpi (DSDD), 9 sectors/track.
In the course of the development of the DOS versions, the BPB was constantly expanded. The original DOS 2.0 BPB consisted of only 13 bytes.
- DOS 2.0 BPB: 13 bytes (0x00B - 0x017)
- DOS 3.X BPB: 25 bytes (0x00B - 0x023)
- DOS 4.0 BPB: 51 bytes (0x00B - 0x03D)
This BPB only exists in this form from DOS version 2.0. In version 1.0, only one format was supported: 160K, 40 tracks, 8 sectors/track and single-sided.



You will only notice the difference between these three disks if you accidentally inserted a floppy disk in drive A: and boot the computer. In case of „UniForm-PC BPB“, absolutely nothing is displayed on the screen and the system hangs up, because the jump address is a dummy jump instruction „EB FE“, unassembled „JMP 0000“. In other words, it is an endless loop.
The other two boot sectors have valid jump instructions: EB 28 - > JMP 002A / EB 3C -> JMP 003E:
As you can see, the most important part of the BPB (0x0B-0x1D, 19 bytes) is exactly the same. This area contains the so-called drive parameters. Without these, it is not possible to access the disk.
But to say it again, a DOS disk formatted with UniForm-PC has a valid boot sector (ends with 0x55, 0xAA) with a correct boot parameter block. The formatted disks are fully usable.
External Links
- VCF thread: Floppy Disk OEM FAT IDs
- Wikipedia: BIOS parameter block
- Wikipedia: Robert O'Rear
- Computer History Museum (CHM): Microsoft DOS V1.1 and V2.0 Source Code
- Author unknown: IBM PC BIOS source code reconstruction. It is definitely worth taking a look here. Here you can learn a lot about the disk formats.