Okay,
now I've added the 7 deskriptors to my GDT:
Code: Select all
; PXE Stack segment descriptor
PXE_STACK_SEL equ $-gdt
gdt9:
dw 0xFFFF
dw 0x2000
db 0
db 0x91
db 0x4F
db 0
PXE_UNDIDATA_SEL equ $-gdt
gdt10:
dw 0xFFFF
dw 0x3000
db 0
db 0x91
db 0x4F
db 0
PXE_UNDICODE_SEL equ $-gdt
gdt11:
dw 0xFFFF
dw 0x4000
db 0
db 0x95
db 0x4F
db 0
PXE_UNDICODEWRITE_SEL equ $-gdt
gdt12:
dw 0xFFFF
dw 0x5000
db 0
db 0x91
db 0x4F
db 0
PXE_BCDATA_SEL equ $-gdt
gdt13:
dw 0xFFFF
dw 0x6000
db 0
db 0x91
db 0x4F
db 0
PXE_BCCODE_SEL equ $-gdt
gdt14:
dw 0xFFFF
dw 0x7000
db 0
db 0x95
db 0x4F
db 0
PXE_BCWRITE_SEL equ $-gdt
gdt15:
dw 0xFFFF
dw 0x8000
db 0
db 0x91
db 0x4F
db 0
And than I've written the excepted values at offset 0x1E and following of the PXE Structur Table:
Code: Select all
pxe_found:
add edi, 0x14
mov dword esi, [es:edi]
mov dword [PXE_API_Entry], esi
add edi, 0x04
mov dword [es:edi], -1
add edi, 0x05
cmp byte [es:edi], 0x04
je sel4
cmp byte [es:edi], 0x07
je sel7
jmp detect_pxe_done
sel4:
mov ebx, 0xB83D8
mov byte [es:ebx], '4'
jmp detect_pxe_done
sel7:
mov ebx, 0xB83D8
mov byte [es:ebx], '7'
add edi, 0x01
mov word [es:edi], PXE_STACK_SEL
add edi, 0x02
mov word [es:edi], PXE_STACK_SEL
add edi, 0x02
mov dword [es:edi], 0x00002000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_UNDIDATA_SEL
add edi, 0x02
mov dword [es:edi], 0x00003000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_UNDICODE_SEL
add edi, 0x02
mov dword [es:edi], 0x00004000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_UNDICODEWRITE_SEL
add edi, 0x02
mov dword [es:edi], 0x00005000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_BCDATA_SEL
add edi, 0x02
mov dword [es:edi], 0x00006000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_BCCODE_SEL
add edi, 0x02
mov dword [es:edi], 0x00007000
add edi, 0x04
mov word [es:edi], 0xFFFF
add edi, 0x02
mov word [es:edi], PXE_BCWRITE_SEL
add edi, 0x02
mov dword [es:edi], 0x00008000
add edi, 0x04
mov word [es:edi], 0xFFFF
jmp detect_pxe_done
But if I want to call the function...
Code: Select all
mov ax, PXE_UNDICODE_SEL
mov es, ax
push es
push s_PXENV_GET_CACHED_INFO
push 0x0071
call far [PXE_API_Entry]
add esp, 3 * 4
...I'm still ending in a system crash