summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux/latest/doc/comboot.txt
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux/latest/doc/comboot.txt')
-rw-r--r--contrib/syslinux/latest/doc/comboot.txt1012
1 files changed, 0 insertions, 1012 deletions
diff --git a/contrib/syslinux/latest/doc/comboot.txt b/contrib/syslinux/latest/doc/comboot.txt
deleted file mode 100644
index 4b4b880..0000000
--- a/contrib/syslinux/latest/doc/comboot.txt
+++ /dev/null
@@ -1,1012 +0,0 @@
-
- COMBOOT and COM32 files
-
-
-Syslinux supports simple standalone programs, using a file format
-similar to DOS ".com" files. A 32-bit version, called COM32, is also
-provided. A simple API provides access to a limited set of filesystem
-and console functions.
-
-
- ++++ COMBOOT file format ++++
-
-A COMBOOT file is a raw binary file containing 16-bit code. It should
-be linked to run at offset 0x100, and contain no absolute segment
-references. It is run in 16-bit real mode.
-
-A COMBOOT image can be written to be compatible with MS-DOS. Such a
-file will usually have extension ".com". A COMBOOT file which is not
-compatible with MS-DOS will usually have extension ".cbt".
-
-Before running the program, Syslinux sets up the following fields in
-the Program Segment Prefix (PSP), a structure at offset 0 in the
-program segment:
-
- Offset Size Meaning
- 0 word Contains an INT 20h instruction
- 2 word Contains the paragraph (16-byte "segment" address) at
- the end of memory available to the program.
- 128 byte Length of the command line arguments, including the leading
- space but not including the final CR character.
- 129 127b Command line arguments, starting with a space and ending
- with a CR character (ASCII 13).
-
-The program is allowed to use memory between the PSP paragraph (which
-all the CS, DS, ES and SS registers point to at program start) and the
-paragraph value given at offset 2.
-
-On startup, SP is set up to point to the end of the 64K segment, at
-0xfffe. Under DOS it is possible for SP to contain a smaller
-value if memory is very tight; this is never the case under Syslinux.
-
-The program should make no assumptions about what segment address it
-will be loaded at; instead it should look at the segment registers on
-program startup. Both DOS and Syslinux will guarantee CS == DS == ES
-== SS on program start; the program should not assume anything about
-the values of FS or GS.
-
-To exit, a program can either execute a near RET (which will jump to
-offset 0 which contains an INT 20h instruction, terminating the
-program), or execute INT 20h or INT 21h AH=00h or INT 21h AH=4Ch.
-If compatiblity with Syslinux 1.xx is desired, use INT 20h.
-
-
- ++++ COM32R file format ++++
-
-A COM32R file is a raw binary file containing 32-bit code. It should
-be self-relocating, as it will be loaded by the Syslinux core at any
-4K aligned address. It will be run in flat-memory 32-bit protected
-mode. Under Syslinux, it will be run in CPL 0, however, since it may
-be possible to create a COM32 execution engine that would run under
-something like Linux DOSEMU, it is recommended that the code does not
-assume CPL 0 unless absolutely necessary.
-
-A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
-eax,21cd4cfeh) as a magic number.
-
-The COM32R format replaces the earlier COM32 format, which was linked
-to a fixed address (0x101000).
-
-A COM32R file should have extension ".c32".
-
-On startup, CS will be set up as a flat 32-bit code segment, and DS ==
-ES == SS will be set up as the equivalent flat 32-bit data segment.
-FS and GS are reserved for future use and are currently initialized to
-zero. A COM32R image should not assume any particular values of
-segment selectors.
-
-ESP is set up at the end of available memory and also serves as
-notification to the program how much memory is available.
-
-The following arguments are passed to the program on the stack:
-
- Address Size Meaning
- [ESP] dword Return (termination) address
- [ESP+4] dword Number of additional arguments (currently 8)
- [ESP+8] dword Pointer to the command line arguments (null-terminated string)
- [ESP+12] dword Pointer to INT call helper function
- [ESP+16] dword Pointer to low memory bounce buffer
- [ESP+20] dword Size of low memory bounce buffer
- [ESP+24] dword Pointer to FAR call helper function (new in 2.05)
- [ESP+28] dword Pointer to CDECL helper function (new in 3.54)
- [ESP+32] dword Amount of memory controlled by the Syslinux core (new in 3.74)
- [ESP+36] dword Pointer to the filename of the com32 module (new in 3.86)
- [ESP+40] dword Pointer to protected-mode functions (new in 4.00)
-
-The libcom32 startup code loads this into a structure named __com32,
-defined in <com32.h>:
-
-extern struct com32_sys_args {
- uint32_t cs_sysargs;
- char *cs_cmdline;
- void __cdecl(*cs_intcall)(uint8_t, const com32sys_t *, com32sys_t *);
- void *cs_bounce;
- uint32_t cs_bounce_size;
- void __cdecl(*cs_farcall)(uint32_t, const com32sys_t *, com32sys_t *);
- int __cdecl(*cs_cfarcall)(uint32_t, const void *, uint32_t);
- uint32_t cs_memsize;
- const char *cs_name;
- const struct com32_pmapi *cs_pm;
-} __com32;
-
-The intcall helper function can be used to issue BIOS or Syslinux API
-calls, and takes the interrupt number as first argument. The second
-argument is a pointer to the input register definition, an instance of
-the following structure (available in <com32.h>):
-
-typedef union {
- uint32_t l;
- uint16_t w[2];
- uint8_t b[4];
-} reg32_t;
-
-typedef struct {
- uint16_t gs; /* Offset 0 */
- uint16_t fs; /* Offset 2 */
- uint16_t es; /* Offset 4 */
- uint16_t ds; /* Offset 6 */
-
- reg32_t edi; /* Offset 8 */
- reg32_t esi; /* Offset 12 */
- reg32_t ebp; /* Offset 16 */
- reg32_t _unused_esp; /* Offset 20 */
- reg32_t ebx; /* Offset 24 */
- reg32_t edx; /* Offset 28 */
- reg32_t ecx; /* Offset 32 */
- reg32_t eax; /* Offset 36 */
-
- reg32_t eflags; /* Offset 40 */
-} com32sys_t;
-
-The third argument is a pointer to the output register definition, an
-instance of the same structure. The third argument can also be zero
-(NULL).
-
-Since BIOS or Syslinux API calls can generally only manipulate data
-below address 0x100000, a "bounce buffer" in low memory, at least 64K
-in size, is available, to copy data in and out.
-
-The farcall helper function behaves similarly, but takes as its first
-argument the CS:IP (in the form (CS << 16) + IP) of procedure to be
-invoked via a FAR CALL.
-
-The cfarcall helper function takes (CS << 16)+IP, a pointer to a stack
-frame, a size of that stack frame, and returns the return value of EAX
-(which may need to be appropriate truncated by the user.)
-
-Starting in version 4.00, some of these API calls are available as
-protected-mode function calls, using the regparm(3) calling convention
-(the first three argumetns in EAX, EDX, ECX; the rest on the stack.)
-Those functions are defined in struct com32_pmapi, defined in
-<syslinux/pmapi.h>.
-
-
- ++++ SYSLINUX API CALLS +++
-
-Syslinux provides the following API calls. Syslinux 1.xx only
-supported INT 20h - terminate program. [] indicates the first version
-of Syslinux which supported this feature (correctly.)
-
-NOTE: Most of the API functionality is still experimental. Expect to
-find bugs.
-
-
- ++++ DOS-COMPATIBLE API CALLS ++++
-
-INT 20h [1.48] Terminate program
-INT 21h AH=00h [2.00] Terminate program
-INT 21h AH=4Ch [2.00] Terminate program
-
- All of these terminate the program.
-
-
-INT 21h AH=01h [2.01] Get Key with Echo
-
- Reads a key from the console input, with echo to the console
- output. The read character is returned in AL. Extended
- characters received from the keyboard are returned as NUL (00h)
- + the extended character code.
-
-
-INT 21h AH=02h [2.01] Write Character
-
- Writes a character in DL to the console (video and serial)
- output.
-
-
-INT 21h AH=04h [2.01] Write Character to Serial Port
-
- Writes a character in DL to the serial console output
- (if enabled.) If no serial port is configured, this routine
- does nothing.
-
-
-INT 21h AH=08h [2.09] Get Key without Echo
-
- Reads a key fron the console input, without echoing it to the
- console output. The read character is returned in AL.
-
-
-INT 21h AH=09h [2.01] Write DOS String to Console
-
- Writes a DOS $-terminated string in DS:DX to the console.
-
-
-INT 21h AH=0Bh [2.00] Check Keyboard
-
- Returns AL=FFh if there is a keystroke waiting (which can then
- be read with INT 21h, AH=01h or AH=08h), otherwise AL=00h.
-
-
-INT 21h AH=30h [2.00] Check DOS Version
-
- This function returns AX=BX=CX=DX=0, corresponding to a
- hypothetical "DOS 0.0", but the high parts of EAX-EBX-ECX-EDX
- spell "SYSLINUX":
-
- EAX=59530000h EBX=4C530000h ECX=4E490000h EDX=58550000h
-
- This function can thus be used to distinguish running on
- Syslinux from running on DOS.
-
-
- ++++ SYSLINUX-SPECIFIC API CALLS ++++
-
-Syslinux-specific API calls are executed using INT 22h, with a
-function number in AX. INT 22h is used by DOS for internal purposes;
-do not execute INT 22h under DOS.
-
-DOS-compatible function INT 21h, AH=30h can be used to detect if the
-Syslinux API calls are available.
-
-Any register not specifically listed as modified is preserved;
-however, future versions of Syslinux may add additional output
-registers to existing calls.
-
-All calls return CF=0 on success, CF=1 on failure. The noted outputs
-apply if CF=0 only unless otherwise noted. All calls clobber the
-arithmetric flags (CF, PF, AF, ZF, SF and OF) but leave all other
-flags unchanged unless otherwise noted.
-
-
-AX=0001h [2.00] Get Version
-
- Input: AX 0001h
- Output: AX number of INT 22h API functions available
- CH Syslinux major version number
- CL Syslinux minor version number
- DL Syslinux derivative ID (e.g. 32h = PXELINUX)
- ES:SI Syslinux version string
- ES:DI Syslinux copyright string
-
- This API call returns the Syslinux version and API
- information.
-
- Note: before version 3.86, the version string had a leading CR LF
- and the copyright string had a leading space. The strings might
- still contain trailing CR and/or LF.
-
-
-AX=0002h [2.01] Write String
-
- Input: AX 0002h
- ES:BX null-terminated string
- Output: None
-
- Writes a null-terminated string on the console.
-
-
-AX=0003h [2.01] Run command
-
- Input: AX 0003h
- ES:BX null-terminated command string
- Output: Does not return
-
- This API call terminates the program and executes the command
- string as if the user had entered it at the Syslinux command
- line. This API call does not return.
-
-
-AX=0004h [2.01] Run default command
-
- Input: AX 0004h
- Output: Does not return
-
- This API call terminates the program and executes the default
- command string as if the user had pressed Enter alone on the
- Syslinux command line. This API call does not return.
-
-
-AX=0005h [2.00] Force text mode
-
- Input: AX 0005h
- Output: None
-
- If the screen was in graphics mode (due to displaying a splash
- screen using the <Ctrl-X> command in a message file, or
- similar), return to text mode.
-
-
-AX=0006h [2.08] Open file
-
- Input: AX 0006h
- ES:SI null-terminated filename
- Output: SI file handle
- EAX length of file in bytes, or -1
- CX file block size
-
- Open a file for reading. The exact syntax of the filenames
- allowed depends on the particular Syslinux derivative.
-
- The Syslinux file system is block-oriented. The size of a
- block will always be a power of two and no greater than 16K.
-
- Note: Syslinux considers a zero-length file to be nonexistent.
-
- In 3.70 or later, EAX can contain -1 indicating that the file
- length is unknown.
-
- 32-BIT VERSION:
-
- int cs_pm->open_file(const char *filename, struct com32_filedata *data)
-
- filename - null-terminated filename
- data - pointer to a file data buffer
-
- Returns the file handle, or -1 on failure.
- The file data buffer contains block size and file size.
-
-
-AX=0007h [2.08] Read file
-
- Input: AX 0007h
- SI file handle
- ES:BX buffer
- CX number of blocks to read
- Output: SI file handle, or 0 if EOF was reached
- ECX number of bytes read [3.70]
-
- Read blocks from a file. Note that the file handle that is
- returned in SI may not be the same value that was passed in.
-
- If end of file was reached (SI=0), the file was automatically
- closed.
-
- In 3.70 or later, ECX returns the number of bytes read. This
- will always be a multiple of the block size unless EOF is
- reached.
-
- The address of the buffer (ES:BX) should be at least 512-byte
- aligned. Syslinux guarantees at least this alignment for the
- COMBOOT load segment or the COM32 bounce buffer.
-
- Keep in mind that a "file" may be a TFTP connection, and that
- leaving a file open for an extended period of time may result
- in a timeout.
-
- WARNING: Calling this function with an invalid file handle
- will probably crash the system.
-
- 32-BIT VERSION:
-
- size_t cs_pm->read_file(uint16_t *handle, void *buf, size_t blocks)
-
- handle - file handle (input and output, set to zero on end of file)
- buf - buffer to write to
- blocks - number of blocks to read
-
- Returns number of bytes read, or 0 on failure.
-
-
-AX=0008h [2.08] Close file
-
- Input: AX 0008h
- SI file handle
- Output: None
-
- Close a file before reaching the end of file.
-
- WARNING: Calling this function with an invalid file handle
- will probably crash the system.
-
- 32-BIT VERSION:
-
- void cs_pm->close_file(uint16_t handle)
-
- handle - file handle to close
-
-
-AX=0009h [2.00] Call PXE Stack [PXELINUX ONLY]
-
- Input: AX 0009h
- BX PXE function number
- ES:DI PXE parameter structure buffer
- Output: AX PXE return status code
-
- Invoke an arbitrary PXE stack function. On SYSLINUX/ISOLINUX,
- this function returns with an error (CF=1) and no action is
- taken. On PXELINUX, this function always returns with CF=0
- indicating that the PXE stack was successfully invoked; check
- the status code in AX and in the first word of the data buffer
- to determine if the PXE call succeeded or not.
-
- The PXE stack will have the UDP stack OPEN; if you change that
- you cannot call any of the file-related API functions, and
- must restore UDP OPEN before returning to PXELINUX.
-
- PXELINUX reserves UDP port numbers from 49152 to 65535 for its
- own use; port numbers below that range is available.
-
-
-AX=000Ah [2.00] Get Derivative-Specific Information
-
- [SYSLINUX, EXTLINUX]
- Input: AX 000Ah
- CL 9 (to get a valid return in CL for all versions)
- Output: AL 31h (SYSLINUX), 34h (EXTLINUX)
- DL drive number
- CL sector size as a power of 2 (9 = 512 bytes) [3.35]
- CH mode [3.73]
- 1 = CBIOS mode
- 2 = EBIOS mode
- ES:BX pointer to partition table entry (if DL >= 80h)
- FS:SI pointer to initial ES:DI value [3.53]
- GS:DI pointer to partition offset (QWORD) [4.00]
-
- Note: This function was broken in EXTLINUX 3.00-3.02.
-
- On boot, ES:DI is supposed to point to the BIOS $PnP
- structure, although in practice most operating systems
- will search for it in memory. However, preserving
- this while chainloading is probably a good idea.
-
- Note that FS:SI is a pointer to a memory location
- containing the original ES:DI value, not the value
- itself.
-
-
- [PXELINUX]
- Input: AX 000Ah
- Output: AL 32h (PXELINUX)
- DX PXE API version detected (DH=major, DL=minor)
- ECX Local IP number (network byte order) [3.85]
- ES:BX pointer to PXENV+ or !PXE structure
- FS:SI pointer to original stack with invocation record
- GS:DI pointer to network information [4.00]
-
- Note: DX notes the API version detected by PXELINUX,
- which may be more conservative than the actual version
- available. For exact information examine the API
- version entry in the PXENV+ structure, or the API
- version entries in the ROMID structures pointed from
- the !PXE structure.
-
- PXELINUX will use, and provide, the !PXE structure
- over the PXENV+ structure. Examine the structure
- signature to determine which particular structure was
- provided.
-
- The FS:SI pointer points to the top of the original stack
- provided by the PXE stack, with the following values
- pushed at the time PXELINUX is started:
-
- [fs:si+0] GS <- top of stack
- [fs:si+2] FS
- [fs:si+4] ES
- [fs:si+6] DS
- [fs:si+8] EDI
- [fs:si+12] ESI
- [fs:si+16] EBP
- [fs:si+20] -
- [fs:si+24] EBX
- [fs:si+28] EDX
- [fs:si+32] ECX
- [fs:si+36] EAX
- [fs:si+40] EFLAGS
- [fs:si+44] PXE return IP <- t.o.s. when PXELINUX invoked
- [fs:si+46] PXE return CS
-
- GS:DI points to a structure of the following form:
-
- [gs:di+0] 4 - IPv4
- [gs:di+4] My IP
- [gs:di+8] Boot server IP
- [gs:di+12] Gateway IP
- [gs:di+16] Netmask
-
- [ISOLINUX]
- Input: AX 000Ah
- Output: AL 33h (ISOLINUX)
- DL drive number
- CL 11 (sector size as a power of 2) [3.35]
- CH mode [3.73]
- 0 = El Torito
- 1 = Hybrid (hard disk), CBIOS mode
- 2 = Hybrid (hard disk), EBIOS mode
- ES:BX pointer to El Torito spec packet
- FS:SI pointer to initial ES:DI value [3.53]
- GS:DI pointer to partition offset (QWORD) [4.00]
-
- Note: Some very broken El Torito implementations do
- not provide the spec packet information. If so, ES:BX
- may point to all zeroes or to garbage. Call INT 13h,
- AX=4B01h to obtain the spec packet directly from the
- BIOS if necessary.
-
-
-AX=000Bh [2.00] Get Serial Console Configuration
-
- Input: AX 000Bh
- Output: DX serial port I/O base (e.g. 3F8h = COM1...)
- CX baud rate divisor (1 = 115200 bps, 2 = 57600 bps...)
- BX flow control configuration bits (see syslinux.txt)
- -> bit 15 is set if the video console is disabled
-
- If no serial port is configured, DX will be set to 0 and the
- other registers are undefined.
-
-
-AX=000Ch [2.00] Perform final cleanup
- Input: AX 000Ch
- DX derivative-specific flags (0000h = clean up all)
- Output: None
-
- This routine performs any "final cleanup" the boot loader
- would normally perform before loading a kernel, such as
- unloading the PXE stack in the case of PXELINUX. AFTER
- INVOKING THIS CALL, NO OTHER API CALLS MAY BE INVOKED, NOR MAY
- THE PROGRAM TERMINATE AND RETURN TO THE BOOT LOADER. This
- call basically tells the boot loader "get out of the way, I'll
- handle it from here."
-
- For COM32 images, the boot loader will continue to provide
- interrupt and BIOS call thunking services as long its memory
- areas (0x0800-0xffff, 0x100000-0x100fff) are not overwritten.
- MAKE SURE TO DISABLE INTERRUPTS, AND INSTALL NEW GDT AND IDTS
- BEFORE OVERWRITING THESE MEMORY AREAS.
-
- The permissible values for DX is an OR of these values:
-
- SYSLINUX: 0000h Normal cleanup
-
- PXELINUX: 0000h Normal cleanup
- 0003h Keep UNDI and PXE stacks loaded
-
- ISOLINUX: 0000h Normal cleanup
-
- EXTLINUX: 0000h Normal cleanup
-
- All other values are undefined, and may have different
- meanings in future versions of Syslinux.
-
-
-AX=000Dh [2.08] Cleanup and replace bootstrap code
- Input: AX 000Dh
- DX derivative-specific flags (see previous function)
- EDI bootstrap code (linear address, can be in high memory)
- ECX bootstrap code length in bytes (must fit in low mem)
- EBX(!) initial value of EDX after bootstrap
- ESI initial value of ESI after bootstrap
- DS initial value of DS after bootstrap
- Output: Does not return
-
- This routine performs final cleanup, then takes a piece of
- code, copies it over the primary bootstrap at address 7C00h,
- and jumps to it. This can be used to chainload boot sectors,
- MBRs, bootstraps, etc.
-
- Normal boot sectors expect DL to contain the drive number,
- and, for hard drives (DL >= 80h) DS:SI to contain a pointer to
- the 16-byte partition table entry. The memory between
- 600h-7FFh is available to put the partition table entry in.
-
- For PXELINUX, if the PXE stack is not unloaded, all registers
- (except DS, ESI and EDX) and the stack will be set up as they
- were set up by the PXE ROM.
-
-
-AX=000Eh [2.11] Get configuration file name
- Input: AX 0000Eh
- Output: ES:BX null-terminated file name string
-
- Returns the name of the configuration file. Note that it is
- possible that the configuration file doesn't actually exist.
-
-
-AX=000Fh [3.00] Get IPAPPEND strings [PXELINUX]
- Input: AX 000Fh
- Output: CX number of strings (currently 2)
- ES:BX pointer to an array of NEAR pointers in
- the same segment, one for each of the above
- strings
-
- Returns the same strings that the "ipappend" option would have
- added to the command line, one for each bit of the "ipappend"
- flag value, so entry 0 is the "ip=" string and entry 1 is the
- "BOOTIF=" string.
-
-
-AX=0010h [3.00] Resolve hostname [PXELINUX]
- Input: AX 0010h
- ES:BX pointer to null-terminated hostname
- Output: EAX IP address of hostname (zero if not found)
-
- Queries the DNS server(s) for a specific hostname. If the
- hostname does not contain a dot (.), the local domain name
- is automatically appended.
-
- This function only return CF=1 if the function is not
- supported. If the function is supported, but the hostname did
- not resolve, it returns with CF=0, EAX=0.
-
- The IP address is returned in network byte order, i.e. if the
- IP address is 1.2.3.4, EAX will contain 0x04030201. Note that
- all uses of IP addresses in PXE are also in network byte order.
-
-
-AX=0011h [3.05] Obsoleted in 3.80
-
-
-AX=0012h [3.50] Cleanup, shuffle and boot
- Input: AX 0012h
- DX derivative-specific flags (see function 000Ch)
- ES:DI shuffle descriptor list (must be in low memory)
- CX number of shuffle descriptors
- EBX(!) initial value of EDX after bootstrap
- ESI initial value of ESI after bootstrap
- DS initial value of DS after bootstrap
- EBP CS:IP of routine to jump to
- Output: Does not return
- (if CX is too large the routine returns with CF=1)
-
- This routine performs final cleanup, then performs a sequence
- of copies, and jumps to a specified real mode entry point.
- This is a more general version of function 000Dh, which can
- also be used to load other types of programs.
-
- The copies must not touch memory below address 7C00h.
-
- ES:DI points to a list of CX descriptors each of the form:
-
- Offset Size Meaning
- 0 dword destination address
- 4 dword source address
- 8 dword length in bytes
-
- The copies are overlap-safe, like memmove().
-
- Starting in version 3.50, if the source address is -1
- (FFFFFFFFh) then the block specified by the destination
- address and the length is set to all zero.
-
- Starting in version 3.50, if the destination address is -1
- (FFFFFFFFh) then the data block is loaded as a new set of
- descriptors, and processing is continued (and unprocessed
- descriptors are lost, this is thus typically only used as the
- last descriptor in a block.) The block must still fit in the
- internal descriptor buffer (see function 0011h), but can, of
- course, itself chain another block.
-
-
- Normal boot sectors expect DL to contain the drive number,
- and, for hard drives (DL >= 80h) DS:SI to contain a pointer to
- the 16-byte partition table entry. The memory between
- 600h-7FFh is available to put the partition table entry in.
-
- For PXELINUX, if the PXE stack is not unloaded, all registers
- (except DS, ESI and EDX) and the stack will be set up as they
- were set up by the PXE ROM.
-
- This interface was probably broken before version 3.50.
-
-
-AX=0013h [3.08] Idle loop call
- Input: AX 0013h
- Output: None
-
- Call this routine while sitting in an idle loop. It performs
- any periodic activities required by the filesystem code. At
- the moment, this is a no-op on all derivatives except
- PXELINUX, where it executes PXE calls to answer ARP queries.
-
- Starting with version 3.10, this API call harmlessly returns
- failure (CF=1) if invoked on a platform which does not need
- idle calls. Additionally, it's safe to call this API call on
- previous Syslinux versions (2.00 or later); it will just
- harmlessly fail. Thus, if this call returns failure (CF=1),
- it means that there is no technical reason to call this
- function again, although doing so is of course safe.
-
-
-AX=0014h [3.10] Local boot [PXELINUX, ISOLINUX]
- Input: AX 0014h
- DX Local boot parameter
- Output: Does not return
-
- This function invokes the equivalent of the "localboot"
- configuration file option. The parameter in DX is the same
- parameter as would be entered after "localboot" in the
- configuration file; this parameter is derivative-specific --
- see syslinux.txt for the definition.
-
-
-AX=0015h [3.10] Get feature flags
- Input: AX 0015h
- Output: ES:BX pointer to flags in memory
- CX number of flag bytes
-
- This function reports whether or not this Syslinux version and
- derivative supports specific features. Keep in mind that
- future versions might have more bits; remember to treat any
- bits beyond the end of the array (as defined by the value in
- CX) as zero.
-
- Currently the following feature flag is defined:
-
- Byte Bit Definition
- ----------------------------------------------------
- 0 0 Local boot (AX=0014h) supported
- 1 Idle loop call (AX=0013h) is a no-op
-
- All other flags are reserved.
-
-
-AX=0016h [3.10] Run kernel image
- Input: AX 0016h
- DS:SI Filename of kernel image (zero-terminated string)
- ES:BX Command line (zero-terminated string)
- ECX IPAPPEND flags [PXELINUX]
- EDX Type of file (since 3.50)
- Output: Does not return if successful; returns with CF=1 if
- the kernel image is not found.
-
- This function is similiar to AX=0003h Run command, except that
- the filename and command line are treated as if specified in a
- KERNEL and APPEND statement of a LABEL statement, which means:
-
- - The filename has to be exact; no variants are tried;
- - No global APPEND statement is applied;
- - ALLOWOPTIONS and IMPLICIT statements in the configuration
- file do not apply. It is therefore important that the
- COMBOOT module doesn't allow the end user to violate the
- intent of the administrator.
-
- Additionally, this function returns with a failure if the file
- doesn't exist, instead of returning to the command line. (It
- may still return to the command line if the image is somehow
- corrupt, however.)
-
- The file types are defined as follows:
-
- Equivalent
- EDX Config Extensions Type of file
- 0 KERNEL Determined by filename extension
- 1 LINUX none Linux kernel image
- 2 BOOT .bs .bin Bootstrap program
- 3 BSS .bss Boot sector with patch [SYSLINUX]
- 4 PXE .0 PXE Network Bootstrap Prog [PXELINUX]
- 5 FDIMAGE .img Floppy disk image [ISOLINUX]
- 6 COMBOOT .com .cbt 16-bit COMBOOT program
- 7 COM32 .c32 COM32 program
- 8 CONFIG Configuration file
-
-
-AX=0017h [3.30] Report video mode change
- Input: AX 0017h
- BX Video mode flags
- Bit 0: graphics mode
- Bit 1: non-default mode
- Bit 2: VESA mode
- Bit 3: text functions not supported
- CX For graphics modes, pixel columns
- DX For graphics modes, pixel rows
- Output: None
-
- This function is used to report video mode changes to
- Syslinux. It does NOT actually change the video mode, but
- rather, allows Syslinux to take appropriate action in response
- to a video mode change. Modes that cannot be exited either
- with the conventional BIOS mode set command (INT 10h, AH=00h)
- or the VESA VBE mode set command (INT 10h, AX=4F02h) should
- not be used.
-
- This function returns with a failure if BX contains any bits
- which are undefined in the current version of Syslinux.
-
- The following bits in BX are currently defined:
-
- Bit 0: graphics mode
-
- Indicates that the mode is a graphics mode, as opposed
- to a text mode.
-
- Bit 1: non-standard mode
-
- A non-standard mode is any mode except text mode and
- graphics mode 0012h (VGA 640x480, 16 color.)
-
- Bit 2: VESA mode
-
- This mode is a VESA mode, and has to be exited with
- the VESA VBE API (INT 10h, AX=4F02h) as opposed to the
- conventional BIOS API (INT 10h, AH=00h).
-
- Bit 3: Text functions not supported
-
- This indicates that the BIOS text output functions
- (INT 10h, AH=02h, 03h, 06h, 09h, 0Eh, 11h) don't work.
- If this bit is set, Syslinux will reset the mode
- before printing any characters on the screen.
-
- This is common for VESA modes.
-
-
-AX=0018h [3.30] Query custom font
- Input: AX 0018h
- Output: AL Height of custom font in scan lines, or zero
- ES:BX Pointer to custom font in memory
-
- This call queries if a custom display font has been loaded via
- the "font" configuration file command. If no custom font has
- been loaded, AL contains zero.
-
-
-AX=0019h [3.50] Read disk [SYSLINUX, ISOLINUX, EXTLINUX]
- Input: AX 0019h
- EDX Sector number (LSW)
- ESI Sector number (MSW) [4.00]
- EDI Reserved - MUST BE ZERO
- CX Sector count
- ES:BX Buffer address
- Output: None
-
- Read disk blocks from the active filesystem (partition); for
- disks, sector number zero is the boot sector. For ISOLINUX,
- this call reads the CD-ROM.
-
- For compatiblity with all systems, the buffer should
- *neither* cross 64K boundaries, *nor* wrap around the segment.
-
- This routine reports "boot failed" (and does not return) on
- disk error.
-
- Note: for ISOLINUX in hybrid mode, this call uses simulated
- 2048-byte CD-ROM sector numbers.
-
-
-AX=001Ah [3.50] Obsoleted in 3.80
-
-
-AX=001Bh [3.50] Obsoleted in 3.80
-
-
-AX=001Ch [3.60] Get pointer to auxilliary data vector
- Input: AX 001Ch
- Output: ES:BX Auxilliary data vector
- CX Size of the ADV (currently 500 bytes)
-
- The auxillary data vector is a tagged data structure used
- to carry a small amount of information (up to 500 bytes) from
- one boot to another.
-
-
-AX=001Dh [3.60] Write auxilliary data vector
- Input: AX 001Dh
- Output: None
-
- Write the auxilliary data vector back to disk. Returns
- failure for non-disk-based derivatives unless the "auxdata"
- configuration command is used to specify a disk location
- (not yet implemented.)
-
- In a future version, PXELINUX may end up attempting to save
- the ADV on the server via TFTP write.
-
-
-AX=001Eh [3.74] Keyboard remapping table
- Input: AX 001Eh
- DX 0000h - all other values reserved
- Output: AX format version (1)
- CX length in bytes (256)
- ES:BX pointer to keyboard table
-
- This call queries the keyboard remapping table. For the current
- version, the format code is always 1 and the length is always
- 256. This version can be updated simply by overwriting the version
- in memory; this may not be true in the future.
-
-
-AX=001Fh [3.74] Get current working directory
- Input: AX 0001Fh
- Output: ES:BX null-terminated directory name string
-
- Returns the current working directory.
-
-
-AX=0020h [3.74] Obsoleted in 4.00
-AX=0021h [3.74] Obsoleted in 4.00
-AX=0022h [3.74] Obsoleted in 4.00
-
- These three functions provided opendir/readdir/closedir
- functionality in the late 3.xx series. They have been
- replaced by the protected-mode interface.
-
-
-AX=0023h [3.80] Get shuffler parameters
- Input: AX 0023h
- Output: CX size of shuffler "safe area" in bytes
- Other registers reserved for future use
-
- This call gives the size of the required shuffler "safe area",
- in bytes; for call 0024h. In the future, it may provide
- additional parameters.
-
-
-AX=0024h [3.80] Cleanup, shuffle and boot, raw version
- Input: AX 0024h
- DX derivative-specific flags (see function 000Ch)
- EDI shuffle descriptor list safe area
- ESI shuffle descriptor list source
- ECX byte count of shuffle descriptor list
- Output: Does not return
-
- This routine performs final cleanup, then performs a sequence
- of copies, and jumps to a specified real mode entry point.
- This is a more general version of function 000Dh, which can
- also be used to load other types of programs.
-
- Unlike previous obsolete versions of this function, there are
- no restrictions that copies must not touch memory below
- address 7C00h. Either the shuffle descriptor list or the safe
- area (or both) may be located in high memory.
-
- ESI points to a list of descriptors each of the form:
-
- Offset Size Meaning
- 0 dword destination address
- 4 dword source address (-1 = zero)
- 8 dword length in bytes (0 = end of list)
-
- The copies are overlap-safe, like memmove().
-
- Before actually executing the move list, the list is moved to
- the address specified in EDI. The caller is responsibe to
- ensure that the moved descriptor list plus a "safe area"
- immediately afterwards (the size of which is specified by
- function 0023h) is not disturbed by the copy sequence. It is,
- however, safe to overwrite descriptors already consumed.
-
- If the source address is -1 (FFFFFFFFh) then the block
- specified by the destination address and the length is set to
- all zero.
-
- The list is terminated by an entry with length 0. For that
- entry, the destination is used as an entry point, and the
- source represents the type of entry point:
-
- 0 16-bit protected mode (dst is CS.base)
- 1 Flat 32-bit protected mode (dst is EIP)
-
- This routine does not set up any GPR register state
- whatsoever, including stack. It is the responsibility of the
- caller to make sure the entry point provided sets up any
- registers needed.
-
- For mode 0 (16-bit real mode), EAX will contain CR0 with bit 0
- masked out, suitable for loading into CR0 to immediately enter
- real mode. Note: if real-mode entry is planned,
- (CS.base & 0xfff0000f) should == 0 for compatibility with KVM,
- and possibly other virtualization solutions.
-
- In both mode 0 and mode 1, the data segments will be loaded
- with read/write data segments, matching the respective code
- segment. For mode 0, B=0 and the limits will be 64K, for mode
- 1, B=1 and the limits will be 4 GB.
-
-
- ++++ 32-BIT ONLY API CALLS ++++
-
-void *pm_cs->lmalloc(size_t bytes)
-
- Allocate a buffer in low memory (below 1 MB).
-
-
-void pm_cs->lfree(void *ptr)
-
- Free a buffer allocated with pm_cs->lmalloc().
-
-
-DIR *pm_cs->opendir(const char *pathname)
-
- Open a directory.
-
-
-struct dirent *pm_cs->readdir(DIR *dir)
-
- Read an entry from a directory. The entry is returned in a
- static buffer.
-
-
-int pm_cs->closedir(DIR *dir)
-
- Close a directory.