BIOS, CMOS
Inside every PC out there is BIOS, which stands for Basic Input Output System. In a nutshell, BIOS is software that interacts between a computer’s hardware and the operating system and software applications. There are several types of BIOS', ranging from the motherboard ROM BIOS to adapter BIOS' such as video BIOS, drive controller BIOS, network adapter BIOS, SCSI adapter BIOS, etc... These BIOS' are the lowest level of software in a computer providing a set of small programs or software routines that allow the hardware of a computer to interact with the operating system by a set of standard calls.
The Boot Process
To get to the operating system, a computer must first boot from the BIOS. The BIOS performs a number of tasks when a computer is started. From initializing the microprocessor to initializing and testing hardware to starting the operating system. Starting a computer is not a simple task. It's a methodical process that is performed every time power is applied to computer. Here is a detailed description of the boot process. This process will vary with different computers and different BIOS', but the overall goal is the same. When you first turn on a computer the very first operation performed by the CPU is to read the address space at FFFF: 0000h. This address space it reads from is only 16 bytes, which is not nearly enough space to house the BIOS found on a motherboard. Instead, this location contains a special instruction called a jump command (JMP) that tells the processor where to go to find and read the actual BIOS into memory. The process of the processor reading the jump instruction and redirection to the actual BIOS is called the bootstrap or boot. So, when you apply power, it's not the operating system that's working. It's the BIOS.
Here is a basic rundown of what is happening:
1. Power is applied to the computer
When power is applied to the system and all output voltages from the power supply are good, the power supply will generate a power good signal which is received by the motherboard timer. When the timer receives this signal, it stops forcing a reset signal to the CPU and the CPU begins processing instructions.
2. Actual boot
The very first instruction performed by a CPU is to read the contents of a specific memory address that is preprogrammed into the CPU. In the case of x86 based processors, this address is FFFF: 0000h. This is the last 16 bytes of memory at the end of the first megabyte of memory. The code that the processor reads is actually a jump command (JMP) telling the processor where to go in memory to read the BIOS ROM. This process is traditionally referred to as the bootstrap, but now commonly referred to as boot and has been broadened to include the entire initialization process from applying power to the final stages of loading the operating system.
3. POST
POST stands for POWER ON Self-Test. It's a series of individual functions or routines that perform various initialization and tests of the computer’s hardware. BIOS start with a series of tests of the motherboard hardware. The CPU, math coprocessor, timer IC's, DMA controllers, and IRQ controllers. The order in which these tests are performed varies from motherboard to motherboard. Next, the BIOS will look for the presence of video ROM between memory locations C000:000h and C780:000h. If a video BIOS is found, It's contents will be tested with a checksum test. If this test is successful, the BIOS will initialize the video adapter. It will pass controller to the video BIOS, which will in turn initialize itself and then assume controller once it's complete. At this point, you should see things like a manufacturer’s logo from the video card manufacturer video card description or the video card BIOS information. Next, the BIOS will scan memory from C800:000h to DF800:000h in 2KB increments. It's searching for any other ROM's that might be installed in the computer, such as network adapter cards or SCSI adapter cards. If an adapter ROM is found, its contents are tested with a checksum test. If the tests pass, the card is initialized.
4. Looking for the Operating System
Once POST is complete and no errors found, the BIOS will begin searching for an operating system. Typically, the BIOS will look for a DOS Volume Boot Sector on the floppy drive. If no operating system is found, it will search the next location, the hard drive C. If the floppy drive (A), has a bootable floppy in it, the BIOS will load sector 1, head 0, cylinder 0 from the disk into memory starting at location 0000:7C00h. The first program to load will be IO.SYS, then MSDOS.SYS