May 7, 2009 AT 9:16 am

Reverse-Engineering DOS 1.0

 Images Dos1Boot
Pt 1916
Happy birthday DOS

The bootsector of DOS 1.0 is celebtaring its 28th birthday today (it contains the timestamp “7-May-81″), so let’s look at it more closely.

DOS 1.0 shipped on a 160 KB single sided disk. The boot code in the IBM PC’s BIOS loaded the first sector into RAM at segment 0×0000, offset 0×7C00 and ran it. Later versions of BIOS checked for 0xAA55 in the last word of the bootsector, but the first version did not. Note that DOS 1.0 is also pre-BIOS Parameter Block, i.e. the bootsector does not contain any information about the physical layout of the disk, since there was only a single disk size.

What the boot sector is supposed to do is read “IBMBIO.COM” and “IBMDOS.COM” into RAM and run them – these are the DOS system files for machine abstraction and DOS API, respectively. In MS-DOS, they would be called “IO.SYS” and “MSDOS.SYS”.

But the DOS 1.0 bootsector takes quite a lot of shortcuts. It assumes it’s always a 40 track, 8 sectors single-sided disk and the two files occupy the first sectors of the data area contiguously – something that SYS.COM could guarantee when making a disk bootable.

So the bootsector first loads the first sector of the root directory (hardcoded to track 0, sector 4) and compares the first two entries with “IBMBIO.COM” and “IBMDOS.COM”. For some reason, the comparison is case-insensitive, although DOS only allows uppercase filenames.

Check out all the Circuit Playground Episodes! Our new kid’s show and subscribe!

Have an amazing project to share? Join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Learn resistor values with Mho’s Resistance or get the best electronics calculator for engineers “Circuit Playground”Adafruit’s Apps!

Maker Business — Presentation: Ten Year Futures – Benedict Evans

Wearables — Toy with inspiration

Electronics — Servo Pulses

Biohacking — Nutrigenomics – Personalized Vitamin Supplements Based on DNA

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at AdafruitDaily.com !


  1. Note that the error messages have the high bit set in the last character to indicate EOS. I guess the author (Robert?) had to compress things a bit to leave enough room for his name.

  2. The set-high-bit-for-EOS trick is also used in Microsoft ROM BASIC code for the 6502, and is present in the Commodore PET, the Ohio Scientific machines, the Commodore 64 and the Compukit UK101. The BASIC keyword tables use the trick, and so do the BASIC error messages. In the case of the UK101, the high bit is not stripped when the error message is printed, resulting in some cryptic messages!

Sorry, the comment form is closed at this time.