Table of Contents
Daniel Verkamp: COMBOOT Support
Project Plan
Summary
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
Outline
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
Status
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 |