====== Daniel Verkamp: COMBOOT Support ====== ===== Notes ===== ==== COMBOOT ==== * http://syslinux.zytor.com/wiki/index.php/Comboot_API * What should happen if/when a COMBOOT executable returns? Do any other image types ever return? === Basic COMBOOT execution sequence === * Detect image type (.com/.cbt -> 16-bit COMBOOT; .c32 or magic number B8 FF 4C CD 21 -> COM32) - case-insensitive filenames? == 16-bit COMBOOT == - Copy image to offset 0x100 of some segment - Set up PSP in same segment - Set up IDT entries to point at COMBOOT API implementation (stubs in lowmem to call actual protected-mode implementation?) - Change to real mode - Set segment registers CS = DS = ES = SS to segment containing PSP and code - Set SP to 0xfffe (end of 64k segment) - Near call 0x100 (start executing) == COM32 == - Copy image to virtual address 0x101000 - Set DS = ES = SS to the same base as CS (flat address space) - Set FS = GS = 0 - Set ESP to end of available memory - Allocate bounce buffer in lowmem - Push args onto stack (helper functions, bounce buffer, other args from user) - 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: * "sequoia", Pentium 4 2.40 GHz, 1 GB RAM (Gentoo Linux) * "maple", Athlon X2 4200+, 2 GB RAM (Windows Vista Ultimate 32-bit) Server machine (DHCP, HTTP, TFTP, etc.): * "pine", Pentium III 1.0 GHz, 256 MB RAM (Gentoo Linux) "Guinea pig" machines: * "tulip", Athlon XP 2100+, 768 MB RAM * "spruce", Pentium II, 256 MB RAM * Pentium 133 MHz, 16 MB RAM Network cards (PCI): * 3Com 3C905-TX (3C905-B) * Linksys LNE100TX (DEC 21140 based) * SMC EtherPower 10/100 9332DST (DEC 21140 based) * HP J2585B 10/100vg (not supported by Etherboot/gPXE; ancient :-) )