aboutsummaryrefslogtreecommitdiff
path: root/core/com32.inc
diff options
context:
space:
mode:
Diffstat (limited to 'core/com32.inc')
-rw-r--r--core/com32.inc66
1 files changed, 66 insertions, 0 deletions
diff --git a/core/com32.inc b/core/com32.inc
new file mode 100644
index 0000000..5561c72
--- /dev/null
+++ b/core/com32.inc
@@ -0,0 +1,66 @@
+;; -----------------------------------------------------------------------
+;;
+;; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
+;; Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+;; Boston MA 02111-1307, USA; either version 2 of the License, or
+;; (at your option) any later version; incorporated herein by reference.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; com32.inc
+;;
+;; Common code for running a COM32 image
+;;
+
+ extern pm_api_vector
+
+;
+; Load a COM32 image. A COM32 image is the 32-bit analogue to a DOS
+; .com file. A COM32 image is loaded at address 0x101000, with %esp
+; set to the high end of usable memory.
+;
+; A COM32 image should begin with the magic bytes:
+; B8 FF 4C CD 21, which is "mov eax,0x21cd4cff" in 32-bit mode and
+; "mov ax,0x4cff; int 0x21" in 16-bit mode. This will abort the
+; program with an error if run in 16-bit mode.
+;
+ bits 16
+ section .data16
+
+ ; Ersatz com32 invocation structure, to make libcom32
+ ; code run the same if linked to the core. This is in
+ ; the .data16 segment so HighMemSize can live here.
+ ;
+ ; Danger, Will Robinson: it's not clear the use of
+ ; core_xfer_buf is safe here.
+ global __com32:data hidden
+ alignz 4
+__entry_esp:
+ dd 0 ; Dummy to avoid _exit issues
+__com32:
+ dd 9 ; Argument count
+ dd 0 ; No command line
+ dd core_intcall ; Intcall entry point
+ dd 0 ; Bounce buffer address
+ dd 0 ; 64K bounce buffer
+ dd core_farcall ; Farcall entry point
+ dd core_cfarcall ; Cfarcall entry point
+HighMemSize dd 0 ; End of memory pointer (bytes)
+ dd 0 ; No module name
+ dd pm_api_vector ; Protected mode functions
+
+ section .uibss
+Com32Name resb FILENAME_MAX
+
+ section .bss16
+%ifndef HAVE_CURRENTDIRNAME
+ global CurrentDirName:data hidden
+CurrentDirName resb FILENAME_MAX
+%endif
+
+ section .text16