My goal is to add support for booting COMBOOT and COMBOOT32 images in gPXE.
This includes:
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.
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 |
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 |