When booting a PC the kernel needs to know what devices the system has installed and the settings the system is using. This is available through Multiboot, a single structure that defines a memory map, the boot partition, the video mode and pointers to any loaded modules. This structure is simple and functional but is not extensible. A second version of Multiboot is available using a table of tags and is much easier to expand upon. Both of these versions provide the basic settings to have a kernel detect the hardware.
I’ve defined another structure I plan to use called the System Configuration Table (SCFG). The table is an array of blocks that define the basic system with CPU type, a memory map and the video system. What it also offers is the ability to be extended easily by proposing new blocks for the specification to include or through private data blocks that may define custom hardware or software installed.
The System Configuration Table starts with a header that provides the total table size and a last block pointer. SCFG can be used alongside the existing Multiboot standard as the address of the table is passed to the kernel in the ESI register which is unused by the two versions of Multiboot. To check that a valid table exists first check for a ‘SCFG’ signature and then use the table head checksum. The basic structure of a block provides a block header and a block size. If a block is reserved or not handled by the kernel it can be skipped by simply using the block size to jump to the next block.