# Why you can't boot a PC from drive B:

A BIOS can tell a DOS boot sector that it came from drive B:, but the DOS boot disks we tested load their system files from drive 0 anyway. Why that breaks B: boots, how period BIOSes got round it with a floppy swap, and what Atlas 286 does.

Applies to: PC/AT-compatible BIOSes and DOS floppy boot sectors in general; Atlas 286 M18 on the Packard Bell PB686, one MS-DOS 4.01 system disk tried in B: on 2026-10-30

Source page: https://barelybooting.com/library/why-you-cant-boot-a-pc-from-drive-b/

*Part of the Anatomy of a 286 AT BIOS series.*

**The short answer.** At boot, a PC BIOS reads the first sector of a disk into memory, jumps to it, and leaves the drive number it booted from in the DL register. The DOS boot disks we tested then load their system files from drive 0 (A:) whatever DL says [I]. So a DOS disk in B: finds A: instead, and either fails or boots the wrong disk. Period BIOSes worked around it with a "swap floppy drives" setting that makes the B: drive answer as drive 0. Atlas 286 doesn't offer B: boots today and plans the swap for a later release.

## What a BIOS does at boot

After POST, the BIOS runs its boot routine, reached through INT 19h [D]. It works down the boot order from Setup, for example A: then C:. For each candidate it tries to read sector 0 (cylinder 0, head 0, sector 1) into memory at 0000:7C00. If the read works and the sector passes whatever sanity check the BIOS makes, the BIOS jumps to that address [D]. If every candidate fails, it gives up with a "no bootable disk" message.

Before the jump it passes one useful fact in DL: the BIOS drive number it booted from. 00h is the first floppy, 01h the second, and 80h the first hard disk [D]. That's the whole contract. The BIOS doesn't know what's in the sector, whether it's a DOS boot sector, a partition table or something stranger, and it doesn't try to find out.

On a hard disk, sector 0 holds the partition table and a small loader that finds the active partition's own boot sector, loads that to the same address, and jumps again, usually still carrying the drive number in DL [D]. That is what DL is for.

## What a DOS boot sector does next

A floppy formatted by DOS has a boot sector that holds a table describing the disk (sector size, sectors per track, number of heads and so on) and a small program. The program's job is short. Find the two DOS system files in the root directory, load them into memory, and jump to the first one. To read the disk it calls INT 13h.

The catch is which drive it reads. The DOS boot disks we tested read from drive 0 and ignore DL [I]. They look like they were written for a machine that boots from A:, so that's where they go looking. On the bench, a DOS 4.01 system disk in B: did exactly that [I]. I haven't measured other DOS versions.

Put that together with the BIOS's contract and the failure is easy to see. The BIOS loads the boot sector from B: and says "you came from drive 1". The boot sector doesn't listen and looks on A:. If A: is empty or holds a non-system disk, the boot sector prints DOS's usual complaint about a non-system disk and stops. If A: holds a bootable DOS disk, it should load that one instead, and you'd think you had booted from B: when you hadn't. I haven't tried that second case.

Hard disk boot code and some third-party floppy loaders do honour DL. DOS floppies are the common case where it doesn't matter what the BIOS says.

## How period BIOSes answered: swap floppy drives

A BIOS can't edit the boot sector, so it can only change what "drive 0" means. AT-class BIOSes that wanted B: boots to work added a Setup option, usually called something like "swap floppy drives". With it on, the physical drive in the B: position answers as drive 0 and the one in the A: position answers as drive 1. [D]

It applies for the whole session, not only during boot. After the swap, DOS's A: is the other physical drive, and the boot sector's insistence on drive 0 now lands on the disk you meant. The price is a session where A: and B: are the wrong way round, and a BIOS has to apply it consistently in INT 13h, in its drive-type reporting and in its floppy tables. How a given BIOS does that varies, which is a reason I'd rather build it properly than bolt it on.

## What Atlas does today

Atlas boots from A:, the hard disk, a CD-ROM or a Zip drive. The boot order is a Setup choice: C: then A:, A: then C:, or C: only, with the CD-ROM and Zip going before or after those, or off. The F10 boot menu (F12 on 101-key keyboards) lists the devices Atlas found: floppy A:, hard disk C:, CD-ROM and Zip. A number boots that device once.

The first version of the menu also listed B:. On 30 October 2026 I put a DOS 4.01 system disk in B: with A: empty and chose it. Atlas loaded the sector and jumped to it with DL set to 01h, as the contract says, and the boot sector went looking on A: and stopped with its non-system-disk message [I]. B: came out of the menu, because offering a choice that can't work for a DOS disk is rude.

To boot a floppy on Atlas, put it in A:. B: works fine once DOS is up: a 1.2 MB format and read-back on B: completed on the PB686 [I]. A proper A:/B: swap is planned for a later release.

## Check it yourself

You need a BIOS or emulator that lets you pick B: as the boot drive, and a DOS system disk.

1. Put the DOS system disk in B:. Leave A: empty.
2. Boot from B:.
3. If the boot sector ignores DL, it asks for a system disk on A: and stops. If you now put a different bootable disk in A:, and it boots, the boot sector really did read drive 0.
4. Turn on your BIOS's floppy swap, if it has one, and repeat step 2. The disk in B: should boot, and it will now be called A:.

## FAQ

**Can I boot from drive B: on Atlas 286?** Not in 1.0. Put the disk in A:. The swap that would make it work is planned for a later release.

**Is that a bug in Atlas?** Atlas passes the right drive number. The boot sector ignores it. A BIOS that wants B: boots to work for DOS disks needs the swap, so it's a missing feature rather than a fault, and it's planned for a later release.

**Do all boot sectors ignore DL?** No. Hard disk boot code normally passes it on, and some floppy loaders use it. DOS floppies are the case that matters here, and I've only measured one disk.

**Why does DOS look at drive 0?** Presumably because it was written for machines that booted from A:. That's my guess; I haven't checked why.

**Does a swap break anything?** It makes A: and B: change places for the whole session, so disk letters stop matching the labels on the drives.

## Sources

Titles only. I haven't quoted from any of them.

- IBM Personal Computer AT Technical Reference (IBM, 1984): the BIOS interface and the boot sequence.
- Ralf Brown's Interrupt List: the entries for INT 13h (disk services) and INT 19h (bootstrap).
- The MS-DOS Encyclopedia, Ray Duncan (ed.), Microsoft Press, 1988: how DOS starts and how its disks are laid out.
- Microsoft's published FAT file system specification: the layout of the boot sector's descriptive table.

## Revised

2026-10-31: first draft.

Wrong about something? Tell me at hello@barelybooting.com.

*I build Atlas with a lot of help from Claude, Anthropic's AI model, including drafting this article. I check it against my bench records. See [About](/about/) for how that works.*
