PXELINUX itself doesn't actually use the PXE return code, but the
COMBOOT interface is supposed to return it. Accordingly, make sure it
is stashed away so we can return it; for code that doesn't care, it
just writes a dedicated status variable which can be safely ignored.
mov es,P_ES
mov di,P_DI
call pxenv
+ mov ax,[PXEStatus]
mov P_AX,ax
- clc
ret
%else
comapi_pxecall equ comapi_err ; Not available
push bx
.jump: call 0:0
add sp,6
+ mov [cs:PXEStatus],ax
add ax,-1 ; Set CF unless AX was 0
%if USE_PXE_PROVIDED_STACK == 0
; except for testing it against zero (and setting CF),
; which we did above. For anything else,
; use the Status field in the reply.
+ ; For the COMBOOT function, the value is saved in
+ ; the PXEStatus variable.
popad
cld ; Make sure DF <- 0
ret
; Must be after function def due to NASM bug
PXEEntry equ pxenv.jump+1
+ section .bss
+ alignb 2
+PXEStatus resb 2
+
+ section .text
+
;
; getfssec: Get multiple clusters from a file, given the starting cluster.
;