On power up or reset (IBM PC),
External circuits hold reset pin to 0,
until power good.
On reset release, Cpu reads code at a predefined location.
For Intel 8086, it was @ $FFFF0 in ROM Bios (64 KiB Rom)
Example
Some cpus, initial boot code may be on rom on cpu itself.
On 386, etc. this address moved up in memory to just under the 4GiB
limit. When cpu powers up, it creates a virtual image at the high
end of first megabyte of the address range.
Rest of Bios can be anywhere in the cpu address range that does not conflict
with addresses assigned to other puposes.
At least some must be permanent in ROM or flash ram called "firmware"
Initial jump code branches to the larger boot strap program in ROM
or RAM, if initial code copied ROM to RAM.
Tests a specific place in memory for a "signiture".
After a system boots, it "signs" this reserved memory location.
System powering up has no igniture.
System performing a soft re-boot still has previous boot signiture.
If no signiture found,
run full POST test.
Else
Skip or limit which post tests run.
POST - power on self test
POSTS are somewhat custom to the system running them.
Wikipedia : Power on self test
Uses beeps because video is usually not configured yet.
Simple speaker and amp wired to specific memory or i/o address, code
writes alternating bytes to speaker @ which vibrates speaker.
POST tests dedicated circuitry (memory, keyboard, standard interface
card addresses).
Simple test.
Send data to port/register interface for each dedicated circuit.
Read data from port/register interface for each dedicated circuit.
If expected results found,
POST happy and boot process continues.
Else
Appropriate simple error generated.
Sent to audio ( sequence of beeps ) and I/O port 80.
It may also send info to video( displays a number ) if possible.
Special cards available that interface with port 80 to give numeric
error diagnostics. (web search : "post diagnostic card" )
POST does not initially activate the interfaces it finds, it just ids
them as functional or not.
General tests. (from wikipedia)
Verify CPU registers.
Check integerity of BIOS code (check sums?)
Check for various components such as DMA controller, irq controler,
timer (used for refresh).
(May attempt to initialize video interface to here to provide user
feedback)
Test main memory functionality and size.
Initialize BIOS (write default irq pointers in 1k of RAM)
Discover system buses and activate.
Recognize and use bios extensions found on device interface cards.
Provide user input for certain boot decissions.
Activate devices needed to continue booting.
Prep info needed for target OS (things like PNP support)
Basic video card activation occurs. Video cards have additional bios info
at C0000h
Additional info now shown to user as boot continues. This is also when
you may see the manufacturer's logo and function key hints.
(Assumes vga 16 color 640x480)
Other Bios extensions sought - 2K increments from C8000 - DF800 h
Reads values from specifice addresses and perform CRC to confirm device.
All interface cards contain additional firmware specific for the devices
they work with. The system must ID these to expand it functionality.
(e.g C8000h - hard drive)
Configure the various I/O devices based on properties and setting in CMOS.
Memory tested and IDed. You may see the memory be counted on the screen.
Once non-PNP devices id'ed and resources allocated,
process PNP interfaces (newer systems)
PNP - plug and play.
Next