I ran across a great history of bootstrap firmware, BIOS, and PC architecture at the website of Lennart Benschop.  Mr. Benschop wrote a series of ten short articles with the intent of introducing people to Coreboot and Coreboot development.

In the process, he wrote an excellent history of the evolution of bootstrapping computers:  from switches and lights, to bootstrappers on disks, to ROM-based firmware, to today’s flash-ROM standards.
When the CPU is started up, it starts to read and execute instructions from a well-defined location in RAM. But wait: what instructions are stored in RAM when the computer is powered up? Probably nothing useful…
Originally the solution was to add a front panel with lights and switches, so you could manipulate the contents of RAM before the CPU would run. In general a front panel would contain at least one row of lights and switches that was as wide as a machine word, for instance 16 switches and 16 lights for a 16-bit computer. With certain other switches you could set the memory address being examined or altered, write new data to a memory location, reset, start and stop the CPU. Most front panels offered a way to read and write individual CPU registers and to step through the program one instruction at a time.

Later this functionality was integrated into CPUs:
Some computers added logic to the CPU, so it could load boot code from an I/O device all by itself without needing any instructions in RAM. The operator just had to push the correct button to select automatic boot loading from the correct device. The front panel was retained however, just in case.
And then integrated into ROM:
When the computer is powered up, the CPU starts to execute instructions from a well-defined address, which points to Read Only Memory (ROM) … The program in ROM controls what the computer will do after it is started up. Now the functionality of a computer was determined not only by its hardware but also by the program stored in its ROM.
Here are the titles of the ten-part series:
  1. Before we had a ROM
  2. A brief history of the PC
  3. Two levels of bare-metal programming
  4. Getting started under QEMU
  5. Introducing CBFS
  6. RAM Initialization
  7. The art of not locking yourself out
  8. If one CPU is not enough
  9. Configuring PCI
  10. More on payloads
  • Articles 1, 2, 6, 8, and 9 contain must-read history of bootstrapping, BIOS, and PC architecture
  • Articles 3, 4, 5, and 10 are good, but talk a lot about Coreboot, which you may or may not be interested in
  • Article 7 is great reading for anyone doing firmware development

I really loved this series of articles—check them out!

Post a Comment

Be sure to select an account profile (e.g. Google, OpenID, etc.) before typing your comment!