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.
Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7:30pm ET! To join, head over to YouTube and check out the show’s live chat and our Discord!
Join us every Wednesday night at 8pm ET for Ask an Engineer!
Join over 38,000+ makers on Adafruit’s Discord channels and be part of the community! http://adafru.it/discord
CircuitPython – The easiest way to program microcontrollers – CircuitPython.org
New Products – Adafruit Industries – Makers, hackers, artists, designers and engineers! — New Products 11/15/2024 Featuring Adafruit bq25185 USB / DC / Solar Charger with 3.3V Buck Board! (Video)
Python for Microcontrollers – Adafruit Daily — Python on Microcontrollers Newsletter: A New Arduino MicroPython Package Manager, How-Tos and Much More! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi
EYE on NPI – Adafruit Daily — EYE on NPI Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey
Adafruit IoT Monthly — The 2024 Recap Issue!
Maker Business – Adafruit Daily — Apple to build another chip at TSMC Arizona
Electronics – Adafruit Daily — SMT Tip – Stop moving around!
2 Comments
Sorry, the comment form is closed at this time.
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.
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!