Certain calls to the PXE stack could potentially remove us from
memory. Revert the INT 1Ch timer to its previous state.
pushfd
pushad
+ ; We may be removing ourselves from memory
+ cmp bx,0073h
+ jz .disable_timer
+ jmp .store_stack
+
+.disable_timer:
+ call timer_cleanup
+
+.store_stack:
mov [cs:PXEStack],sp
mov [cs:PXEStack+2],ss
lss sp,[cs:InitStack]
; This clobbers the AX return, but we already saved it into
; the PXEStatus variable.
popad
+
+ ; If the TFTP failed, it could return.
+ cmp bx,0073h
+ jz .enable_timer
+ jmp .pop_flags
+
+.enable_timer:
+ call timer_init
+
+.pop_flags:
popfd ; Restore flags (incl. IF, DF)
ret