Daniel Verkamp: COMBOOT Support

Project Plan


My goal is to add support for booting COMBOOT and COMBOOT32 images in gPXE.

This includes:

  • Adding a new image type for COMBOOT
  • Implementing the COMBOOT API (including the PXE portions) and setting up the IDT to point to these implementations


I will implement COMBOOT API support in gPXE. This will require implementing the COMBOOT API functions within gPXE and hooking up the interrupt table (or the protected-mode helper, for COM32) to call the gPXE implementation, setting up real or protected mode depending on whether the image is 16- or 32-bit, then loading and executing the COMBOOT image.

For initial testing, the most basic part of the API will be implemented (INT 20h, terminate program) in order to test the loading and execution of COMBOOT executables. Once this is working (both in 16- and 32-bit mode), the rest of the SYSLINUX API that makes sense in the context of gPXE will be implemented, including the PXELINUX-only functions.

16-bit COMBOOT executables will require switching to real mode and setting up the interrupt table appropriately.

COM32 executables will additionally require protected-mode setup and the provision of a protected-mode callback to call COMBOOT and BIOS functions.

Milestones and Timeline

  • Implement bare minimum COMBOOT API and COMBOOT loading (at the very latest, this should be done by mid-summer, but most likely should be done in a few weeks)
  • Improve COM32 helper function to call BIOS functions
  • Implement the rest of the COMBOOT API, as time permits


INT 21h

AH Description Status Notes
00h Terminate program Implemented
01h Get Key with Echo Implemented Extended keys still need work
02h Write Character Implemented No serial yet
04h Write Character to Serial Port Implemented
08h Get Key without Echo Implemented Extended keys still need work
09h Write DOS String to Console Implemented
0Bh Check Keyboard Implemented
30h Check DOS Version Implemented
4Ch Terminate program Implemented

INT 22h

AX Description Status Notes
0001h Get Version Implemented
0002h Write String Implemented
0003h Run command Implemented
0004h Run default command Stubbed
0005h Force text mode Implemented
0006h Open file Implemented
0007h Read file Implemented
0008h Close file Implemented
0009h Call PXE Stack Implemented
000Ah Get Derivative-Specific Information Stubbed
000Bh Get Serial Console Configuration Stubbed
000Ch Perform final cleanup Unimplemented
000Dh Cleanup and replace bootstrap code Unimplemented
000Eh Get configuration file name Stubbed
000Fh Get IPAPPEND strings Stubbed
0010h Resolve hostname Implemented
0011h Maximum number of shuffle descriptors Implemented
0012h Cleanup, shuffle and boot Implemented
0013h Idle loop call Implemented
0014h Local boot Unimplemented
0015h Get feature flags Implemented
0016h Run kernel image Implemented
0017h Report video mode change Implemented
0018h Query custom font Stubbed
0019h Read disk Won't Implement
001Ah Cleanup, shuffle and boot to flat protected mode Unimplemented
001Bh Cleanup, shuffle and boot to real mode Unimplemented
001Ch Get pointer to auxilliary data vector Won't Implement
001Dh Write auxilliary data vector Won't Implement

QR Code
QR Code soc:2008:dverkamp:project_plan:start (generated for current page)