Master the fundamental concepts of the boot process: theory through this focused micro-challenge.
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 worksQEMU's monitor lets you pause the emulated CPU right after reset and read registers before any bootloader runs. That snapshot shows the real-mode segment values and instruction pointer the BIOS entry code expects. For example, after system_reset, info registers typically shows EIP=0xFFF0 and segment registers matching legacy x86 reset behavior.
info registers: CS, IP, flags, and general-purpose registers at the current halt pointx /10i $cs:$pc: Disassemble the next instructions from the code segmentinfo mem: Overview of mapped regions (ROM, VGA, RAM)info tlb / info mtree: Memory layout details on newer QEMU buildssystem_reset: Cold reset to re-run the power-on pathcLoading…
Launch with the monitor on stdio or a Unix socket:
bashLoading…
You will use the QEMU monitor to capture BIOS entry register state and disassemble the first instructions. This exercise requires correlating what you see in emulation with the documented reset vector and real-mode addressing rules.
In QEMU's monitor, x/5xb 0xFFFFFFF0 dumps the first instruction the CPU runs after reset. On SeaBIOS it is a far jump, EA 5B E0 00 F0. Decode it.
JMP ptr16:16 is opcode 0xEA followed by a 16-bit offset and then a 16-bit segment, both little-endian. The target is the 8086 physical address (segment << 4) + offset, masked to 20 bits. Decode with shifts and ORs.
N, then N bytes in hexadecimal (at most 16).
0xEA: opcode 0xEB is not JMP ptr16:16 (needs 0xEA), with the byte as 2 uppercase hex digits.0xEA but fewer than 5 bytes: truncated far jump: N bytes, JMP ptr16:16 needs 5.cLoading…