all uses of IP addresses in PXE are also in network byte order.
-AX=0011h [3.05] Maximum number of shuffle descriptors
- Input: AX 0011h
- Output: CX maximum number of descriptors
-
- This routine reports the maximum number of shuffle descriptors
- permitted in a call to functions 0012h, 001Ah and 001Bh.
-
- This is guaranteed to be at least 64. For the current
- version, this is 682 for all derivatives.
+AX=0011h [3.05] Obsoleted in 3.75
AX=0012h [3.50] Cleanup, shuffle and boot
2048-byte CD-ROM sector numbers.
-AX=001Ah [3.50] Cleanup, shuffle and boot to flat protected mode
- Input: AX 001Ah
- DX derivative-specific flags (see function 000Ch)
- ES:DI shuffle descriptor list (must be in low memory)
- CX number of shuffle descriptors
- DS:SI pointer to register values (must be in low memory)
- Output: Does not return
- (if CX is too large the routine returns with CF=1)
+AX=001Ah [3.50] Obsoleted in 3.75
- This routine performs final cleanup, then performs a sequence
- of copies, and jumps to a specified protected mode entry point.
- This is otherwise similar to function 0012h; see that function
- for the meaning of ES:DI and CX.
-
- DS:SI points to the initial register file, which is a structure
- of 9 dwords (available in <syslinux/bootpm.h>):
-
- struct syslinux_pm_regs {
- uint32_t eax; /* Offset 0 */
- uint32_t ecx; /* Offset 4 */
- uint32_t edx; /* Offset 8 */
- uint32_t ebx; /* Offset 12 */
- uint32_t esp; /* Offset 16 */
- uint32_t ebp; /* Offset 20 */
- uint32_t esi; /* Offset 24 */
- uint32_t edi; /* Offset 28 */
-
- uint32_t eip; /* Offset 32 */
- };
-
- Protected mode is entered with all data segments set up as a
- flat 32-bit read/write segment and the code segment a flat 32-bit
- read/execute segment. Interrupts and paging is off, CPL=0, DF=0;
- however, GDT, LDT and IDT are undefined, so it is up to the
- invoked code to set new descriptor tables to its liking.
-
-
-AX=001Bh [3.50] Cleanup, shuffle and boot to real mode
- Input: AX 001Bh
- DX derivative-specific flags (see function 000Ch)
- ES:DI shuffle descriptor list (must be in low memory)
- CX number of shuffle descriptors
- DS:SI pointer to register values (must be in low memory)
- 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 entry point.
- This is similar to function 0012h but allow more control over
- the initial register state; see that function for the meaning of
- ES:DI and CX.
-
- DS:SI points to the initial register file, which is a structure
- in the following format (available in <syslinux/bootrm.h>;
- note that this is a completely different structure from the
- com32sys_t structure described at the top of this document!):
-
- struct syslinux_rm_regs {
- uint16_t es; /* Offset 0 */
- uint16_t _unused_cs; /* Offset 2 */
- uint16_t ds; /* Offset 4 */
- uint16_t ss; /* Offset 6 */
- uint16_t fs; /* Offset 8 */
- uint16_t gs; /* Offset 10 */
-
- reg32_t eax; /* Offset 12 */
- reg32_t ecx; /* Offset 16 */
- reg32_t edx; /* Offset 20 */
- reg32_t ebx; /* Offset 24 */
- reg32_t esp; /* Offset 28 */
- reg32_t ebp; /* Offset 32 */
- reg32_t esi; /* Offset 36 */
- reg32_t edi; /* Offset 40 */
-
- uint16_t ip; /* Offset 44 */
- uint16_t cs; /* Offset 46 */
- };
-
- Interrupts are off and DF=0 on entry.
+AX=001Bh [3.50] Obsoleted in 3.75
AX=001Ch [3.60] Get pointer to auxilliary data vector
Output SI 0
Closes a directory.
+
+
+AX=0023h [3.75] 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.75] Cleanup, shuffle and boot, raw version
+ Input: AX 0024h
+ DX derivative-specific flags (see function 000Ch)
+ EDI shuffle descriptor list
+ EBX pointer to a "safe area" in memory
+ 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.
+
+ EDI 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().
+
+ 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 Real mode (dst is CS:IP)
+ 1 Flat 32-bit protected mode (dst is EIP)
+
+ This routine does not set up any register state whatsoever,
+ including stack. It is the responsibility of the caller to
+ make sure the entry point provided sets up any registers
+ needed. This is particularly important that a real mode entry
+ point reloads all data segment registers at the earliest
+ possible point.
+
+ It is the responsibility of the caller that neither the
+ descriptor list nor the "safe area" is disturbed by the copy
+ sequence. It is, however, safe to overwrite descriptors
+ already consumed.