Table of Contents

Daniel Verkamp: COMBOOT Support

Notes

COMBOOT

Basic COMBOOT execution sequence

16-bit COMBOOT
  1. Copy image to offset 0x100 of some segment
  2. Set up PSP in same segment
  3. Set up IDT entries to point at COMBOOT API implementation (stubs in lowmem to call actual protected-mode implementation?)
  4. Change to real mode
  5. Set segment registers CS = DS = ES = SS to segment containing PSP and code
  6. Set SP to 0xfffe (end of 64k segment)
  7. Near call 0x100 (start executing)
COM32
  1. Copy image to virtual address 0x101000
  2. Set DS = ES = SS to the same base as CS (flat address space)
  3. Set FS = GS = 0
  4. Set ESP to end of available memory
  5. Allocate bounce buffer in lowmem
  6. Push args onto stack (helper functions, bounce buffer, other args from user)
  7. Call entry point

Development and Testing Environment

QEMU

New option in QEMU 0.9.1:

-bootp file advertise file in BOOTP replies

Example command (modified contrib/bochs/qemu.sh):

qemu -net nic,model=rtl8139 -net user -boot a -fda ../../src/bin/rtl8139.pdsk -bootp http://server/file.gpxe

This way there is no need for TFTP or DHCP servers when testing in QEMU.

Real Hardware

Development machines:

Server machine (DHCP, HTTP, TFTP, etc.):

“Guinea pig” machines:

Network cards (PCI):