Master the fundamental concepts of bios & uefi programming through this focused micro-challenge.
You have read the whole brief, and the concepts above stay free on every task. Writing and running the code needs a plan.
Three hints are available for this task, revealed one at a time inside the code workspace so you can struggle productively before seeing them.
Every task includes starter code, theory, and hidden tests so you can implement and verify locally in the browser.
How it worksACPI describes hardware configuration in memory-resident tables rooted at the RSDP (Root System Description Pointer). The BIOS or UEFI publishes the RSDP; the OS or bootloader scans for the signature "RSD PTR " in ROM or UEFI config tables. For example, from the RSDP you follow pointers to the RSDT or XSDT, then each entry names tables like FADT, MADT, and MCFG.
cLoading…
ACPI_20_TABLE_GUID or legacy search (0xE0000-0xFFFFF)Tables use 4-byte ASCII signatures and little-endian lengths. Version fields tell you whether 32-bit or 64-bit addresses are valid.
Sum every byte in the table length; ACPI requires an 8-bit checksum of zero. Compare OEM IDs in the FADT with your QEMU machine type to confirm you found the right root. UEFI exposes the RSDP through ConfigurationTable with GUID EB9D2D30-2D88-11D3-9A16-0090273FC14D for ACPI 1.0 and a different GUID for ACPI 2.0+.
You will read a raw ACPI table byte dump, decode the header (signature, little-endian length, checksum byte), and verify the ACPI rule that all table bytes must sum to zero modulo 256. This exercise requires understanding how firmware hands off hardware metadata and how the OS validates it before trusting it.
Every ACPI table starts with the same 36-byte header and is valid only when all of its bytes sum to 0 modulo 256: firmware sets the checksum byte (offset 9) to make that true. Parse a table dump and verify it.
FACP.N, then N bytes in hexadecimal. N is at least 10 and at most 512.
Four lines:
cLoading…
The last line is the sum of all N bytes modulo 256, as two uppercase hex digits: sum 0x00 VALID when it is zero, otherwise sum 0xNN INVALID, for example sum 0x01 INVALID when one byte is off by one.