1;; -----------------------------------------------------------------------
2;;
3;;   Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
4;;   Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
5;;
6;;   This program is free software; you can redistribute it and/or modify
7;;   it under the terms of the GNU General Public License as published by
8;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9;;   Boston MA 02111-1307, USA; either version 2 of the License, or
10;;   (at your option) any later version; incorporated herein by reference.
11;;
12;; -----------------------------------------------------------------------
13
14;;
15;; com32.inc
16;;
17;; Common code for running a COM32 image
18;;
19
20		extern pm_api_vector
21
22;
23; Load a COM32 image.  A COM32 image is the 32-bit analogue to a DOS
24; .com file.  A COM32 image is loaded at address 0x101000, with %esp
25; set to the high end of usable memory.
26;
27; A COM32 image should begin with the magic bytes:
28; B8 FF 4C CD 21, which is "mov eax,0x21cd4cff" in 32-bit mode and
29; "mov ax,0x4cff; int 0x21" in 16-bit mode.  This will abort the
30; program with an error if run in 16-bit mode.
31;
32		bits 16
33		section .data16
34
35		; Ersatz com32 invocation structure, to make libcom32
36		; code run the same if linked to the core.  This is in
37		; the .data16 segment so HighMemSize can live here.
38		;
39		; Danger, Will Robinson: it's not clear the use of
40		; core_xfer_buf is safe here.
41		global __com32:data hidden
42		alignz 4
43__entry_esp:
44		dd 0				; Dummy to avoid _exit issues
45__com32:
46		dd 9				; Argument count
47		dd 0				; No command line
48		dd core_intcall			; Intcall entry point
49		dd 0				; Bounce buffer address
50		dd 0				; 64K bounce buffer
51		dd core_farcall			; Farcall entry point
52		dd core_cfarcall		; Cfarcall entry point
53HighMemSize	dd 0				; End of memory pointer (bytes)
54		dd 0				; No module name
55		dd pm_api_vector		; Protected mode functions
56
57		section .uibss
58Com32Name	resb FILENAME_MAX
59
60		section .bss16
61%ifndef HAVE_CURRENTDIRNAME
62		global CurrentDirName:data hidden
63CurrentDirName	resb FILENAME_MAX
64%endif
65
66		section .text16
67