1	.text
2	.code16
3	.arch i386
4	.section ".prefix", "ax", @progbits
5
6/* UNDI loader
7 *
8 * Called by an external program to load our PXE stack.
9 */
10	.globl	undiloader
11undiloader:
12	/* Save registers */
13	pushl	%esi
14	pushl	%edi
15	pushw	%ds
16	pushw	%es
17	pushw	%bx
18	/* ROM segment address to %ds */
19	pushw	%cs
20	popw	%ds
21	/* UNDI loader parameter structure address into %es:%di */
22	movw	%sp, %bx
23	movw	%ss:18(%bx), %di
24	movw	%ss:20(%bx), %es
25	/* Install to specified real-mode addresses */
26	pushw	%di
27	movw	%es:12(%di), %bx
28	movw	%es:14(%di), %ax
29	movl	image_source, %esi
30	movl	decompress_to, %edi
31	call	install_prealloc
32	popw	%di
33	/* Call UNDI loader C code */
34	pushl	$pxe_loader_call
35	pushw	%cs
36	pushw	$1f
37	pushw	%ax
38	pushw	$prot_call
39	lret
401:	popw	%bx	/* discard */
41	popw	%bx	/* discard */
42	/* Restore registers and return */
43	popw	%bx
44	popw	%es
45	popw	%ds
46	popl	%edi
47	popl	%esi
48	lret
49	.size undiloader, . - undiloader
50